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

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の手書き数字が書かれた28×28のグレースケール画像です。

今回は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のバージョン確認

pip3の使用確認

※python3.7だとTensorFlowがうまく利用できない以下のようなエラーになります。
python3.6をインストールするようにしてください。

4-2. TensorFlowのインストール

※URLはPythonのバージョンにより異なる場合があります。

実行したものの、以下のようなエラーが出た時は–userオプションをつけてください。

Could not install packages due to an EnvironmentError: [Errno 1] Operation not permitted

完了した場合、ちゃんとインストールされているか確認します。

tensorflow1.8.0があることが確認できます。
これでTensorFlowのインストールは完了です。

4-3. Kerasのインストール

完了した場合、再度インストールされているか確認します。

Keras2.2.2があるのが確認できますね。
これでKerasのインストールは完了です。

 

5. Pythonのテスト動作

test.pyというテキストファイルに上記のようにプログラムします。

ターミナルでtyest.pyを実行します。

実行結果としてこのように出力されれば成功です。

 

6. DCGANでMNIST作成までを実装

https://github.com/carpedm20/DCGAN-tensorflow

今回は手っ取り早く実装するためgitのsampleを使用します。

MNISTをダウンロード

mnistのデータをダウンロードします。

ModuleNotFoundError: No module named 'requests’

このようなエラーがでたら

必要なモジュールを追加します。

再度ダウンロードを試みます。

ModuleNotFoundError: No module named 'tqdm’

さらにモジュールを追加しました。

※私はこれで終わりました。

再度やるとうまくダウンロードできたようで「data/mnist/~~~-ubyte」がフォルダにダウンロードされました。

DCGANを使用してMINISTを作成

ministの作成はこのようにします。

データセット → minist
インプット → 読み込みサイズ
アウトプット → 書き出しサイズ

ModuleNotFoundError: No module named 'cv2’

またもモジュールが見つからないエラーがでました。

先ほどと同様にモジュールを追加します。

再度実行します。

こんな感じでGANが動き始めればokです。
学習が進むと同時にsample画像が生成されます。

200

4000

デフォルト設定なので25epoch x 1093回 学習すると思いますが
4000回目にしてかなり綺麗な手書き風の数字が出力されていることがわかります。

7. まとめ

今回はDCGANの基礎となるMNISTを試してみました。
これはプログラムでいうHellow Worldレベルなのだと思います。

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

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