CCCMKホールディングス TECH LABの Tech Blog

TECH LABのエンジニアが技術情報を発信しています

ブログタイトル

Virtual Try-Onを実現する"TryOnDiffusion"について調べてみました。

こんにちは、CCCMKホールディングス三浦です。

前回、二つの画像を融合する技術について調べたことをまとめたのですが、今回はまた違う方向の"画像の融合"技術について取り上げてみたいと思います。

バーチャル試着を実現する技術"Virtual Try-On"

人物画像と服の画像を入力すると、その人物がその服を自然な様子で着ている画像を出力する。これが実現できると、スマートフォンやパソコン上で様々な服の試着が可能になります。けっこう見聞きする技術だったのですが、最近こういった技術が"Virtual Try-On"と呼ばれていることを知りました。

いくつかVirtual Try-Onの論文を見ていると、"画像融合"というよりも"人物と服の画像を条件にした条件付き画像生成"に近いのだと思いました。服の画像は、服の画像のみ指定する場合もあれば、別の人物がその服を着ている画像を指定するケースもあります。

TryOnDiffusion: A Tale of Two UNets

Virtual Try-Onに関する論文の中で、最近読んで特に勉強になったのが"TryOnDiffusion: A Tale of Two UNets"という論文です。

Title: TryOnDiffusion: A Tale of Two UNets
Author: Luyang Zhu, Dawei Yang, Tyler Zhu, Fitsum Reda, William Chan, Chitwan Saharia, Mohammad Norouzi, Ira Kemelmacher-Shlizerman
Submit: 14 Jun 2023
arXiv: https://arxiv.org/abs/2306.08276

タイトルにあるように、2種類のUNetというモジュールを利用したアプローチです。UNetは画像生成で使われることが多い"Diffusion Model"に使われるモジュールで、TryOnDiffusionではこのUNetを二つ使った"Parallel-UNet"というアーキテクチャを持つことが特徴的です。2つのUNetは、具体的には人物画像を処理するUNetと服画像を処理するUNetを指しています。服画像のUNetを流れる潜在的な特徴量をCross-Attentionを用いて人物画像UNetに入力することで、人物画像の服の生成に影響を与えられる点がParallel-UNetの特徴です。

Cross-Attentionによる作用、というのがTryOnDiffusionの重要な点です。たとえば人物と服の画像が与えられた時、一番単純なアイデアとして人物画像に合うように服の画像を変形して人物画像に重ね合わせる、といった方法が考えられますが、服は人物の体形や姿勢によって形状が変わってしまいますし、素材やロゴなどの服の上のイラストや模様の影響もあります。

TryOnDiffusionの論文のFigure 3には従来のVirtual Try-OnとTryOnDiffusionとの生成画像の比較結果が掲載されています。この図は4つの人物画像・服画像のペアに対する各手法の生成結果を表示したもので、一番右がTryOnDiffusionによる結果です。これを見ると、Virtual Try-Onにおける課題が、いくつか見えてきます。

TryOnDiffusion: A Tale of Two UNets, Figure 3

たとえば、

  • 対象の人物の肌色や体形が変わってしまう
  • 服の素材感や模様の情報が失われている
  • 対象の人物と服の画像の向きの違いが考慮されていない

といった点です。特にVirtual Try-Onが単純な画像の貼り合わせでは上手くいかないことが、上から2段目の"MISSION"というロゴが歪んでしまっている生成結果から見て取れると思います。

TryOnDiffusionのアーキテクチャ

TryOnDiffusionはその名前の通りDiffusion Modelを利用して画像生成を行います。Diffusion Modelはノイズがかかった画像と経過時間をベースに画像にのったノイズを推計、画像からノイズの除去を行います。この仮定を繰り返すことでノイズのないクリアな画像を生成することが出来ます。

Diffusion Modelで使われるネットワークアーキテクチャが"UNet"です。UNetは入力画像のサイズを落としていくDownSamplingと出力を入力と合わせるようにサイズをあげていくUpSamplingブロックで大きく構成されています。同サイズのDownSamplingブロックとUpSamplingブロックは、DownSamplingブロックからの出力をUpSamplingブロックの入力に結合する形で連結します。各ブロックにはAttention層を組み込むことが出来、Cross-Attentionによって別のモジュールで生成された潜在的な情報を組み込むことが出来るようになっています。

以上を踏まえたうえで、TryOnDiffusionのアーキテクチャを見てみます。以下の論文に掲載されている図が全体図となっています。

TryOnDiffusion: A Tale of Two UNets, Figure 2

TryOnDiffusionは大きく3つのモジュールで構成されています。1つが指定の服を着用した人物画像を生成する"128×128 Parallel-UNet",そこから出力された画像を高解像度化する"256×256 Parallel-UNet"と"256×256→1024×1024 SR diffusion model"です。

入力前の事前処理

TryOnDiffusionに入力する画像は人物画像と、その人物に着せたい服を着た別の人物画像(衣服画像)です。ネットワークに入力する前に、それらの画像から次の4つの情報を抽出しています。それぞれそのままネットワークに入力するのではなく、それぞれに設定された強度のノイズを付与します。

clothing-agnostic RGB image

対象の人物画像から、衣服の部分を取り除いてその人物の腕、手、頭部などの部分のみをセグメンテーション用のモデルで抽出した画像です。元の人物の情報を忠実に再現するために必要となる情報と考えることが出来ます。

Person Pose, Garment Pose

人物画像と衣服画像から、姿勢推定モデルによって抽出される人体の間接部分(キーポイント)の情報です。人物画像と衣服画像でキーポイントの位置が大きく異なる場合があるため、それらを整えるための情報と捉えられます。

各キーポイントのXY座標で構成される情報ですが、線形層を通して高次元化された後にネットワークに入力されます。

Segmented garment

衣服画像から、セグメンテーションモデルによって衣服部分だけを抽出した画像です。

128×128 Parallel-UNet

このモジュールでは、対象の人物に指定した衣服を着せた128x128サイズの画像を生成する役割を持っています。Parallel-UNetの名前の通り、二つのUNetで構成されています。一つが人物画像を扱う"person-UNet"、もう一つが衣服画像を扱う"garment-UNet"です。person-UNetには画像情報としてノイズ画像とclothing-agnostic RGB imageをチャンネル方向に結合した状態で入力されます。一方garmet-UNetはSegmented garmentが入力されます。

それぞれのネットワークのDownSampling, UpSamplingブロックでは、前のブロックから出力された画像の埋め込み表現に対してPerson Pose, Garment Poseを用いた変換処理が行われます。この変換処理は"FiLM: Visual Reasoning with a General Conditioning Layer"という論文で提案されている"Feature-wise Linear Modulation"というもので、人物や衣服のキーポイントの情報を画像情報の処理に含めることが出来ます。

person-UNetはさらに一部のブロックにAttention構造を持っています。Self-AttentionではPerson Poseと Garment Poseが結合され、Cross-Attentionではgarmet-UNetの特徴量をキー・バリューとして使用します。このようにして人物画像生成処理に衣服の画像の情報を組み込み、指定した衣服を着用した人物画像を生成することが出来るようになっています。

256×256 Parallel-UNet

128×128 Parallel-UNetで生成された画像を256x256に高解像度化する役割を持ちます。構造は128x128 Parallel-UNetと同様で、入力として128x128 Parallel-UNetのものに加え、128x128 Parallel-UNetから出力された画像が入力されます。

256×256→1024×1024 SR diffusion model

256x256 Parallel-UNetで生成された画像を1024x1024に高解像度化する役割を持ちます。このネットワークは"Photorealistic Text-to-Image Diffusion Models with Deep Language Understanding"という論文で提案された、高解像度な画像を生成する"Imagen"というモデルの一部が使われています。Imagenでは小さいサイズの画像で画像生成処理を行った後に高解像度化するモジュールによって高解像度な画像生成を実現しているのですが、この高解像度化のモジュールを利用しているようです。

まとめと感想

今回はVirtual Try-Onを実現する、TryOnDiffusionというアプローチについて論文を読んでまとめてみました。Diffusion Modelによる画像生成は実はあまり使ったことがなかったのですが、こういう論文を読んでいるととても面白そうだな、と感じました。特にAttention構造を通じて画像生成プロセスに影響を与えられる点はとてもワクワクする話です。たとえばテキストや音楽などの画像とは異なるフォーマットのデータも、特徴量化出来れば画像生成プロセスになんらかの影響を与えることが出来るんじゃないか、と考えられます。

色々とやりたいことが浮かんでくるものの、まだDiffusion Modelについての理解が浅いので、これから色々と調べて理解を深めていきたいと思います。まずは自分でモデルを組んでみるのがいいのかも、と思いました。