dcganをconditional dcganにしてみる

入力したのと同様の画像を生成するアルゴリズムとしてdcganがある

[1511.06434] Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks

これにラベルをつけて指定した画像を生成できるようにしたのがconditional gan

[1411.1784] Conditional Generative Adversarial Nets

dcganの実装はpytorch/examplesにおいてあってとてもわかりやすい

examples/main.py at 3b349ad2d189bb8afbfd38c8b496cd5b2e273412 · pytorch/examples · GitHub

ganの実装の入門として、これを元にconditional ganの形に修正してみた。やることは単純でgenerator, discriminatorの両方の入力にラベルを表現するtensorを加える

generatorの場合、元々の入力は1次元なので後ろにラベルを表すone-hot vectorをくっつける
discriminatorの場合、元々の入力は2次元の画像一枚。なので判別したいクラスの分だけ同じサイズのtensorを用意し0 or 1で埋めたものをchannelとして足す(表現するクラスのchannelのみ1) こちらでわかりやすく書かれていた

Conditional GANをchainerで実装した - Qiita

実装した際の差分はこちら

add feature of conditional dcgan · y-kamiya/machine-learning-samples@87c64de · GitHub

元のdcganの実装はpytorch/examplesにあるものから余分なところを減らしたくらい(変数の名前とかも少し違うが)

参考

ChainerでDCGANを実装しMNIST風の画像を生成する / blog.rystylee.com

chainer/net.py at master · chainer/chainer · GitHub