入力したのと同様の画像を生成するアルゴリズムとしてdcganがある
これにラベルをつけて指定した画像を生成できるようにしたのが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にあるものから余分なところを減らしたくらい(変数の名前とかも少し違うが)