[論文メモ] InsetGAN for Full-Body Image Generation
arxiv.org
afruehstueck.github.io
CVPR2022
Adobe Research
GANで全身生成を可能にした。
一つのGANで全身レベルの多様性のあるドメインを学習するのは難しい。全身生成と顔生成の学習済みGANを使ってそれぞれを生成しシームレスに結合する。
手法
Full-Body GAN
大雑把に全身を生成するのが目的。数万の全身サンプルを使ってStyleGAN2を学習。解像度は1024x1024。
全身は服装や各パーツ(手や足)の位置等がバラバラで精密に生成するのが難しくどうしてもアーティファクトが出てしまう(図1(a))。
それでも、肌の色の一貫性や、アクセサリもそれっぽく全身が生成出来るレベルは学習できた(図3)。よく見るとおかしいだろうがそれは後々改善する。
Multi-GAN Optimization
顔生成モデルが生成した結果をFull-Body GANによって生成された全身画像に貼り付ける形できれいな全身画像を生成していく。
このときの一番の問題は条件なしで生成した顔画像を貼り付けたときに一貫性があるようにしなければならないこと。
Full-Body GANをとし、生成した全身画像をとする。
顔画像を生成するGeneratorをとし、生成した顔画像をとする。
この顔画像を全身画像に貼り付けるためにBounding Box(BBox)を検出する必要がある。
全身画像から検出したBBoxでクロップしたピクセルをとする。
これを貼り付けるわけだが、これはクロップしたところにを貼り付けたときに連続的になるようなのペアを見つけることに相当する。
最終的な出力を得るためにの領域をで直接置き換え以下の最適化を行う。
、は境界の滑らかさととが似ているかを測る指標。
Optimization Objectives
との片方、または両方を最適化する必要がありそのときに満たしてほしい点が3つ。
(1) 顔画像と全身画像の顔は粗く似ていてる必要がある(肌の色とか)
(2) コピーアンドペーストするので境界は継ぎ目ができないように
(3) 見た目がリアルであること
(1)についてはダウンサンプリングした結果に対して lossとperceptual loss()をとる。これにより粗く似ているようにできる。
、では64x64へのダウンサンプリング。
(2)については(1)と同様の lossとperceptual loss を境界部分についてとる。
は領域との境界部分の周りピクセルの領域。
(3)については下記式の正則化で担保する。
第一項目はlatent codeが学習に使ったlatent codeの平均からあまり離れないようにするもの。
第二項目も同じようなもので、StyleGAN2のを使った既存のImage manipulationでは一つのを使うのではなく、各ブロックに注入するを分けてとして個のを最適化するが、それに倣ってここでも次元のに分割する。
をベース、各ブロックへ注入するときのオフセットとする。なのでブロックに注入するときはになる。
Face Refinement versus Face Swap
Full-Body GANの生成した画像の顔部分をより精細化するために生成した全身画像に対して、顔専用のGANで生成した顔画像を違和感なく貼り付ける。
このとき、元の全身画像の顔を保ちつつ、かつ境界部分が違和感ないようにしたい。
以下の式を最適化することでほぼ満足出来る結果が得られるがそれでも境界部分が不連続になることがある。
そこで対象領域以外の状態を保ったままを最適化する。
は元の生成画像、は対象領域以外。つまり顔以外の部分は元の画像をなるべく保ちつつ多少の変更を許容する感じ。
最終的な目的関数は以下。
図1(b)と図5が結果。Full-Body GANの生成した顔より自然に見える。
Body Generation for an Existing Face
今までは全身生成してからの精細化だったが、顔画像からの全身生成もやりたい。
BBoxからはみ出るような複雑な髪型の場合など、境界部分の調整のためわずかな顔画像の変化も許容する。
なるべく顔を保存するために以下のface reconstruction lossを追加。
は
目的関数は以下。
先程は全身を保存しつつ顔を最適化だったが、今度は逆に顔を保存しつつ全身を最適化という感じ。
結果が図6で、顔のアイデンティティは保ちつつ3つの体を生成した。
Face Body Montage
既存のGAN Inversion手法でリアル画像を潜在空間に埋め込むことができ、これを使うことで顔、全身それぞれをの潜在空間埋め込み操作出来る。
ただ、全身は多様なのできれいに再現するのは難しい。そこで先程の目的関数2つをあわせたような以下の目的関数を利用する。
図7が顔と全身を組み合わせた結果。肌の色を揃えるようなlossは無いが、顔と体で同じ色になるように変化している。
また、との両方を最適化したことで図1(d)のように髪の毛の境界部分が切れにつながるように肩の部分に髪が生成されている。
のみの最適化した場合ととの両方を最適化した場合の比較を図2右に示す。
Optimization Details
僅かだがよりのほうが良い結果だった。
ダウンサンプリングしたや に対してlossをとることで柔軟かつアーティファクトに適合するリスクを減らした。
また、との最適化はに依存した境界部分を利用している。
これに対処するためにとを交互に最適化しの最適化毎にを再計算する。
データセット・実装
1,024x1,024の全身画像を83,972枚で、これらは他から購入した100,718枚の画像から作成した。
しかも手作業で付けたセグメンテーションマスク付き。すごい...。
そして既存のポーズ検出で外れ値的なポーズの画像を取り除いた。
FFHQの学習等でもわかるようにアライメントは重要なのでポーズアライメントも調整。
Generatorの生成能力を背景に割きたくないのでreflection paddingして27x27のガウシアンフィルターで背景をぼかす。
セグメンテーションマスクがあるので背景を削除しても良かったのだがそうしなかったのは
1) セグメンテーションが完全ではない(特に背景との境界部分)
2) 現在のGANは一様な色の広い領域生成が得意ではなかった(実験的に)
なおDeepFashionデータセットでも実験した。こちらはクリーニング後10,145枚で1024x768、背景は始めから一様に塗りつぶされている。
学習はStyleGAN2-ADAアーキテクチャでaugmentationはすべて採用。
自作データセットは4 Titan V GPUで28日と18時間。バッチサイズは4。
DeepFashionは4 V100 GPUで9日でバッチサイズは8。
実験結果は今までの図を参照。
CoModGANとの比較。