Conditional GANをMNISTとCIFAR-10で試してみる

cGANは条件付き確率分布を学習するGAN。

スタンダードなGANでは,指定の画像を生成させるといったことが難しい.
例えば0,1,…9の数字を生成させるよう学習させたGANに対しては,
ノイズを入れると0,1,…9の画像の対応する"どれかの数字画像"が生成される.

しかし,cGANを使えばラベルを指定して、目的の画像を選択的に生成できる。
例えば0というラベルを指定してノイズと一緒にGeneratorに入力すると,
0という画像を取り出すことができる.

試しにMNISTとCIFAR-10のデータセットで遊んでみた。
MNISTの生成結果はこのような感じ。

f:id:yusuke_ujitoko:20170704184820g:plain

cGANの概要

  • GANの条件付きバージョン
  • Gにはラベルyとノイズzをfeed
  • Dにはラベルyと訓練画像yをfeed

f:id:yusuke_ujitoko:20170704160600p:plain:w500

  • 目的関数は従来と同じ.
    (特に規定せず?)

MNIST

Gでのノイズzとラベルyを結合の仕方は幾つか考えられる。
論文では、ノイズzを中間層200ユニットにマッピングし、
ラベルyを中間層の別の1000ユニットにマッピングし、
中間層で200ユニットと1000ユニットを結合し1200ユニットとし、zとyの結合としているが、

今回はノイズz(100次元)とy(10次元)を入力層において結合する方針で試した。
(このとき入力層のユニット数は(100 + 10)=794ユニットとなる)

Dでの結合もDの入力層で訓練画像xとラベルyを結合した。
GAN全体の構造と目的関数はWGAN-gpを採用している。

結果

指定したラベル通りの数字をそこそこうまく生成できた。
論文の結果よりも良い結果なのでは。

f:id:yusuke_ujitoko:20170704183015p:plain

CIFAR-10

(追記) CIFAR-10でも試しこちらも、 MNISTの生成結果画像と同じく指定ラベルごとの画像を生成できている(…と思われる)

f:id:yusuke_ujitoko:20170712203536p:plain

その他

cGANの系統では以下のGANがあるので今後試してみたい。

  • Semi-Supervised GAN
  • InfoGAN
  • AC-GAN