今回は写真や動画を宮崎駿監督や新海誠監督っぽいアニメ風に変換するAnimeGANv2を試していこうと思います。ブログやSNSに使えそうなアニメ風の背景をつくりたい!と思いたち、折角ですのでAIでつくってみました。AnimeGANv2は名前の通りGANのアルゴリズムを利用しています。簡単に説明すると宮崎駿の画像を学習させ宮崎駿っぽい画像を出力するAIモデルをつくり、そこへ普通の写真を入力すると宮崎駿っぽい写真が返ってくる、っとこんな仕組みになっています。言葉で説明するとややこしいですね。。。
AnimeGANv2について
AnimeGANは武漢大学と湖北工業大学からなる中国の研究チームが開発したモデルで、AnimeGANにノイズの低減、学習の安定化、生成器のパラメータ数低減などの改良を加えたものがAnimeGANv2になります。
モデルの特徴としては3つのLossを用いて学習させているところです。アニメ調にするために必要なドメイン技術を考えると、↓のLossはなるほど!と思います。
- grayscale style loss: テクスチャや線をアニメ風に変換する
- color reconstruction loss: 色を再構成する
- grayscale adversarial loss: 生成画像がグレースケール画像として表示されないようにする
ネットワークとしてはGeneratorモデルとDiscriminatorモデルの2つのモデルをつくり切磋琢磨させる、いわゆるGANのモデルをつかっています。
AnimeGANv2には宮崎駿風、新海誠風、パプリカ(今敏)風 の3モデルの重みデータが入っています。
AnimeGANv2を実装していく(環境準備)
ローカルPC環境で実装していきます。
- Windows 10
- AMD Ryzen 7 5800
- GeForce RTX3070
AnimeGANv2はフレームワークにTensorFlowをつかっていきます。TensorFlow、CUDA、cuDNNのバージョンは下記のものを使いました。この辺の環境設定に不安のある方はこのサイトで丁寧に説明されていますので参考にしてみてください。
- Python 3.6(Githubでは3.6推奨ですが、3.7でも動きました)
- tensorflow-gpu 1.15.0
- NVIDIA CUDA Toolkit 10.0.130
- NVIDIA cuDNN v7.6.0
他に必要なライブラリは↓になります。これらもインストールしてください。
- opencv
- tqdm
- numpy
- glob
- argparse
ソースコードはGithub↓からダウンロードしてきてつかいます。
Zipファイルをダウンロードしてデスクトップへ解凍しておくと便利です。この辺りの詳細が不安な方はここを参照してみてください。
オリジナルの画像を保存するディレクトリですが、今回は↓の様な配置にしています。
/dataset
-> images
-> ********.jpg
-> ********.jpg
-> ********.jpg
-> ********.jpg
出力されるアニメ風画像の保存ディレクトリも作成しておきます。
/results
-> images
AnimeGANv2を実装していく (コード)
コード自体は難しいことはなく簡単に実装できるようになっています。ですが環境によってはメモリ不足になるようで、私の環境ではAnimeGANv2ディレクトリのtest.pyの9行目を書き換えました。参考までに載せておきます。
8/4追記)RTX3000シリーズではTensorFlow1.xをうまく動かせない模様です。対応策調査中。。。
os.environ["CUDA_VISIBLE_DEVICES"] = "1" #"0" → "1"へ変更しています。
実装コードは↓になります。
宮崎駿風
python test.py --checkpoint_dir checkpoint/generator_Hayao_weight --test_dir dataset/images --style_name images
新海誠風
python test.py --checkpoint_dir checkpoint/generator_Shinkai_weight --test_dir dataset/images --style_name images
Paprika(今敏)風
python test.py --checkpoint_dir checkpoint/generator_Paprika_weight --test_dir dataset/images --style_name images
AnacondaPromptなどで実行するとOKです。JupyterNotebookで動かしたい場合は、”python”と”run”を入れ替えると動かせます。
AnimeGANv2ギャラリー
宮崎駿風
新海誠風
Paprika(今敏)風
コメント