【GAN】Python3.6+TesnorFlow+Kerasで0から始めるDCGANの実装【CNN】

2019年8月29日

Python3.6+TesnorFlowでGANを実装します。

  1. GANとは
  2. DCGANとは
  3. MNISTとは
  4. Python3.6+TesnorFlow + Kerasのインストール
  5. Pythonのテスト動作
  6. DCGANでMNIST作成までの実装
  7. まとめ

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レベルなのだと思います。

次は何かのキャラクターなどを学習させてオリジナルのキャラクターができないか挑戦できたらと思います。

将来的には
・オリジナルポケモン
・オリジナルの絵画
・オリジナルのイラスト
・写真を絵画化
・写真をイラスト化
などなど色々なことができたらなぁと考えています!