DCGANの設定を色々変えてためしてみた
下記の GAN の記事のコードをベースに、条件を変えて生成画像がどのように変化するか検証を行いました。
データセットは上記ブログと同様にアニメキャラの画像を使用しています。
コードは下記の5点、手を加えています。
- GoogleColab上でデータセットのダウンロード等の実行が完結するように修正
- GPU環境だけでなく非GPU環境でも実行可能なよう修正
- パラメーターを1セルに集約して変更しやすく修正
- Generater、Discreminatorのloss値をTensorBoardで表示
- 一番最後に生成・保存した画像を表示するよう修正
コードはGitHubはこちら、Google Colabはこちら。
処理が早いので GPU を使うのがおすすめです。
変更した条件
いずれもエポック数は400で統一、下記のとおり条件を変更し最終的に生成した画像を比較しました。
学習率 | オプティマイザー | Generaterの活性化関数 | 補足 | |
---|---|---|---|---|
パターン① | 0.0002 | Adam | ReLU -> tann | 参照ブログと同様の条件 |
パターン② | 0.0005 | Adam | ReLU -> tann | 学習率を増加 |
パターン③ | 0.0002 | AdaBelief | ReLU -> tann | 最適化関数にAdaBeliefを使用 |
パターン④ | 0.0002 | Adam | FReLU -> tann | Generaterで使用する活性化関数ReLUをFReLUに変更 |
各パターンの最終生成画像
パターン①の画像
ちょっと崩れているものもありますが、アニメっぽい画像が生成されています。
パターン②の画像
学習率を0.0002 から 0.0005 に変更したところ、過学習のせいか、同じ様な顔が作成され、画像にもノイズが入っています。
パターン③の画像
オプティマイザーを Adam からあたらしめの AdaBelief に変更してみました。
AdaBelief は、SGDのような「高い汎化性能」とAdamのような「速い収束性」「より良い安定性」の3つを兼ね備えているとのことです。
同じ様な画像が数多く生成されてしまっていますし、右目部分や口元が崩れてしまっています。
GAN には向かないのでしょうか。
パターン④の画像
元のコードでは Generater の活性化関数に ReLU と tann が使われていますが、ReLU を新しめの FReLU に変えてみました。
画像認識に特化した活性化関数で画像分類やセマンティックセグメンテーションなどの画像処理においてはこれらの上位互換という位置付けとのことです。
これも同じ様な画像が数多く生成されてしまっていますし、特に口元が大きく崩れてしまいました。
同じく GAN には向かないのでしょうか。
検証の結果最初のパターン①が一番よさそう、という結果となりました。
今回使ったものとは別のデータセットではどのような結果になるか、いずれ試してみようと思います。
以上になります、最後までお読みいただきありがとうございました。
Discussion