今回は、どこまで本物らしい画像を生成できるのかpix2pix(unet版)とpix2pix(encoder-decoder版)を回してみました。
以下の画像群はどれが本物でどれが偽物かわかりますか
以下は、pix2pix(unet版)-starGANを32000epoch回して得られた学習画像です。ただし、Generatorが生成した偽物も混じっています。
以下の画像群はどれが本物でどれが偽物かわかりますか
以下は、pix2pix(unet版)-starGANを32000epoch回して得られた生成画像です。これは、一目瞭然ですが、中に綺麗な生成画像もあって、これはもともと学習データに含まれていた画像です。
以下の画像群はどれが本物でどれが偽物かわかりますか
以下は、pix2pix(encoder-decoder版)-starGANを38800epoch回して得られた学習画像です。ただし、Generatorが生成した偽物も混じっています。これは上記のpix2pix(unet版)より、判別しやすいと思います。
以下の画像群はどれが本物でどれが偽物かわかりますか
以下は、pix2pix(encoder-decoder版)-starGANを38800epoch回して得られた生成画像です。これも、一目瞭然ですが、pix2pix(unet版)に比べると比較的綺麗な偽生成画像もあって、学習データに含まれていなかった画像です。しかも、それらの偽画像はAKBメンバーに似ているものもありますが、なんとなく独自な画像も含まれていて、可能性を感じさせてくれます。
pix2pix(unet版)とpix2pix(encoder-decoder版)の収束性
実は、それぞれ32000epochと38800epoch回したので、収束は同じ程度なのかと思いますが、学習済生成画像と偽生成画像がこれだけ違うことからわかるように、そんなことはありません。
j 8000, Epoch1 8000/8001, Time: 34664.078228235245
10/10 [==============================] - 1s - D logloss: 0.5541 - G tot: 3.1830 - G L1: 0.1752 - G logloss: 1.4312
10/10 [==============================] - 1s - D logloss: 0.5699 - G tot: 3.0943 - G L1: 0.1876 - G logloss: 1.2183
10/10 [==============================] - 1s - D logloss: 0.5579 - G tot: 3.4255 - G L1: 0.2056 - G logloss: 1.3697
10/10 [==============================] - 1s - D logloss: 0.5513 - G tot: 2.9691 - G L1: 0.1629 - G logloss: 1.3404
10/10 [==============================] - 1s - D logloss: 0.5683 - G tot: 2.8544 - G L1: 0.1407 - G logloss: 1.4478
10/10 [==============================] - 1s - D logloss: 0.5625 - G tot: 3.1075 - G L1: 0.1693 - G logloss: 1.4148
j 8000, Epoch1 8000/8001, Time: 34542.17117714882
10/10 [==============================] - 1s 118ms/step - D logloss: 0.5624 - G tot: 1.9733 - G L1: 0.0587 - G logloss: 1.3863
10/10 [==============================] - 1s 92ms/step - D logloss: 0.5624 - G tot: 2.0056 - G L1: 0.0619 - G logloss: 1.3863
10/10 [==============================] - 1s 92ms/step - D logloss: 0.5624 - G tot: 1.8460 - G L1: 0.0460 - G logloss: 1.3863
10/10 [==============================] - 1s 92ms/step - D logloss: 0.5624 - G tot: 1.9632 - G L1: 0.0577 - G logloss: 1.3863
10/10 [==============================] - 1s 93ms/step - D logloss: 0.5624 - G tot: 1.8345 - G L1: 0.0448 - G logloss: 1.3863
10/10 [==============================] - 1s 92ms/step - D logloss: 0.5624 - G tot: 1.8926 - G L1: 0.0506 - G logloss: 1.3863
マシン性能が少し異なるので、時間などは参考程度に見てください。でもほぼ両者同じ程度ですね。そして、一番異なる点は、pix2pix(unet版)がG L1: 0.0506 に対して、pix2pix(encoder-decoder版)ではG L1: 0.1693 と三倍程度の悪さになっているところです。その結果、G tot: 1.8926 とG tot: 3.1075と大きな差がついてしまっています。これが学習データの判別がencoder-decoder版では容易になっている理由だと思います。(議論になっていませんが。。。)
課題
ということで、pix2pix(encoder-decoder版)で、unet版程度のLossになるように改善するにはどうすべきかということになります。