DCGANの設定を色々変えてためしてみた

2 min read読了の目安(約2200字

下記の GAN の記事のコードをベースに、条件を変えて生成画像がどのように変化するか検証を行いました。

https://qiita.com/hkthirano/items/7381095aaee668513487

データセットは上記ブログと同様にアニメキャラの画像を使用しています。

コードは下記の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に変更

各パターンの最終生成画像

パターン①の画像
バージョン001

ちょっと崩れているものもありますが、アニメっぽい画像が生成されています。

パターン②の画像
バージョン002

学習率を0.0002 から 0.0005 に変更したところ、過学習のせいか、同じ様な顔が作成され、画像にもノイズが入っています。

パターン③の画像

オプティマイザーを Adam からあたらしめの AdaBelief に変更してみました。

AdaBelief は、SGDのような「高い汎化性能」とAdamのような「速い収束性」「より良い安定性」の3つを兼ね備えているとのことです。

https://qiita.com/omiita/items/5012afa3cba4d73a7aed

バージョン003

同じ様な画像が数多く生成されてしまっていますし、右目部分や口元が崩れてしまっています。

GAN には向かないのでしょうか。

パターン④の画像

元のコードでは Generater の活性化関数に ReLU と tann が使われていますが、ReLU を新しめの FReLU に変えてみました。

https://qiita.com/Radley/items/5cfa226d9d108e769861

画像認識に特化した活性化関数で画像分類やセマンティックセグメンテーションなどの画像処理においてはこれらの上位互換という位置付けとのことです。

バージョン004

これも同じ様な画像が数多く生成されてしまっていますし、特に口元が大きく崩れてしまいました。

同じく GAN には向かないのでしょうか。

検証の結果最初のパターン①が一番よさそう、という結果となりました。

今回使ったものとは別のデータセットではどのような結果になるか、いずれ試してみようと思います。

以上になります、最後までお読みいただきありがとうございました。