GANを用いた二次元美少女全身画像生成

Lento
8 min readApr 12, 2019

--

Introduction

ProgressiveGANStyleGAN等、GANの発展により1024✕1024といった高解像度かつ綺麗な画像生成を行えることが可能になってきました。しかし、それらはあくまでも顔画像の生成に留まっており、以下の図のように人間の全身画像といったより複雑な画像に関しては依然として生成は難しいままです。

Koichi Hamada, et al., “ Full-body High-resolution Anime Generation with Progressive Structure-conditional Generative Adversarial Networks”

そこで、今回は二次元美少女の顔画像生成という観点ではなく、全身画像に観点を置いて生成を試みたのでその結果について述べていきます。先に述べておきますが、全身と名づけておきながら実際は腰ぐらいまでの画像生成なので、半身画像生成というのが正しいです。ただ、仮に足までの画像生成を行うにしてもアプローチは同じなのでこのようなタイトルにしました。紛らわしくて申し訳ありません。

Network Architecture

今回参考にしたのはProgressive Structure-conditional GAN(PSGAN)です。この手法では、アバターのキャラクターの高解像度な全身画像生成を行っています。ネットワークの構造としては、Progressive GANのように段階的にステージを踏んでいきながら画像生成を行います。また、全身画像だけを用いた生成では造形として不均衡な画像が生成されるので、構造に着目しKeyPoint画像生成も同時に行い、その生成されたKeyPoint画像を条件として与え全身画像生成を行います。このKeyPointを用いることによって、不均衡な画像が生成されるのを防いでいます。以下にネットワーク構造の詳細を示します。

Koichi Hamada, et al., “ Full-body High-resolution Anime Generation with Progressive Structure-conditional Generative Adversarial Networks”

今回はこのPSGANを参考に、キャラクター画像の全身画像生成を行います。PSGANとの大きな変更としては以下の2点です。

  • ProgressiveGANのような段階的な生成ではなく、Residual Blockを主体として一気通貫に生成を行う。段階的な生成を行ったほうが綺麗に生成可能だとは思うが、ProgressiveGANやStyleGANは今まで一度も実装して学習に成功したことが無かったので、成功例のあるものを用いた。
  • KeyPoint画像の代わりに、下図のようなシルエット画像を用いた。理由として、不均衡にならないためにはシルエットのようにある程度の大きさが分かっていれば十分かと思ったからである。KeyPoint画像が持っている各部位の位置情報は少なくなっているのは承知しているが、生成は可能かと思った。KeyPoint画像の生成よりシルエット画像のほうが作成容易だったというのもある。

Dataset

Getchuから画像をスクレイピングし、学習用データとしては96✕128サイズにしました。そして、それらの画像からシルエット画像を作成しました。シルエット画像の作成方法としては、200枚ほどアノテーションをした後Fully-Convolutional Network(FCN)で学習し、その学習モデルで推論をしました。このようにすることで、34484枚の全身画像とシルエットのペアを作りました。

Experiments

一つの256次元ノイズから96×128サイズのシルエットと全身画像を生成し、それぞれに対してDiscriminatorを適用しました。従って損失関数としてはシルエット、全身画像それぞれにAdversarial loss、それから学習の安定を図るためにGradient penaltyを用いました。また、DiscriminatorにはSpectral Normalizationを導入しています。他の実験条件の詳細は以下に示します。

  • バッチサイズは64
  • Data AugmentationとしてはHorizontal flipを用いた
  • Adversarial lossとGradient penaltyの重みはそれぞれ1と0.5
  • 一回のGeneratorの重み更新に対して、二回のDiscriminatorの重み更新を行っている
  • Adversarial lossの計算にはHinge lossを用いた
  • 最適化手法にはAdam(α=0.0002, β1=0.5)

Results

それでは結果を以下に示します。比較的うまくいったものを示します。

シルエットはきちんと人型のものが出来ており、そのシルエットを元にキャラクターが生成されているのが分かるかと思います。
また、先ほどの画像は、各キャラに異なるノイズを入力として与えましたがシルエット画像生成の入力ノイズは固定にして、全身画像生成の入力ノイズは可変にした場合を以下に示します。

mode collapseを起こしていますが、造形はそのままに色などの情報が変わった画像が生成されていることが確認できます。

また、今回の手法ではシルエットは生成出来ているものの全身画像となった途端に失敗例が多く登場しました。シルエットのおかげか不均衡なものは少なかったのですが、どちらかといえば手や服等がどういう状態なのか分からないという画像が多く散見されました。更なる付属情報として、PSGANと同様のKeyPoint、またMulti-Human Parsingのように部位ごとのSegmentation maskを用いると質は上がりそうです。いずれにせよ、全身画像のような複雑な画像生成には構造のような付属の情報を元に画像生成を行うのが有効だと思われます。Disentanglement系の手法が発達すれば、このような複雑な画像生成に対しても構造分解を行って生成が出来るようになるのでしょうか….

Other Methods

この全身画像生成を試していた時に丁度GauGANの論文が投稿されました。下図のように、Spatially-Adaptive (De)Normalization(SPADE)によって様々なスケールのラベル画像を与えて、ノイズから写真のような画像を生成する手法です。pix2pixHDの発展形です。

Taesung Park, et al., “Semantic Image Synthesis with Spatially-Adaptive Normalization”

この手法を今回の全身画像生成にも当てはめてみようと思い、生成したシルエット情報をSPADEを通して与え、ノイズから全身画像生成出来るのではないかと考え試してみました。しかし以下の結果のように何とも前衛的な画像となってしまいました。そもそもシルエットと対応出来ていない画像も散見されますね。まだ初期検討なので、深部までチューニングを行った訳ではないですが上記実装の方がうまくいっていたのでこちらの手法は諦めました。

Summary

今回はシルエット情報を元にした全身画像生成を行いました。体型をそれっぽく見せればいいんでしょ、というような何とも言えない結果でした….更なる質の向上のためには、シルエットだけではなく各体の部位情報もやはり必要になると思われます。そうなると、体の部位ごとのsegmentation maskの推論ネットワークが必要となり、そのような推論ネットワークをキャラクターのデータで学習させる必要があり、そのためのデータセットを作成する必要があります。最近は、目的の推論をするDeep Learningモデルを学習させるために、別の学習済みDeep Learningが必要になることが当たり前になっていて下準備が大変ですね….

--

--