ほろ酔い開発日誌

AI企業のエンジニアのブログです。機械学習、Web開発の技術的お話、ビジネスチックなお話、日常のお役立ち情報など雑多な内容でお送りします。

画像ベースの仮想試着の最新手法 O-VITON [Amazon CVPR'20]のご紹介

f:id:seishin55:20200613182300j:plain

はじめに

今回は先日Amazonが公開し、CVPR'20にも採録された最新の仮想試着の論文について説明したいと思います。私自身、同系統の仮想試着の研究を行っていたので、周辺知識や個人的な見解も交えて説明をしたいと思います。背景が長いのですが、読むと仮想試着の研究について雰囲気がつかめると思います。

O-VITON [Neuberger+ CVPR'20] Image Based Virtual Try-on Network from Unpaired Data

注目ポイントは、以下の2点です。

  1. 学習に使うデータセットの条件が緩くなり、かつ、精度も既存手法に勝る
  2. 既存手法では特定のアイテムだけの着せ替え(例: トップスだけの着せ替え)だったが、複数のアイテムを一度に着せ替えられるようになった

(以下、説明では各論文から引用した画像を用います。)

以下が、結果の図です。「Query Image」の人物に「Reference garments」の服を着せて、「Result」の結果を生成しています。

f:id:seishin55:20200613150433p:plain

結果を見てもらえると分かるのですが、非常にきれいな生成ができていることが分かると思います。

画像ベースの仮想試着の背景

CAGAN

仮想試着の研究は以前より行われていましたが、3Dモデリングのようにコストが高いという課題がありました。そこで、提案されたのが画像のみを入力として利用する仮想試着の手法です。このような3D情報の入力なしに画像上で着せ替えを行う手法のことを画像ベースの仮想試着といいます。

この画像ベースの仮想試着の手法を最初に提案をしたのは私の知る限り、CAGAN ([Jetchev+ ICCVW'17] The Conditional Analogy GAN: Swapping Fashion Articles on People Images )です。

行っていることは、以下の画像のように、人物画像 (x_i)、人物が着用している服の画像 (y_i)、着せ替えたい服の画像 (y_j)を入力にして、着せ替わった服の画像(x_i^j)を出力することです。特定の服(ここではトップス)に対して着せ替えを行います。(お気持ちとしては、x_i^j=x_i-y_i+y_jという演算を意識していると思います。)

f:id:seishin55:20200613154004p:plain

やっていることはシンプルに入力の画像をチャンネル方向に結合後、ネットワークの入力として、あとはGANを用いて学習させています。

f:id:seishin55:20200613154736p:plain

この論文の著者はZalandoというファッションECサイトの研究チームに所属しており、データもそのデータを使っています。ある服の画像とその服を着用している服のペアのデータがあればいいので、そのようなデータをECサイトから収集できるわけです。

この手法は、シンプルな条件であればそこそこうまくいくのですが模様があるとうまくいきません。元々の服の模様が出力に影響を与えたり、着せ替えたい服の模様がうまく反映できなかったりすることが多いです。

このあたりの実験はこちらのblogが色々実験をされていて面白いです。Cloth Swapping with Deep Learning: Implement Conditional Analogy GAN in Keras

CAGANを実際に学習させてみると分かるのですが、ネットワークを使って模様を移すということは単純な構造では限界があることがよく分かります。

(ちなみに、私は以前、このCAGANの問題の部分的な解決手法を論文誌に出しました。[久保+ 情報処理学会論文誌'19] 服の領域を考慮した写真上の人物の自動着せ替えに関する研究)

なお、今回のO-VITONではCAGANは引用させておらず、次のVITONから説明していました。

VITON

CAGANの後に出た重要な研究がVITON ([Han+ CVPR'18] VITON: An Image-based Virtual Try-on Network)です。

この論文はCAGANでは対応できなかったような模様の服にも対応できるようなフレームワークを提案しました。以下のように、きれいに着せ替えができていることが分かります(左部1列が着せ替えの対象の人物、上部1行が着せ替えたい服で、それ以外は生成結果)。また、CAGANのような対象の人物が着用している服の画像は不要で、人物の画像と着せ替えたい服の画像の2枚の入力から結果の画像を生成できるようになりました。

f:id:seishin55:20200613160604p:plain

この手法のポイントは以下の画像のように、服を着ている部分のマスク (M)に合うように対象の服(c)を変形して、着せ替え後の服の状態(c')を生成する機構にあります。

f:id:seishin55:20200613161100p:plain

CAGANで、ネットワークを使って模様を移すことが難しいと説明しましたが、VITONではその難しさに対応するために、服を幾何的に変形する機構を取り入れたと考えることができます。

CP-VTON

VITONを拡張する形で提案されたのがCP-VTON ([Wang+ ECCV'18] Toward Characteristic-Preserving Image-based Virtual Try-On Network)です。

CP-VTONではVITONが複雑な模様になるとうまくいかない問題(より高度なテクスチャやロゴなど)を指摘して、VITONの服の変形の機構をGeometric Matching Module (GMM)というパラメータベースの変形の機構へと変え、改善を行いました。

以下がVITONとの比較込の結果ですが、良い結果であることが分かります。

f:id:seishin55:20200613162345p:plain

CP-VTONは現段階で仮想試着の性能比較のベンチマークとして最もよく使われる手法のひとつで、今回のO-VITONもこの手法と比較しています。

その他の手法

VITON/CP-VTONの亜種となる論文はいくつか提案されています。以下は今回のO-VITONの論文で触れられていたものを以下にリストに挙げておきます。

このように、最近ではVITON系統の論文が多く、同じ問題設定で、部分的な改善をするものが多い状態でした。今回のO-VITONはこのような状態から一歩上の問題にステップアップしたように見えます。

私自身もCP-VTONをベンチマークに研究を行っていましたが、UVマッピングと呼ばれる3D的な機構を使い、仮想試着の手法を提案しました。[Kubo+ ICCVW'19] UVTON: UV Mapping to Consider the 3D Structure of a Human in Image-Based Virtual Try-On Network

提案手法 O-VITON

注目ポイント

さて、最初の注目ポイントを再度見てみましょう。

  1. 学習に使うデータセットの条件が緩くなり、かつ、精度も既存手法に勝る
  2. 既存手法では特定のアイテムだけの着せ替え(例: トップスだけの着せ替え)だったが、複数のアイテムを一度に着せ替えられるようになった

既存研究では、ある服とその服を着用している人物の画像のペアが必要でした。今回はそのような制約がありません。人物の画像が集めるだけで大丈夫です。また、既存研究では基本的にトップスに限定した着せ替えでしたが、その制約もなく任意の服を着せ替えることができます。

個人的にすごいと感じたポイントが大きく2つあります。1つはVITONのような服の変形の機構をなしのネットワークベースで模様の遷移がうまくできていることです。個人的には服の模様の遷移には、身体モデルであったり、何らかの幾何的なものであったり帰納バイアスを入れてあげたほうが良い結果が出そうだと思っていましたが、それはクリアされるように見えました。

また、もう1つはこれまでの問題設定の限界であったアイテムの数です。様々なアイテムを一度に着せ替えできるので、かなり実用に近づいた印象を受けました。

モデルの説明

以下のように大きく3つのステップがあります。ステップが多そうにも見えますが、個人的にはかなりシンプルに収めたなという印象を受けました。

Shape Generation」で着せ替え後の状態のセグメンテーションを生成し、そのセグメンテーションに模様を付けるように「Appearance Generation」で着せ替え後の画像を生成します。「Appearance Refinement」は結果を精錬してよりよい模様になるように調整します。

f:id:seishin55:20200613172217p:plain

Shape Generation

入力画像には着せ替えの対象の人物 (Query image)と、着せ替えたい服が含まれる画像 (Reference Images 複数枚でも可能)を用意します。(Reference imagesは人物の着用画像でなはない、服単体の画像でもよい) まず、それぞれのセグメンテーションを出します。これは今回の学習とは別で用意します。このセグメンテーションは身体のパーツと服の種類のクラスが用意されています。

このセグメンテーションによってそれぞれ、H \times Wを縦横の長さ、D_cをクラス数として、H \times W \times D_cのようなone-hotな出力を得ます。そしてそれぞれをエンコーダーにかけて、各クラスのチャンネル数を1->D_sにすることで、8 \times 4 \times D_c D_sの出力にします。そして、Query Imageの着せ替えたい服に該当するクラスの部分をReference Imagesと入れ替えます。そしてこれをup scaleすることで、Shape feature mapが用意されます。別途用意した身体を表すQuery body model (これはDense Poseと呼ばれるモデルに対するQuery Imageのの出力値を使います)と合わせて、Shape generation networkの入力とします。ネットワークは着せ替え後に想定されるセグメンテーションのマップを出力することになります。

学習ではGAN (ここではLSGAN)とPerceptual Loss(styleを気にする場合によく用いられるロスの一種です)を使った学習を行います。この学習でautoencoder的に学習を行うため、学習データの条件が緩く済みます。

Appearance Generation

Shape Generationと同じようなことを見た目に関するAppearanceについても行います。エンコーダーの出力を各クラスごとにD_t次元になるようにします。それをShape Generationで出力されるセグメンテーションのマップと組み合わせることで、H \times W \times D_tAppearance feature mapを用意します。(セグメンテーションの各ピクセルD_t次元のベクトルで置き換えるイメージ) その後、このマップとShape Generationの出力を入力にしてAppearance generation networkの入力とします。ネットワークは着せ替え後に想定される画像を出力することになります。学習はShape Generationと同様です。

Shape GenerationとAppearance Generationは同じような操作を形状と見た目に分けて行っています。このような形状と見た目の生成を別で行うという概念はここ1、2年の生成系では頻繁に見るものですし、個人的にもこれは大事だと思います。

Appearance Refinement

Appearance Generationの結果を精錬します。[Gatys CVPR'16] Image Style Transfer Using Convolutional Neural Networksから着想を得たオンライン最適化の精錬ステップを加えます。オンライン最適化とは推論の過程で、学習のときにやるのと同様のステップを一定ステップ行うことを指していると思います。そのときの損失関数として、[Gatys CVPR'16]を使っているというような形です。

学習に使うデータはどこまでいっても限界があるため、学習データにないような服に対しても対応するためにこのような機構を入れるに至ったとのことです。

結果

以下はCP-VTONと比較するためにトップスを着せ替えた結果になります。「with feed-forward」というのがAppearance Refinementなしで「with online optimization」というのがAppearance Refinementありです。アイテムが1つという限定的なシチュエーションでもCP-VTONより結果がよさそうです。(定量評価値でもCP-VTONよりよい結果になっています。)

f:id:seishin55:20200613175625p:plain

気になったのは、Appearance Refinementが大きく模様に関する性能に影響していることです。つまり、そもそもAppearance Refinementこそが重要なファクターであるような感じがして、Appearance Generationがonline optimizationのステップ数を小さくする補助的な役割を果たしているというふうに見たほうがいいかもしれないと思いました。また、online optimizationがどの程度時間的、リソース的コストを持つのかは実用上は気になるところです。

終わりに

今回は、画像ベースの仮想試着の最新手法であるO-VITON及びそこに至るまでの背景について説明しました。

個人的には、仮想試着の分野は3Dモデリング帰納バイアスをいかに画像生成側に組み込むかが大事になると思っていましたが、必ずしもそうではないかもしれないと今後が楽しみになる論文でした。

また、仮想試着系の論文が出たら読んでみようと思います。