画像ベースの仮想試着の実用化に向けた課題とアプローチ

OGP

こんにちは。ZOZO研究所の後藤です。普段はZOZOTOWNの推薦システムの開発や社内で利用するための機械学習システムの開発に携わっています。

本記事では、近年目覚ましい進展を見せている画像ベースの仮想試着の研究を紹介し、実用化を考える際に解決すべき課題とアプローチの考察も併せて紹介します。

目次

はじめに

コロナ禍の状況も相まってECでの買い物需要が高まっています。普段使いしている消耗品であれば気軽に購入できますが、ZOZOTOWNで扱うようなファッション商材に関しては、実際に店舗で試着をして着用イメージを確認してから購入する方も多いでしょう。

しかし、気になった商品の着用イメージを仮想的にでも確認できれば、実際に店舗で試着をしてから購入している方々に対し、オンラインでの購入の後押しになるのかもしれません。

VITON-HD examples (引用:VITON-HD)

例えば、上の画像はVITON-HD1という仮想試着システムの出力例です。1番左の参照画像(白いTシャツの人物の画像)に対して、右側4枚の画像は、各画像の左下に掲載している商品画像を実際に着ているかのように当てはめています。元の画像では二の腕部分や胸元までTシャツで隠れていますが、右側の画像ではシステムによってその部分が補完されています。

オンライン上の衣服画像と自分自身の写真をこのように合成できたら、具体的な着用イメージが湧き、購入の意思決定の後押しになるでしょう。

このような着せ替え技術を売りにしているAIスタートアップも続々と登場しており、最近ではウォルマートがZeekitを買収したことがニュースになりました2

歴史的には3Dの身体モデルに服を着せる仮想試着の方が先行しています。しかし、本記事では比較的低コストで手に入れられる画像データを使った仮想試着の技術に注目します。そして、実用化を検討する際に直面する課題を列挙し、近年登場したアプローチとの対応関係をまとめます。この記事を通して、仮想試着の技術に興味を持っていただければ幸いです。

画像ベースの仮想試着の課題

本章では、GANを使った先駆的な研究を紹介し、実用化にむけて解決しておくべき課題を挙げます。

任意の商品画像を仮想的に着用する技術の先駆的な例はJetchevらによるConditional Analogy GAN(CAGAN)3です。彼らはヨーロッパにECサイトを展開しているZalandoの研究部門、Zalando Researchの研究者で、ファッションECの課題を研究しています。

CAGAN model (引用:Conditional Analogy GAN)

この研究では、上図の左側に掲載しているようなEncoder-Decoder型のGeneratorを、GANのアーキテクチャで学習させます。

Generatorへの入力として、3種類の画像を使います。商品 i(赤色のパーカー)を着用した人物画像 x_i と商品画像 y_i のペア、着せたい商品 j(青色のTシャツ)に関する商品画像 y_j の3種類です。これらの画像を受け取って、Generatorは顔やポーズなどの人物の個性を保存したまま商品 j に着せ替えた画像 x_i^j を生成します。数式だと、\hat {x}_i^j = G(x_i, y_i, y_j) と表現できます。

Discriminatorは人物画像と商品画像のペアを受け取り、正しいペア (x_i, y_i) をReal、(x_i^j, y_j)(x_i, y_j) のように作られたペアをFakeとして学習させます。

これらを正しく見分けられるように学習しながら、GeneratorがよりRealに近いデータを生成できるようフィードバックを与えます。

CAGAN cycle (引用:Conditional Analogy GAN)

Generatorの学習には、GAN Lossによるリアルな画像の生成だけでなく、ピクセルレベルで正確に着せ替えを実行させる方針が必要です。

ここで問題になるのが、教師データです。x_i と同じ人物・ポーズの商品 j の着用画像を大量に用意することは難しいため、Generatorの出力に対してピクセルレベルの教師データを与えることはできません。その点を著者らは、Cycle GANのアイデアを取り入れ、上手く解決しています。商品 j に着せ替えた画像を再度Generatorに入力し、商品 i に着せ替え直した画像 \hat {x_i} を生成させます。x_i\hat {x_i} をピクセルレベルで比較しGeneratorに誤差を返しています。

この研究の実験結果の一部を示します。

CAGAN result1 (引用:Conditional Analogy GAN)

上図では、ある人物画像に様々なタイプの商品を着せています。商品の色や形など大まかな特徴は転写できており、大まかな雰囲気を知りたい程度であれば、これで十分かもしれません。しかし、より細かく見ていくと、商品のテクスチャやロゴが崩れている例や、ネック部分が保持されていない例があります。

CAGAN result1 (引用:Conditional Analogy GAN)

上図では、同じ商品を様々な人物に着せています。人物のサイズやポーズの違いにはきちんと対応できているようです。しかし、顔が崩れたりボトムスやバッグの色が変わったりと、注目している部分と関係のない部分が保持できないという問題があります。

この研究が登場した2017年当時、このような条件付き生成モデルによる服の着せ替えは衝撃的で、我々も再現実装を行いました。しかし、現実的なシチュエーションに対応するためには、いくつかのギャップを乗り越えなければならいことがわかりました。そこで得られた課題を紹介します。

モデルアーキテクチャの課題

CAGANでは、学習時と推論時のどちらにも人物画像に対応する商品画像が必要になります。人物画像と商品画像のペアのデータの収集はアノテーションのコストがかかります。そして、自分自身の写真に任意の商品を着せたい場合、自身が着ている衣服の商品画像を別途用意する手間がかかります。

また、この研究の実験はトップスカテゴリに限定されています。実際にはボトムスやアウター、シューズの着せ替えも試してみたいでしょう。着せ替え領域の指定はモデル内で暗黙的に行われるため、モデルは商品カテゴリ毎に用意したほうが良いでしょう。複数の商品を同時に着用したい場合は、商品の数だけ推論する必要があります。

性能の課題

出力結果を観察すると、顔やポーズが崩れているという個性の保持の問題と、縞模様が崩れていたりロゴやフォントが潰れるといった転写の性能の問題があることがわかります。

論文に示されていない例として、以下のパターンが考えられます。

  • 肌の露出が大きく変わる場合(長袖からノースリーブへの着せ替えなど)
  • シルエットが大きく変わる場合(パンツからスカートへの着せ替えなど)

肌の描写やシルエットの変更はGeneratorの負担を増やすことになるため、上手くいかない可能性があります。

商品にはサイズのバリエーションがあり、どのサイズを選ぶかによって見た目は変化します。生成結果は、一見それらしい着せ替えを実現していますが、サイズバリエーションは反映されていません。生成結果は、実際の商品サイズを反映したものであるべきです。

データセットの課題

学習に使われるデータのほとんどはファッションモデルが商品を着用しているものです。細身で頭身の高い傾向の人物しか含まれていません。実際に推論したいデータには、さらに多様な体型の人物が含まれているはずです。

また、モノトーンの背景・商品が映えるような環境光やポーズといった、商品のカタログ的なシチュエーションが設定されています。推論時には屋外で撮られた、背景・環境光・ポーズがより複雑なデータを扱うことになります。

このように、実用の際には学習時と推論時で入力データの質の違いが問題になり得ます。

CAGANの登場以降、これらの課題を解決するための様々なアプローチが提案されました。次章では、そのような研究の概要をいくつか紹介します。

課題へのアプローチ

本章の内容は専門性が上がるため、まずはじめに各研究の特徴を表にまとめておきます。

matrix ※表を拡大表示

全体的に人物・商品のペア画像が不要となる代わりに、Human Parsingやポーズ推定の前処理が必要になってきている傾向があります。

前述のモデルアーキテクチャと性能面の課題に関して、レイアウトの生成と見た目の生成という二段構えのアプローチを取ることで大きな改善が見られています。しかし、商品サイズの違いを反映するモデルはまだ見たことがありません。

ここで挙げた手法以外にも多くの研究があるので、興味を持っていただけた方は、参考文献の引用から関連する研究を調査すると良いでしょう。

VITON

VITON abst (引用:VITON)

VITON4はファッション関連の面白いタスクをたびたび提案するXintong Hanらによる研究です。VITONは着せ替えのプロセスを、衣服領域のマスクの生成と、衣服領域に合うように歪ませた商品画像のテクスチャの貼り付けの二段階に分けて行います。CAGANの課題だった、推論時に人物画像 x_i とその人物が着ている商品画像 y_i のペアが必要であった点や、個性の保持・テクスチャの転写の性能を改善しています。

VITON input (引用:VITON)

1段目のEncoder-Decoder Generatorは、入力データとして人物画像そのものではなく、ポーズ・身体形状・顔と髪の領域の組み合わせという、衣服の情報を削ぎ落としたものを使います。これに商品画像を加え、元の人物画像を復元するという戦略で学習させます。CAGANでは、人物画像 x_i のどの部分が衣服領域であるかを商品画像 y_i との関係から推測する必要がありました。一方、VITONでは前処理の段階で、確実に人物画像から衣服の情報を取り除いているため、これを商品画像で条件付けることにより、元の人物画像を復元するだけで着せ替えが実現します。この工夫により、ピクセルレベルの教師あり学習をさせることが可能なため、Cycle GANの構造が不要になります。

1段目の出力は、復元された人物画像と衣服領域のマスクです。衣服領域のマスクは、商品画像をどのように歪めたら人物画像にフィットするのかの情報を持っています。この情報を使い、Thin Plate Spline Transformationで商品画像を人物に合わせて歪めたものを生成します。

2段目のRefinement Networkは、1段目で得られた人物画像と衣服領域に合わせて歪めた商品画像を入力とし、衣服領域のテクスチャの合成を行います。テクスチャをGeneratorで生成するのではなく、元の商品のテクスチャを貼り付けるというイメージなので、商品のテクスチャが綺麗に反映されやすくなっています。

M2E-TON

M2E-TON abst (引用:M2E-TON)

Model2Everyone Try-On Network(M2E-TON)5は、商品画像を使わず、人物が着用している商品を任意の人物に転写するアーキテクチャを提案しています。CAGANやVITONは人物と商品のペアが必要でしたが、人物画像だけを使うという点で学習データの収集コストを大幅に減らしています。このアーキテクチャは、人物から人物への着せ替えの工程を以下の3つのEncoder-Decoder型のGeneratorで実現します。

  • Pose Alignment Network (PAN)
  • Texture Refinement Network (TRN)
  • Fitting Network (FTN)

また、補助情報として、3Dの人体表面を推定するDense Poseモデルの推論結果を追加します。上図では、緑色の矢印で示されています。モデル人物画像のDense Poseとターゲット人物画像のDense Poseの人体表面を対応付けて歪ませると、ひび割れたようなテクスチャ M_w^{\prime} が得られます。PANはモデル人物画像とひび割れたテクスチャを使ってモデル人物画像のポーズをターゲット人物のポーズに合わせるGeneratorです。この出力 M_A はぼんやりとしており、テクスチャの詳細部分が失われているため、元のひび割れたテクスチャ M_w^{\prime} と合成することで細部の表現を取り戻します。しかし、ひび割れ部分のエッジ部分が目立つのでTRNで綺麗に修復します。端的に言えば、二度のEncoder-Decoderでモデルのポーズを無理やりターゲットのポーズに変形して画像のあらを修復したのです。

M2E-TON learning-strategy (引用:M2E-TON)

上述のPAN・TRN・FTNの学習は、CAGANと同様の理由によりピクセルレベルの教師データを与えるのが困難です。M2E-TONはこの課題をUnpaired Training(上図左)とPaired Training(上図右)の2つの学習戦略を合わせることで対応します。

Unpaired Trainingは、服装やポーズに対応関係のないモデルとターゲットの情報を入力し、ポーズで条件付けたGANの損失関数を使って学習を進めます。しかし、この学習戦略で評価されるのは、出力と入力のポーズの一致具合と出力が本物の画像に近いかどうかだけです。衣服部分のテクスチャが正確に反映されているかどうかを評価する方針を別に与える必要があります。その対策としてPaired Trainingを行います。Paired Trainingは、ECサイトで手に入りやすい同じ人物が同じ服を着て異なるポーズを取っている画像ペアを使います。GANの損失関数に加えて入力 P と出力 P’ のピクセルレベルの誤差を損失関数として導入します。

M2E-TON example (引用:M2E-TON)

Paired Trainingを行うことにより、Generatorにポーズの違いだけでなくテクスチャの細部にまで転写できるような学習方針を取らせることができます。上図の4番目の画像と6番目の画像はPaired Trainingの有無の差を表しています。

ボトムスの着せ替えは論文中に一例のみだったので、上手くいかなかった可能性があります。アーキテクチャ的にはマルチカテゴリに対応できそうですが、解決できなかった課題が残っている可能性があります。

FiNet

FiNet abst (引用:FiNet)

FiNet6はVITONと同じ著者の研究です。人物に指定の商品を着せるタスクではなく、着せ替えたい領域を欠損させて、欠損を修復することで様々な着用イメージを生成するというタスクを提案しています。さらに、適当な衣服を埋めて修復するのではなく、欠損させた部分以外の文脈をきちんと反映させた上で修復するため、ファッションとして調和した生成結果が得られるように工夫されています。

FiNetはShape GenerationとAppearance Generationの2段階で、画像を修復します。

FiNet SG (引用:FiNet)

Shape Generationは元の人物の顔領域とポーズ、欠損させたレイアウト、欠損させた部分をどのように補うかを示すShape Codeを入力とし、元のレイアウトを復元します。学習時はShape Codeとして元の衣服領域(Input Shape)を符号化したものを使います。そして、推論時は欠損させた部分以外の衣服画像(Contextual Garments)を符号化してGeneratorに与えます。学習時と推論時で利用する情報が異なる点は、両者が同じ分布から生成されるようにEncoderを学習することで対応しています。

FiNet AG (引用:FiNet)

Appearance Generationも、Shape Generationと同じアーキテクチャで元の人物画像を復元します。

FiNet results1 (引用:FiNet)

上図は実際の推論結果を示しています。レイアウトの生成と外見の生成をトップス(左)、ボトムス(右)に関して行っています。Shape CodeとAppearance Codeをサンプリングすることで、全体として調和した外見を数多く生成することに成功しています。

ここまでに紹介した研究は、明示的には複数カテゴリへの対応はしていませんでした。一方、FiNetはトップスやボトムスだけでなく、シューズやハットまで対応できており、汎用性の高さが伺えます。

FiNetは変更を加えたい部分をマスクして、その領域を埋めることで様々な外見を生成できる手法です。さらに、マスクした部分以外の文脈情報を考慮して全体として調和した結果を生成するため、その保証はないですが、ファッションセンスの高いものになっているというファッションらしいタスクを解いています。ただし、このタスクは指定の衣服を着せるというこれまでに紹介したタスクと異なります。

FiNet results2 (引用:FiNet)

著者らは、メインのタスクではないとしながらも、上図のように任意の衣服が着せられるかを実験しています。上図にはReference、Input、Transferの3種類の画像が掲載されています。Referenceの人物が着用している衣服をInputの人物に着せた結果がTransferです。ReferenceからShape CodeとAppearance Codeを生成し、欠損させた画像(Input)と合わせて渡すことで、任意の衣服を着せることが可能であり、しかも上手くいくようです。このようにFiNetは任意の衣服を着せるタスクにも利用でき汎用性を持っています。

O-VITON

O-VITON abst (引用:O-VITON)

O-VITON7はAmazon Lab126の著者らがCVPR2020で発表した研究です。FiNetと同様に、Shape Generation(上図の緑色部分)とAppearance Generation(上図の青色部分)を順に実施して着せ替えを実現します。

他のモデルと大きく異なる点は、複数のカテゴリの商品を同時に着せることができるところです。入力データは人物が着用している画像を領域分割したものです。そして、入力として使う人物画像の各衣服領域の特徴マップを、着せたい衣服の特徴マップと差し替えてレイアウト生成モジュールや外見生成モジュールに入力します。どちらのモジュールも学習時は着せ替え自体を行わず、特徴マップから元の画像を復元することにフォーカスしています。なお、複数の商品を着せる能力自体は汎化性能によるものです。

また、損失関数として、Shape Generatorはレイアウトのピクセルレベルの誤差とレイアウトのShape Feature Mapで条件付けたGAN Lossを用います。Appearance Generatorはレイアウトで条件付けたGAN Lossと、生成物と元データのFeature Matchingを用います。

O-VITON online-optimization (引用:O-VITON)

FiNetではShape GenerationとAppearance Generationの2つで終わりでした。しかし、O-VITONはさらに見た目を改善するために、推論時にAppearance Generatorに個別のファインチューニング(Online Optimization)をかけます。

この段階では、リファレンス画像のレイアウトと、衣服を着せたい人物のレイアウト(クエリ)を入力します。リファレンス画像の復元結果はFeature Matchingを、クエリへの着せ替え結果はDiscriminatorの損失を評価して学習します。リファレンス画像の衣服がクエリレイアウトにきちんと転写されるまで最適化をかけます。

O-VITON result (引用:O-VITON)

Online Optimizationを取り入れた場合(一番右の列)、単に二段階の過程で生成した場合(右から2番めの列)に比べて、元の商品のテクスチャが正確に反映できています。

O-VITON result2 (引用:O-VITON)

O-VITONは学習時には複数の商品を着せての評価はしていません。しかし、クエリ画像の各カテゴリの特徴マップをReference Garmentsの特徴マップに差し替えることで、複数のカテゴリの商品をクエリの人物に対して着せることができています。本来解いているタスクではないのに、このようなことができるということは、モデルの汎化性能が高いということを示しています。

まとめ

matrix ※表を拡大表示

モデルアーキテクチャの課題

CAGANは学習時と推論時の両方で、人物画像に対応する商品画像が必要でした。一方で、CAGAN以降の研究では、Human Parsingやポーズの推論結果を利用することで制約が緩和されています。また、M2E-TON・FiNet・O-VITONのように人物画像のみで学習・推論が可能なモデルも登場しています。

また、FiNetやO-VITONはレイアウトを明示的に扱うことにより、単一のモデルで複数のカテゴリの着せ替えに対応可能となり、高い柔軟性を示しています。

性能の課題

着せ替えの出力をGeneratorに任せると顔やポーズ、テクスチャが崩れるといった問題がありました。その点に関しては、VITONのように事前に切り出しておき、それを後続のタスクに渡して微修正する方法が有効な場面が多いでしょう。Generatorに任せる場合は、O-VITONのように推論のたびにチューニングし直し、レアなパターンやロゴを正確に転写させる方法が良さそうです。他の手法の仕上げ段階でも取り入れられる汎用的なアイデアです。

肌の露出やシルエットの変化は、FiNetやO-VITONのようにレイアウトを編集するモジュールを取り入れることで対応できそうです。

しかし、実際の商品サイズを考慮する点に関しては、サイズ情報を扱う方法は模索されていません。今後の課題になるでしょう。

データセットの課題

推論時の多様なシチュエーションへの対応は、多くの研究で検証できていません。今回紹介した論文では唯一、VITONが屋外の複雑な環境の写真に対しての推論結果を掲載しています。

VITON wilder-examples (引用:VITON)

対象のポーズと商品がシンプルな左の2つの画像は、若干服が浮いて見えますが貼り付け自体は上手くできているように感じます。しかし、中央の画像は肌の露出が増えており、腕の形や色の生成に不自然さが残ります。そして、右の画像では、テクスチャの転写に失敗しています。

下記のブログでは、着せ替えモデルを以下の4パターンでテストしています。

www.kdnuggets.com

  1. Replication of the authors’ results on the original data and our preprocessing models (Simple).
  2. Application of custom clothes to default images of a person (Medium).
  3. Application of default clothes to custom images of a person (Difficult).
  4. Application of custom clothes to custom images of a person (Very difficult).

上述のVITONの例は綺麗な商品画像とカスタムの写真を使っているので 3. のDifficultに相当します。このブログでは、カスタムの商品画像としてCGや絵を渡してみたりと、チャレンジングな状況でのテストも実施しています。自前で用意したデータに対する実用性を測る上で、重要なテスト項目です。

最後に

ZOZO研究所では、機械学習の社会実装を推し進めることのできるMLエンジニアを募集しています。今回紹介したVirtual Try-Onのタスク以外にも、検索、推薦、画像認識の技術など幅広い分野で研究や開発を進めていけるメンバーを募集しています。

ご興味のある方は、以下のリンクからぜひご応募ください。

hrmos.co

hrmos.co

hrmos.co

参考


  1. Choi, Seunghwan, et al. “VITON-HD: High-Resolution Virtual Try-On via Misalignment-Aware Normalization.” arXiv preprint arXiv:2103.16874. 2021.

  2. Sarah Perez,「ウォルマートがAIやコンピュータービジョンを駆使したバーチャル試着のZeekitを買収」,TechCrunch. 閲覧日:2021年6月9日.

  3. Jetchev, Nikolay, and Urs Bergmann. “The conditional analogy gan: Swapping fashion articles on people images.” Proceedings of the IEEE International Conference on Computer Vision Workshops. 2017.

  4. Han, Xintong, et al. “Viton: An image-based virtual try-on network.” Proceedings of the IEEE conference on computer vision and pattern recognition. 2018.

  5. Wu, Zhonghua, et al. “M2e-try on net: Fashion from model to everyone.” Proceedings of the 27th ACM International Conference on Multimedia. 2019.

  6. Han, Xintong, et al. “Compatible and diverse fashion image inpainting.” arXiv preprint arXiv:1902.01096. 2019.

  7. Neuberger, Assaf, et al. “Image based virtual try-on network from unpaired data.” Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2020.

カテゴリー