GAN実験1

GANのいろんなパーツについて効果を確認しながら実験していく記事の1

 

まずは最も基本ということでDCGAN。

勉強のために論文やらを見ながら自分でコード書いてみた。

とはいえGenerator、DiscriminatorともにConvolution -> Batch Norm -> (Leaky) ReLUを繰り返すだけです。

 

DatasetにはFFHQの128*128の顔画像を70000枚ほど。

顔に限られてるし枚数もそれなり、GANにとっては扱いやすいはず。

 

素直に実験してみた結果(250 epoch)。

f:id:CH1008:20200416122638j:plain

これはなかなか…

左端の下から二番目とか割といい気がするものの崩れてるのも多い印象(ゾンビっぽさがある)。

 

むしろ途中(127epoch)の方がいい画像を生成できてるかも。

f:id:CH1008:20200416123100j:plain

ちなみに同じ位置の画像は同じ潜在変数からの生成で、顔の感じはだいぶ変わってるけど向きとか性別、年齢はある程度保存されてる模様。

学習後半は表層的な部分のみ変化しているのかもしれない。

 

損失関数はBCE Lossで推移はこんな感じ。

f:id:CH1008:20200416124031p:plain

Discriminatorの損失

f:id:CH1008:20200416124108p:plain

Generatorの損失

やる前から予想はできてたけどDiscriminatorが圧勝してる。

BCE Lossが0.1くらいって事はDiscriminatorが90%正確に見分けられてるって事か…

ついでにGeneratorは最後の方で損失が急上昇してるから多分学習が失敗し始めている。

 

 

次回は安定化のためにDiscriminatorの学習を制限してほどほどの強さのまま競わせる実験をする予定。

使用コードもいずれ公開します(たぶん)。