cedro-blog

Few shot gan adaptation で、少数画像でのクロスドメイン学習を可能にする

1.はじめに

 今回ご紹介するのは、学習済みGANモデルを使ったクロスドメイン学習を少数の画像で可能にする Few shot gan adaptation という技術です。

*この論文は、2021.4に提出されました。

2.Few shot gan adaptation とは?

  クロスドメイン学習とは、例えば大量の「実写」を学習したGANモデル(Large scale pre-training)が生成する画像に対応する「絵画」のデータや「赤ちゃん」のデータを別のGANモデルに学習させることです。こうすることによって、様々な「実写」に対応する「絵画」や「赤ちゃん」が生成できるGANモデルができます。

 具体的に、実写→絵画のクロスドメイン学習を考えます。このとき単純に少数の画像だけで学習すると、どんなソース画像(Source Gs)を入力しても学習した画像だけをそのままターゲット画像(Overfit Gs→t)にする過剰適合という問題が発生します。 この問題点を解決し、ソース画像にきちんと対応したターゲット画像(Our Gs→t)にするのが今回の技術です。

 

 下記が、Few shot gan adaptation のフレームワークで、ポイントは2つです。1つ目は、ソースとターゲットのロスを計算するときに、それぞれの基準との距離も考慮することです(識別器はDpatchを使用)。こうすることで、対応するソースとターゲットの整合性が高まります。

 2つ目は、少数の画像以外に、ランダムサンプリングしたソースにガウスノイズを加えたものについても同様な処理を行います(識別器はDimgを使用)。これによって、ソース全体とターゲット全体の潜在空間が同じような構造になります。

 では、コードを動かしてみましょう。

3.コード

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

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

 

 まず、「スケッチ」を学習したモデルで画像を生成してみましょう。ソースは、noise.pt (所定のベクトルを25個まとめたもの)を使います。

 

 それでは、「実写」モデルと「スケッチ」モデルの両方に、同じソースを入力した時の画像を並べて動画にしてみます。ソースは、noise.pt を使って補完(各ベクトル間を等分に割って、少しづつ変化させる)します。

https://cedro3.com/wp-content/uploads/2021/05/output1.mp4

 

 今度は、「アニメ」を学習したモデルで画像を生成してみましょう。ソースは、noise.pt (所定のベクトルを25個まとめたもの)を使います。

 

 それでは、「実写」モデルと「アニメ」モデルの両方に、同じソースを入力した時の画像を並べて動画にしてみます。ソースは、noise.pt を使って補完(各ベクトル間を等分に割って、少しづつ変化させる)します。

https://cedro3.com/wp-content/uploads/2021/05/output2.mp4

 

 この後 Colab には、ソースを random.seed(乱数系列)で指定するバージョンも用意してありますので、試してみて下さい。–rand の後の数字を変化させると色々な乱数系列を試せます。

 では、また。

(オリジナルgithub)https://github.com/utkarshojha/few-shot-gan-adaptation