[論文メモ] COLLAPSE BY CONDITIONING: TRAINING CLASSCONDITIONAL GANS WITH LIMITED DATA

arxiv.org
github.com

少ないデータでmode collapseしないようなConditional GAN(cGAN)の学習方法の提案

問題点

f:id:Ninhydrin:20220120095144p:plain
少量データでGANを学習するとき、unconditionalだと安定して多様な画像が学習できるにも関わらず、conditional にするとmode collapseが起こる(図1参照)。

調査

cGANにするとmode collapseするといった研究・報告は無いので実際に実験して調査。
以前の研究ではクラス情報などの条件が生成結果の質を向上するということが示唆されてきた。

図1は4つのデータセットをunconditional、conditionalのStyleGAN2で学習した結果。各データセットは1170~2410枚の画像が含まれる。
cGANのFIDは悪く、生成結果を見てもmode collapseしているのがわかる。

mode collapseとデータ数の関係を調べるために、データ数を徐々に減らして学習した結果が図2。データセットはImageNet。
図2(a)は各クラス100枚をキープして、クラス数を減らした。
図2(b)はクラス数を50にキープして、各クラスの画像を減らした。
f:id:Ninhydrin:20220120095823p:plain

どちらも5k枚程度あれば安定で、データが多ければconditionalのほうが良いが、少ないときは結果が逆転する。なお、提案手法では5k枚より少なくてもそれなりに安定。

手法

上記のように同じサンプル数でもconditionalにするとmode collapseが起きる。
cGANの実験で学習を開始してからかなり早い段階でmode collapseが起こることがわかった。
また、uGANは学習中、徐々に多様な画像を生成できるようになっていく。


はじめはunconditionalで多様な画像を学習し、後でconditionalにすることで多様な画像を生成できる空間を構築・利用でき、mode collapseを回避する。

FROM UNCONDITIONAL TO CONDITIONAL GANS

なので学習中、unconditionalからconditionalへ変化を調整する必要がある。そのために \lambda_t \geq 0を導入する。 tイテレーション数で、 \lambda_t=0は完全なunconditional、つまり条件がgeneratorとdiscriminatorのどちらにも影響しないことを意味する。
この\lambda_t を徐々に大きくしてconditionalにしていく。
ここでは単純な線形の遷移を選択。
f:id:Ninhydrin:20220121091314p:plain
ここで、 T_s, T_eは変化の開始と終了のイテレーション数。

TRANSITION IN THE GENERATOR

uGAN  G(z)からcGAN  G(z, c)( zは潜在変数、 cは条件)に変化するとアーキテクチャを変更する必要がある。
ここは単純に条件 c \lambda_tでマスクする。条件を変換するネットワークを Eとして G(z,  E(c) \cdot \lambda_t)
図3に全体像を示す。
f:id:Ninhydrin:20220121092255p:plain

TRANSITION IN THE TRAINING OBJECTIVE

uGANからcGANへの変化に伴い、lossも変化する必要がある。
画像のリアルさについてはunconditional、conditionalどちらも必要でconditionalな部分に関しては条件が入ってきてから必要になる。
ここも単純に \lambda_tを使って重み付けする。
f:id:Ninhydrin:20220121092645p:plain
型の G,DはGeneratorかDiscriminatorか、 L_{uc}はunconditional(普通のadversarial loss)、{tex:L_c}はconditionalのloss。
Discriminatorは2つのreal/fakeを予測する必要があるので、最終層で枝分かれさせる。
conditionalなDiscriminator部分に関してはprojection GANのアーキテクチャを採用(Discriminatorの出力とconditionで内積を計算して出力に足す)。

実験・結果

例の如く省略。
f:id:Ninhydrin:20220121093318p:plain
f:id:Ninhydrin:20220121093418p:plain

 L_{uc}は常にあったほうがよさそう。
f:id:Ninhydrin:20220121094423p:plain
f:id:Ninhydrin:20220121093628p:plain

所感

シンプルに少量データでのcGANを改善できるのは嬉しい。
uGAN->cGANのイテレーションのバランスとり方にもう少し工夫が欲しかった。ヒューリスティックに決めるのではなく、何かしらの値を監視して自動で変化するとか。
conditionalのがmode collapseしやすいというのは当然の気がした。条件が増えた分Generatorが生成しやすくなるよりも、Diが判別しやすくなる恩恵のほうが大きそう(空間的なcondtionaは別)。なのでcondtionの入力マスクはDiscriminatorだけでもいいのでは?(でも始めからGにcondtionが入っていると無視することを学習してしまうかも?学習中に改善されそうではある)。
ただ、出力の解像度についての言及が見つけられなかった。論文中の画像を見てもそこまでサイズが大きくはなさそう(128x128?)。