cedro-blog

Projected GANで、画像生成の学習効率を高める

1.はじめに

 最近、GANは高品質な画像生成が可能になっていますが、その学習については慎重な正規化、大量の計算、ハイパーパラメータ調整などの課題がまだ残されています。今回ご紹介するのは、これらの課題を軽減するProjected GANという技術です。

*この論文は、NeurIPS 2021で採択されたものです。

2.Projected GANとは?

 ポイントは、学習する画像(Real)と生成器の出力画像(Generated Image)を固定の特徴空間に投影し、チャネルと解像度の両面から特徴を抽出して識別器へ送ることです。

 CCMは、チャネルからの特徴抽出を担当し、4つの畳み込み層の重みをランダムに初期化した構造をしています。CSMは、解像度からの特徴抽出を担当し、CCMを拡張させたU-Netの構造をしています。

 これらのアーキテクチャの採用によって、Projected GANは、StyleGAN 2-ADAと比較して収束が速くFIDが低くなることが、多くのデータセットで検証されているようです。

 さて、実際に学習をさせてみたいところですが、今回は時間の関係で学習済みパラメータを使って画像の生成のみ行ってみたいと思います。学習をしてみたい方は、下記に学習用のcolabがありますので、トライしてみて下さい。

 Projected GAN google colab リンク

3.コード

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

 まず、セットアップを行います。学習済みパラメータは8種類提供されていますが、ここではその内3種類(art_painting.pkl, church.pkl, pokemon.pkl)のみをダウンロードしています。3種類以外のパラメータをダウンロードしたい場合は、該当するコメントアウト(#)を外して下さい。

 

 まず、gen_images.pyでサンプル画像を生成してみましょう。引数は、–outdirで出力フォルダ、–truncで変化度合い(数字が大きいほど変化が大きい)、–seedsで乱数の指定(=出力個数)、–networkで学習済みパラメータの指定です。

 

 今度は、gen_video.pyで補完動画を作成してみましょう。引数は、–outdirで出力ファイル名、–truncで変化度合い(数字が大きいほど変化が大きい)、–seedsで乱数の指定(=ベクトル個数)、–gridで出力形状、–networkで学習済みパラメータの指定です。

https://cedro3.com/wp-content/uploads/2022/02/pokemon-1.mp4

 

 別のパラメータも試してみましょう。補完動画の作成で、–network=church.pklに変更すると、

https://cedro3.com/wp-content/uploads/2022/02/church-1.mp4

 

 もう1つ。補完動画の作成で、–network=art_painting.pklに変更すると、

https://cedro3.com/wp-content/uploads/2022/02/art_painting-1.mp4

 では、また。

(オリジナルgithub)https://github.com/autonomousvision/projected_gan