はじめに(†ホラー変換†)
変換前 | 変換後 |
---|---|
おわかり、いただけたでしょうか。
こちらはGAN(敵対的生成ネットワーク)を活用し、写真に**「ホラー」**の特徴を与え、変換しています。
原理についてはひとまず置いておいて、まずはGANの可能性をご覧ください!
##季節変換、オーロラ変換、花火変換
変換前 | 変換後 |
---|---|
これらはCycleGAN[1]を利用して「夏と春」「雲とオーロラ」「空と花火」などのペアで特徴の入れ替えを行っています。
ただ色彩を変えるわけでなく、言わば「画像の翻訳(変換)」のように原型を保ちながら変換が行われています。
CycleGANの原理について詳しく知りたい方は、こちらの記事を参考にしてください。私も大変お世話になりました。
風景の†異世界変換†
今回、私はこの技術を写真の**「風景変換」**に……否!!
**「†異世界変換†」**に活用しました!!
4ヶ月に渡る奮闘と、その成果をご覧ください。
##†ファンタジー変換†
まずは†ファンタジー変換†です。
「風景(鹿児島)」と「ファンタジー・幻想的」のペアでデータセットを作成し学習しました。
やはり抽象的な表現は難しく、画像の選別に大変苦労しましたね。
変換前 | 変換後 |
---|---|
出ました!
ただでさえ美しい鹿児島の風景が、更に幻想的で神秘的に!?
光の粒は「ただのノイズ」か……?
いやいやいや、私の目には**「妖精が飛んでいる」ように見えますね。
全体的に青色がとっても綺麗**です。
##†ホラー変換†
続いては、冒頭でもご紹介した†ホラー変換†です。
**※※※閲覧注意※※※**ですよ。
変換前 | 変換後 |
---|---|
ご覧下さいこの街並みを……!!
貴方に足を踏み入れる勇気はありますか?
このままホラーゲームのテクスチャとして使いたいほどです。
こちらは「街並み」と「ホラー映像」のペアでデータセットを作成し学習しました。
もっと言うと「SIREN」「サイレントヒル」のプレイ画面を学習AIに見せ続けました。
全体的に街並みが赤黒い理由がこれです(何枚か試してみましたが川は赤くなりませんでした。残念)。
##†海底都市変換†
続いて、†海底都市-Atlantis-変換†です。
『「風景」に「水中」の特徴を混ぜたら「海底都市」になるのでは?』
という安直な発想からデータセットを作成し学習しました。
変換前 | 変換後 |
---|---|
見事ですね……!
竜宮城の入り口……とでも言えましょうか?
後ろの木もまるでサンゴ礁のようですね。
水の神よ……感謝。
†海底都市-Atlantis-変換†では「ただの海中」画像だけでなく「ダイビング」画像からも集めたことから、
優秀なデータセットを作ることができました。
##†氷山変換†
つい先日、アナ雪2のスペシャル企画で「富士山や桜島を氷漬けにする」キャンペーンがありました。
GANで同様のことを行うと、どうなるでしょうか?
「桜島」と「氷山」のペアでデータセットを作成し学習しました!
変換前 | 変換後 |
---|---|
いや、やりすぎでしょ。
ウキウキで変換結果見に行った時、一面氷河期になってて怖すぎて泣いちゃいました。
これがAIの反逆か……?
もっと丁寧にデータセットを作成し山の形を学習すれば、ここまで恐ろしい結果にはならなかったかもしれません。
**†氷河期変換†**と開き直れば見事この上ない完成度です。
学習方法について
学習データセット用の画像収集
CycleGANは教師なし学習です。ラベル付け等は必要ありません。
背景や構図がバラバラでも、数さえ揃えば上手く学習できるのがCycleGANのすごいところです。
今回の変換ではそれぞれ1000枚を目処に画像を収集し、データセットを作成しています。
普段の街並み1000枚を「trainA」、異世界の街並み1000枚を「trainB」といった形です。
そうは言っても異世界の住民ではないので、カメラの中に異世界の写真は1000枚もありません……。
そこで、私は主に下記2つの手法で学習用データセットを作成しました。
①グーグル画像検索で画像を集める
pythonのライブラリ「icrawler」が便利です。
詳しくはこちらの記事をご覧ください。大変お世話になりました。
「オーロラ」等のキーワードで画像を検索し、データセットを作成しました。
②動画を撮ってフレーム単位で画像を切り出す
①の手法では検索ワードによってはノイズデータが混ざりすぎて、学習用画像の選別が大変困難になってしまいます。
こんな時はOpenCV等でスタイル変換のイメージとなる動画をフレーム単位で画像化してあげると楽です。
詳しくはこちらの記事をご覧ください。大変お世話になりました。
例えば「ホラー変換」では、私がホラーゲームで一番怖かったシーンを合計30分ほど録画して、1000枚を目処に画像を切り出しました。
CycleGANで学習
いよいよCycleGANで学習です。
自身のPCでぶん回すのも良いのですが、Google Colabratoryがすごいです。
Jupyter Notebookをクラウドで使えるようなサービスです。
詳しくはこちらの記事をご覧ください。大変お世話になりました。
ざっくり説明すると無料でGPUを貸してくれるクラウドIDEです。すごい。
運が良ければTesla P100(約90万円のGPU)も無料でお借りできちゃいます。すごい。
クラウドIDEなので場所や自身のマシンスペックに左右されません。バックグラウンドで学習し放題です。すごい。
快適すぎてGoogleドライブに課金しちゃいました。アイラブグーグル。
ソースコード
https://colab.research.google.com/drive/1KmwC-eOU3Z02ZiCmgFv-rDG4HxzK-8zG
↑こちらが私が実際に**†異世界変換†**の学習に使っていたノートです。
Pytorch版のCycleGAN[2]をGoogle Colabratory上に実装しています。
まだまだ知識があやふやですが、自分へのメモがてら解説を挟んでいるので参考になれば幸いです!
まずはサンプルの定番の「ウマ→シマウマ」のスタイル変換から是非。
Webアプリ公開
近いうちゴリゴリ書きます
ngrokってすごいのよ!
参考文献
[1]Jun-Yan Zhu, Taesung Park, Phillip Isola, Alexei A. Efros, Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks, arXiv preprint arxiv:1703.10593, 2017.
[2]@inproceedings{CycleGAN2017,
title={Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networkss},
author={Zhu, Jun-Yan and Park, Taesung and Isola, Phillip and Efros, Alexei A},
booktitle={Computer Vision (ICCV), 2017 IEEE International Conference on},
year={2017}
}
@inproceedings{isola2017image,
title={Image-to-Image Translation with Conditional Adversarial Networks},
author={Isola, Phillip and Zhu, Jun-Yan and Zhou, Tinghui and Efros, Alexei A},
booktitle={Computer Vision and Pattern Recognition (CVPR), 2017 IEEE Conference on},
year={2017}
}