はじめに
今回はProjected GANという新しいGANの手法を紹介します。これは執筆日時点(2022/4/2)で最も性能の良いGANの一つであり、最大の特徴は少ないデータで学習が収束するという点です。
その特性を最大限活かして、ポケモンという少なデータでもそれらしいものを出力することに成功しています。
生成結果のサンプルはProjected GANのホームページに例示されてます。ポケモンや植物、動物の生成事例が貼られており、どれも高い精度で生成されていることがわかります。
https://sites.google.com/view/projected-gan/
また、いくつかのデータセットにおいてもSoTAを達成しています。以下の表はGAN系統ベンチマークの一覧です。大量のパラメータ数を誇るStyleGAN-XLが多くのベンチマークでSoTAを達成していますが、Projected GANも256*256の生成ではSoTAを取っています。
概要
通常のGANの構成に加えて、特徴投影器(feature projectors)を導入しています。
生成画像、正解画像から事前学習済みモデルの通して、特徴を抽出します。得られた特徴に対して畳み込みを4回行い、それぞれをDiscriminaterの入力としています。
特徴投影器により画像の特徴を別の次元から捉えられるようになるため、識別器が多角的に特徴を判断することができるようになる。といったイメージでしょうか。
AI-scholarのこちらの記事が日本語でより詳細に解説しており、参考になります。
https://ai-scholar.tech/articles/gan/ProjectedGAN
実装
コード全文のGithubはこちらです。Colabでも公開してくれているので今回はColabを使います。
Train
自分が実行した際にはダウンロードするファイルの容量問題で以下のコマンドが動きませんでした。
!gdown https://drive.google.com/u/0/uc?id=1aAJCZbXNHyraJ6Mi13dSbe7pTyfPXha0&export=download
そこで一つ上のセルで以下を実行します。
!pip install -U --no-cache-dir gdown --pre
学習を走らせてみて、馬鹿みたいに時間がかかることがわかりました。。。colabの制限を余裕で突破したので、学習を試してみるのは一旦諦めました。
Generate
メインのポケモンの生成を行っていきます。いざ生成しようと思っても feature_networks がないというエラーに悩まされましたが、これはstylegan_xl内のライブラリでした。
projected_gan-main/legacy.py", line 73, in find_class
return super().find_class(module, name)
ModuleNotFoundError: No module named 'feature_networks'
feature_networksを引っ張ってきます。
git clone https://github.com/autonomousvision/stylegan_xl
cp -r stylegan_xl/feature_networks projected_gan
colabで生成を行えるようにしたのでよければ以下からどうぞ。
https://colab.research.google.com/drive/1Mj3ltKSJRsQLykfCWTTjazpiEyMKiLjR?usp=sharing
生成結果
遠目で見るとかなりポケモンぽさがありますいですよね。しっかり見ると不定形っぽさが残っていますが、自分が書くよりは間違いなく上手いですね。
おわりに
ポケモンの生成を試してみました。まだまだ生成結果は荒いですね。。ただ、学習に使っていたデータが第六世代までで721枚なので、現在であればもう少しデータ増やすこともできそうです。学習に時間がかかり過ぎるので手持ちのパソコンのスペック的に難しそうですが、データ増やしてまたチャレンジしてみたいです。