DCGAN は Deep Convolutional Generative Adversarial Networks の略で、超ざっくり言うと畳み込みニューラルネットワークを使って画像生成するアルゴリズムです。元論文以外に、日本語で噛み砕いて説明してくれている記事もたくさんあります。
これを使ってアイドルの顔画像を生成したり、イラストを生成したり、そういうことができるアレです。ググるとおもしろい事例がたくさん出てきます。
そんな**「なんだかすごい」DCGAN、勝手に「使うのも難しそう」**なイメージを持ってたのですが、TensorFlowを用いた実装が公開されてまして、
実はデモを試すだけであれば手順通りにコマンド実行するだけで簡単に実行できます。
以下手元で試した手順のメモです。(2017年5月更新)
##データダウンロード
git cloneしてきて、ダウンロードスクリプトを実行します。
$ python download.py celebA
自分の環境では以下のようなエラーが出ました。
Traceback (most recent call last):
File "download.py", line 20, in <module>
from tqdm import tqdm
ImportError: No module named 'tqdm'
tqdmというモジュールがないそうなので、インストール。
$ pip install tqdm
再度 download.py
を実行することでデータのダウンロードと解凍が始まります。
ちなみに上記コマンド例の引数にある celebA
はセレブ顔生成デモ用のデータを指定するもので、手書き数字を生成するデモを試す場合は
$ python download.py mnist
とします。
##学習
TensorFlowがアクティブな状態で、main.pyを実行するだけ。
(tensorflow)$ python main.py --dataset celebA --input_height=108 --train --crop
MNISTの場合は
(tensorflow)$ python main.py --dataset mnist --input_height=28 --output_height=28 --train
かなり時間がかかるのですが、samples
フォルダに途中経過の生成サンプル画像を出力してくれるので、学習完了まで待たなくてもモデルが学習されていく様子を見ることができます。
(CELEB, Epoch0, 100枚学習)
(CELEB, Epoch0, 500枚学習)
(CELEB, Epoch0, 1100枚学習)
(CELEB, Epoch1)
(MNIST, Epoch0)
(MNIST, Epoch1)
・
・
・
(MNIST, Epoch6)
(MNIST, Epoch8)
学習が進む毎に画像生成の精度が向上していることがわかります。
##テスト
学習完了したら、そのモデルを使用して次のように画像生成を実行できます。
$ python main.py --dataset mnist --input_height=28 --output_height=28
$ python main.py --dataset celebA --input_height=108 --crop
##自前学習データで試す
こうなってくると自前データで試したくなります。別記事につづく(予定)
→ 試しました&書きました: ゲームアプリの「ドット絵」をディープラーニングで自動生成する