cedro-blog

GANs N’ Roses で、1つの顔画像から様々なアニメ顔を生成する

1.はじめに

 以前、画像をアニメ化する手法として「White box Cartoonization」や「AnimeGANv2」、そして少数のアニメデータだけで顔画像をアニメ化する手法として「Few shot gan adaptation」をご紹介しました。しかし、これらは1つの顔画像から生成されるのは1種類のアニメ顔だけです。

 今回、ご紹介するのは、1つの顔画像に対して様々なアニメ顔を生成できる GANs N’ Roses という技術です。ちなみに、この名称はアメリカのロックバンド、ガンズ・アンド・ローゼズの名称を捩っていて面白いですね。

2.GANs N’ Roses とは?

 GANs N’ Roses は、同じ顔画像が入力されても様々なアニメ顔を生成するために、画像生成に使用するデータを表情や顔の位置を表す「コンテンツ」アニメの種類を表す「スタイル」に分離して考えます。

 分離するためのロジックは、顔画像をデータ拡張したときに変化するものが「コンテンツ」で変化しないものが「スタイル」です。

 下記は、GANs N’ Roses のフレームワークを示したものです。Gnerator では、入力した顔画像をデータ拡張してバッチを作成し、エンコーダー(左上)でコンテンツ(c)とスタイル(s)をマッピングします。デコーダー(右上)は、コンテンツのみを受け取り様々なスタイルでアニメを生成します。そして生成したアニメをエンコーダ(右下)でコンテンツとスタイルにマッピングし、デコーダー(左下)でコンテンツのみ受けとり入力画像のスタイルで顔画像に戻します。

 Discriminator は、アニメの多様性を確保するために、通常の識別誤差の他にミニバッチの標準偏差も計算しています。

 早速、コードを動かしてみましょう。

3.コード

 コードはGoogle Colabで動かす形にしてGithubに上げてありますので、それに沿って説明して行きます。自分で動かしてみたい方は、この「リンク」をクリックし表示されたノートブックの先頭にある「Colab on Web」ボタンをクリックすると動かせます。

 まず、セットアップを行います。

 

 最初に、画像からアニメを生成してみましょう。下記のコードで画像から顔画像を切り出します。

 2行目で画像を指定していますので、Samplesにあるjpg画像から選んで下さい。自分で用意した画像を使う場合は、画像を PC から Samples フォルダーへドラッグ&ドロップでアップロードしてから、画像を指定すればOKです。

 これは、指定した画像から顔画像を切り出した結果です。

 続いて、顔画像と同じコンテンツでスタイルの異なるアニメを生成します。

 

 今度は、任意の2つのスタイルを補完するアニメを生成してみます。

 

 次にビデオでやってみましょう。ビデオから顔画像をクロップし、それに合わせて色々なスタイルのアニメを生成します。クロップ位置は、最初のフレームで決定するので、顔の位置があまり変化しないビデオを選んで下さい。

 ビデオの指定は、5行目で行っています。自分が用意したビデオを使う場合は、ビデオを PC から Samples フォルダーにドラッグ&ドロップでアップロードして、ビデオの指定を変更して下さい。

 なお、ビデオからアニメを生成するモードは、'normal', 'blend', 'beat', 'eig' と4種類あるので、色々試してみて下さい。ここでは、'beat' を選んでいます。

では、また。

(オリジナルgithub)https://github.com/mchong6/GANsNRoses