ココアのお勉強ブログ

技術職の一般人です。趣味でコード書いたりソフト触ったり。

CGANについてまとめた

CGANについてまとめました。詳しい解説は引用・参考サイトを見ることをおすすめします。

論文

https://arxiv.org/pdf/1411.1784.pdf

引用・参考サイト

https://qiita.com/triwave33/items/f6352a40bcfbfdea0476

https://www.kumilog.net/entry/conditional-dcgan

https://github.com/hwalsuklee/tensorflow-generative-model-collections

https://medium.com/@jonathan_hui/gan-cgan-infogan-using-labels-to-improve-gan-8ba4de5f9c3d

https://qiita.com/taku-buntu/items/0093a68bfae0b0ff879d

どんなもの?

GANでは、Generatorにはノイズだけを入力します。

Generatorが生成する確率分布を制御するアイデアがCGAN (Conditional GAN)です。

GeneratorとDiscriminatorの入力に教師データのカテゴリ(ラベル)情報を加えるだけです。

先行研究と比べてどこがすごい?

Generatorが何を生成するかはGeneratorに委ねられています。

要は乱数から文字を生成させることはできますが、生成させる文字(1とか8とか)を指定することができません。生成データをコントロールするためには、学習時に文字の正解ラベルを取り込む必要があります(conditional-GAN)。

f:id:hotcocoastudy:20190313221346p:plain

画像はhttps://github.com/hwalsuklee/tensorflow-generative-model-collectionsより

通常のGANは教師あり学習に分類されると思いますが、これはあくまで画像が本物か偽物かに対する教師あり学習で、例えばmnistでは、画像がどのラベルに対応するかの教師あり学習は行なっていません。そのため、生成器(Generator)が明示的に数字を書き分けることはできません。訓練画像のラベルを知らされていないので当然です。Generatorはただ訓練データの分布に近づけるように学習を繰り返します(数字を例にすると、Generator自体には分からないが「1らしいもの」、つまり「1を1たらしめている特徴」はGeneratorの潜在変数に取り込まれます)。どの数字を書くかに関係なく様々な字体の訓練データを学習して、その背後にある字の特徴を潜在空間にマッピングしてほしいというわけです。

そのためには、Generatorの潜在変数とカテゴリ情報を切り離して考え、代わりにカテゴリ情報の条件化での生成モデル、識別モデルを生成する必要があります。それがConditional(条件付き)GANになります。例えばdiscriminatorに「今は、6について本物か偽物かを判定している」、generatorに「今は、3を書くという条件のもとに画像を生成している」ということを教えてあげます。

技術や手法のキモはどこ?

イデアは非常に簡単でGeneratorとDiscriminatorの各入力にラベル情報を混ぜてあげるだけで他は一緒です。カテゴリ情報を用いるからといって、数値自体の識別モデルを作るわけではなく、あくまで本物か偽物かの識別をするだけです。各GANの派生系において基本構造は変わらないことが重要です。

f:id:hotcocoastudy:20190313221451p:plain

画像は論文より

f:id:hotcocoastudy:20190313221531p:plain

画像はhttps://medium.com/@jonathan_hui/gan-cgan-infogan-using-labels-to-improve-gan-8ba4de5f9c3dより

コスト関数もGANと同じものを使います。

f:id:hotcocoastudy:20190313221554p:plain

コスト関数

どうやって有効だと検証した?

MNISTを用いて検証した。各行はそれぞれ0~9のラベルの生成画像。

f:id:hotcocoastudy:20190313221635p:plain

画像の論文より

各行正しい数字画像が出力されていることが分かる。

議論はある?

ない

次に読むべき論文は?

CGANがベースになっているImage-to-Image Translation with Conditional Adversarial Networks(pix2pix)を読みたいと思います。