【GAN】Python3.6+TesnorFlow+Kerasで0から始めるDCGANの実装【CNN】
Python3.6+TesnorFlowでGANを実装します。
- GANとは
- DCGANとは
- MNISTとは
- Python3.6+TesnorFlow + Kerasのインストール
- Pythonのテスト動作
- DCGANでMNIST作成までの実装
- まとめ
1. GANとは
GAN(Genera tive Adversarial Networksの略)とは機械学習の中でも「教師なし学習」に分類される機械学習です。
GANではgeneratorとdiscriminatorという2つのネットワークで構成されています。
Generatorは訓練データと同じようなデータを生成しようとします。
Discriminatorはデータが訓練データから来たものか、それとも生成モデルから来たものかを識別します。
この2つのネットワークを交互に繰り返していくと2つのネットワークの学習が徐々に進んでいき、やがて訓練データが生成モデルと見分けがつかなくなるぐらいの出来上がりになることが期待されます。
この関係は紙幣の偽造者と警察の関係によく例えられます。
1.偽造者は本物の紙幣とできるだけ似ている偽造紙幣を造ります。
2.警察は本物の紙幣と偽造紙幣を見分けようとします。
これを繰り返していくと最終的に偽造者はより本物の紙幣に近い偽造紙幣を作ることができるようになるということです。
2. DCGANとは
DCGAN(Deep Convolutional GANの略)とはGANにCNN(Convolutional Neural Network)というニューラルネットワークの仕組みを加えたGANのことです。
GANはなんども繰り返し画像の生成が必要でしたが、DCGANでは一回でより高精度の画像を生成できるようになりました。
簡単に言うとDCGANはGANの進化系です。
3. MNISTとは
MNISTは0から9の手書き数字が書かれた28x28のグレースケール画像です。
今回はGANを使いMNISTを作成します。
4. Python3.6 + TesnorFlow + Kerasのインストール
4-1. Python3.6のインストール
Pythonの公式ホームページのダウンロードページより任意のpythonのバージョンを選択してmac用のインストーラーをダウンロードし、pythonのインストールをします。
今回、私はpython6.6のページへ行き、「macOS 64-bit installer」というmac用のインストールパッケージをダウンロードしました。
ダウンロードが完了したらパッケージよりPythonをインストールしてください。
Pythonのインストールと同時にPython用のモジュールを簡単にインストールするためのpip3というのも同時にインストールされます。
パッケージによるPythonのインストールが完了したら動作確認のためPythonのバージョン、pip3の使用確認をしましょう。
Ptythonのバージョン確認
$ python3 --version Python 3.6.6
pip3の使用確認
$ pip3 list Package Version ---------- ------- pip 10.0.1 setuptools 39.0.1
※python3.7だとTensorFlowがうまく利用できない以下のようなエラーになります。
python3.6をインストールするようにしてください。
4-2. TensorFlowのインストール
$ pip3 install --upgrade --ignore-installed https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-1.8.0-py3-none-any.whl
※URLはPythonのバージョンにより異なる場合があります。
実行したものの、以下のようなエラーが出た時は--userオプションをつけてください。
Could not install packages due to an EnvironmentError: [Errno 1] Operation not permitted
$ pip3 install --upgrade --ignore-installed https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-1.8.0-py3-none-any.whl --user
完了した場合、ちゃんとインストールされているか確認します。
$ pip3 list Package Version ------------------- --------- absl-py 0.5.0 astor 0.7.1 bleach 1.5.0 cycler 0.10.0 gast 0.2.0 grpcio 1.15.0 h5py 2.8.0 html5lib 0.9999999 Keras 2.2.2 Keras-Applications 1.0.4 Keras-Preprocessing 1.0.2 kiwisolver 1.0.1 Markdown 3.0 matplotlib 3.0.0 numpy 1.15.2 pandas 0.23.4 Pillow 5.2.0 pip 18.0 protobuf 3.6.1 pyparsing 2.2.1 python-dateutil 2.7.3 pytz 2018.5 PyYAML 3.13 scikit-learn 0.19.2 scipy 1.1.0 setuptools 40.4.3 six 1.11.0 tensorboard 1.8.0 tensorflow 1.8.0 termcolor 1.1.0 Werkzeug 0.14.1 wheel 0.31.1
tensorflow1.8.0があることが確認できます。
これでTensorFlowのインストールは完了です。
4-3. Kerasのインストール
$ pip3 install keras
完了した場合、再度インストールされているか確認します。
$ pip3 list Package Version ------------------- --------- absl-py 0.5.0 astor 0.7.1 bleach 1.5.0 cycler 0.10.0 gast 0.2.0 grpcio 1.15.0 h5py 2.8.0 html5lib 0.9999999 Keras 2.2.2 Keras-Applications 1.0.4 Keras-Preprocessing 1.0.2 kiwisolver 1.0.1 Markdown 3.0 matplotlib 3.0.0 numpy 1.15.2 pandas 0.23.4 Pillow 5.2.0 pip 18.0 protobuf 3.6.1 pyparsing 2.2.1 python-dateutil 2.7.3 pytz 2018.5 PyYAML 3.13 scikit-learn 0.19.2 scipy 1.1.0 setuptools 40.4.3 six 1.11.0 tensorboard 1.8.0 tensorflow 1.8.0 termcolor 1.1.0 Werkzeug 0.14.1 wheel 0.31.1
Keras2.2.2があるのが確認できますね。
これでKerasのインストールは完了です。
5. Pythonのテスト動作
str1 = "Hello" str2 = "World!" print(str1 + ', ' + str2)
test.pyというテキストファイルに上記のようにプログラムします。
$ python3 test.py
ターミナルでtyest.pyを実行します。
Hello, World!
実行結果としてこのように出力されれば成功です。
6. DCGANでMNIST作成までを実装
https://github.com/carpedm20/DCGAN-tensorflow
今回は手っ取り早く実装するためgitのsampleを使用します。
MNISTをダウンロード
$ python3 download.py mnist
mnistのデータをダウンロードします。
ModuleNotFoundError: No module named 'requests'
このようなエラーがでたら
$sudo pip3 install requests
必要なモジュールを追加します。
$ python3 download.py mnist
再度ダウンロードを試みます。
ModuleNotFoundError: No module named 'tqdm'
$ sudo pip3 install tqdm
さらにモジュールを追加しました。
※私はこれで終わりました。
$ python3 download.py mnist
再度やるとうまくダウンロードできたようで「data/mnist/~~~-ubyte」がフォルダにダウンロードされました。
DCGANを使用してMINISTを作成
$ python3 main.py --dataset mnist --input_height=28 --output_height=28
ministの作成はこのようにします。
データセット → minist
インプット → 読み込みサイズ
アウトプット → 書き出しサイズ
ModuleNotFoundError: No module named 'cv2'
またもモジュールが見つからないエラーがでました。
$sudo pip3 install opencv-python
先ほどと同様にモジュールを追加します。
$ python3 main.py --dataset mnist --input_height=28 --output_height=28
再度実行します。
[!] Load failed... [ 1 Epoch:[ 0/25] [ 0/1093] time: 1.6055, d_loss: 1.95340538, g_loss: 1.04597270 [ 2 Epoch:[ 0/25] [ 1/1093] time: 2.4677, d_loss: 1.49079812, g_loss: 0.78684580 [ 3 Epoch:[ 0/25] [ 2/1093] time: 3.3220, d_loss: 1.44898367, g_loss: 0.76452100 ... .. .
こんな感じでGANが動き始めればokです。
学習が進むと同時にsample画像が生成されます。
200
4000
デフォルト設定なので25epoch x 1093回 学習すると思いますが
4000回目にしてかなり綺麗な手書き風の数字が出力されていることがわかります。
7. まとめ
今回はDCGANの基礎となるMNISTを試してみました。
これはプログラムでいうHellow Worldレベルなのだと思います。
次は何かのキャラクターなどを学習させてオリジナルのキャラクターができないか挑戦できたらと思います。
将来的には
・オリジナルポケモン
・オリジナルの絵画
・オリジナルのイラスト
・写真を絵画化
・写真をイラスト化
などなど色々なことができたらなぁと考えています!