1.はじめに
今回は、単に実写をアニメに変換するだけでなく、宮崎駿風、新海誠風など様々なスタイルへの変換を可能にする AnimeGANv2 をご紹介します。
2.AnimeGANv2とは?
AnimeGANv2は、AnimeGANの改良版なので、まずAnimeGANについて説明します。AnimeGANは、GANのフレームワークを使って、実写からアニメ画を生成するネットワークを作るモデルです。従来のノイズから画像を生成する手法と比べてパラメータが少なくて済み、軽量なのが特徴です。
ネットワークの構成は、実写からアニメを生成する GENERATOR NETWORK(生成器)と本物のアニメか偽物かを判定するDISCRIMINAOR NETWORK(判定器)の2つです。
生成器は実写から出来るだけアニメに近い画像を生成し判定器を騙そうとする一方で、判定器は本物のアニメなのか生成器が生成した偽物なのかを見破ろうとします。この切磋琢磨によって、最終的に生成器は、実写から本物の様なアニメを生成できるようになります。
実写をアニメに変換する方法は、カラー画像をグレイスケール画像に一旦変換してテクスチャーをコピーし、その後に色を再構成します。そのため、判定器で本物か偽物かを判定する基準(損失関数)は3つあります。
1つ目は、テクスチャや線をアニメ風に変換するための「grayscale style loss」、2つ目は色を再構成するための「color reconstruction loss」、3つ目は生成した画像がグレースケール画像として表示されないようにするための「grayscale adversarial loss」です。
ネットワークの学習は、風景や人物の「実写」と「特定のアニメ監督の作品」を用意して(実写と作品が対になっている必要はありません、ジャンルさえ合っていればOK)行います。学習完了後に、実写から特定のアニメ監督のスタイルのアニメが生成できる生成器が獲得できるわけです。
以上がAnimeGANの概要です。AnimeGANv2では、これに加えてノイズの低減、学習の安定化、生成器のパラメータ数低減などの改善を加えています。では、具体的にやってみましょう。
3.コード
コードはGoogle Colabで動かす形にしてGithubに上げてありますので、それに沿って説明して行きます。自分で動かしてみたい方は、この「リンク」をクリックし表示されたノートブックの先頭にある「Colab on Web」ボタンをクリックすると動かせます。
まず、セットアップを行います。
1 2 3 4 5 6 7 8 9 10 11 12 |
# ライブラリ・インストール ! pip install tensorflow==1.15.0 ! pip install imageio==2.4.1 # Githubからコードをコピー !git clone https://github.com/cedro3/AnimeGANv2.git %cd AnimeGANv2 # vgg19重みのダウンロード !wget https://github.com/TachibanaYoshino/AnimeGAN/releases/download/vgg16%2F19.npy/vgg19.npy !cp /content/AnimeGANv2/vgg19.npy /content/AnimeGANv2/vgg19_weight !rm /content/AnimeGANv2/vgg19.npy |
これでセットアップ完了です。詳しい方だと、なぜ各アニメ監督の学習済み重みをダウンロードしないの?と思うかもしれませんが、各アニメ監督の重みは githubのコードの中に含まれているんです。さすが軽量なAnimeGAN!
実写画像をアニメ画に変換
test.py を使って実写画像をアニメ画に変換します。引数は、1行目がモデルの重みの指定、2行目が実写画像が保存してあるフォルダーの指定、3行目がアニメ画を保存するサブフォルダーの指定(video/outは固定)です。
ここでは、モデルの重み指定が宮崎駿モデル、実写画像の保存フォルダーが images/input、アニメ画を保存するフォルダーが video/out/Hayao という設定です。
1 2 3 4 |
# 実写をアニメ画に変換(宮崎駿モデル) !python test.py --checkpoint_dir checkpoint/generator_Hayao_weight\ --test_dir images/input\ --style_name Hayao |
上記コードを実行すると、images/input に保存してある実写画像が全てアニメ画に変換され、同じファイル名で video/out/Hayao に保存されます。
自分の画像でやってみたい場合は、自分のPCからその画像を images/input へドラック&ドロップでアップロードすればOKです。Google Colab には、「新海誠モデル」、「パプリカモデル(今敏モデル)」もありますので、ぜひ試してみて下さい。
サンプルとして6枚の画像が用意してありますので、変換前後の変化をモデルによる差も含めていくつか見てみましょう。
これは、01.jpg を変換した結果です。
これは、02.jpg を変換した結果です。
風景は、大きくしないと分かり難いので1枚づつ見て行きましょう。まず、05.jpgのオリジナルです。
Hayaoモデルの変換結果です。
Shinkaiモデルの変換結果です。
Paprikaモデルの変換結果です。
私は、アニメについてはあまり詳しくないので、作者の画風がちゃんと再現されているかどうかは良く分かりませんが、スタイルにはちゃんと違いがありますね。
実写動画をアニメ動画に変換
実写動画をアニメ動画に変換する場合も、video2anime.py を実行するだけでOKです。実に簡単!引数は、1行目がモデルの重みの指定、2行目が実写動画の指定、3行目がアニメ動画を保存するフォルダーの指定です。
ここでは、モデルの重みが宮崎駿、実写動画が video/input/sample.mp4、アニメ動画を保存するフォルダーが video/out/Hayao という設定で実行します。
1 2 3 4 |
# 実写動画をアニメ動画に変換(宮崎駿モデル) !python video2anime.py --checkpoint_dir checkpoint/generator_Hayao_weight\ --video video/input/sample.mp4\ --output video/output/Hayao |
上記のコードを実行すると、sample.mp4 がアニメ動画に変換され、video/output/Hayao フォルダーに同じファイル名で保存されますので、見てみましょう。
自分の動画でやってみたい場合、容量が小さいもの(10Mbyteくらいまでなら)であれば、自分のPCから video/input へドラック&ドロップでアップロードし、そのファイルを指定すればOKです。容量が大きいものは、google drive 経由で行う方が早いです。
同様に「新海誠モデル」を試してみると
同様に「パプリカモデル」を試してみると、
ぜひ、自分の用意した動画でも試してみて下さい。では、また。
(オリジナルGithub)https://github.com/TachibanaYoshino/AnimeGANv2
2021.11 顔専用AnimeGANV2追加
(顔専用AnimeGANV2 Colab)https://github.com/cedro3/others2/blob/main/AnimeGANV2_for_face.ipynb
(Twitterへの投稿)