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で学習済みパラメータの指定です。

 

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

 

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

 では、また。

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

2 件のコメント

  • こんにちは。いつも大変有用な記事をありがとうございます。
    さて、公開されているcolabを早速実行してみたのですが、

    # サンプル画像生成
    を実行すると、下記エラーのためその先へ進まないのですが、原因や解決法はお分かりになりますか?

    AttributeError: ‘Upsample’ object has no attribute ‘recompute_scale_factor’

    以上、よろしくお願いいたします。

    • さよさん
      エラー情報ありがとうございます。
      ColabのPytorchバージョンアップが原因でした。
      修正済みです。ご確認ください。

  • コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

    日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

    ABOUTこの記事をかいた人

    アバター

    ディープラーニング・エンジニアを趣味でやってます。E資格ホルダー。 好きなものは、膨大な凡ショットから生まれる奇跡の1枚、右肩上がりのワクワク感、暑い国の新たな価値観、何もしない南の島、コード通りに動くチップ、完璧なハーモニー、仲間とのバンド演奏、数えきれない流れ星。