kaggle犬コンペというGANを使って犬の画像を生成するコンペティションがありました。僕自身も参加はしていましたが全く奮わなかったので後学のために上位解法をまとめておきます。Discussion に書かれていることをまとめただけでコードは読んでないので注意。
1位
データ前処理
- アスペクト比が極端な画像を除く (縦/横 < 0.2 または縦/横 > 4)
- 余分なオブジェクトが写っていない部分のみ使う (参考)
- Bounding Boxの利用
- 64x64へのリサイズ
- Horizontal Flip
モデル
- BigGAN
- 入力は120次元標準正規分布からのサンプル
- LeakyReLU
- 32x32でSelf-Attention
- truncation trick. 閾値は0.8
- EMAなし
学習
- binary cross entropy
- Adam (lrG=3e-4, lrD=3e-4, beta1=0.0, beta2=0.999)
- batch sizeは32
- 130 Epoch
- label smoothing
2位
データ前処理
- 画像に一様なノイズを付加 ### モデル
- BigGAN(shared embedding、hierarchical latent noise, projection) ### 学習
- RaLSにauxiliary classification lossで荷重
- batch sizeは128
- generator には EMA使用
3位
データ前処理
- public scoreとしてはBounding Boxでのclippingをした画像と元画像を両方使うのがベストだった
モデル
- Self-Attention GAN
- 32x32でSelf-Attention
- 入力は180次元
学習
- binary cross entropyが最良、次点でLSGAN-sigmoid
- generatorの学習率は2e-4、discriminatorの学習率は4e-4
- label smoothing
- batch sizeは32 (64も試したが32の方がよかった)
- Cosine Annealing Warm Restarts
- 170 epoch
4位
データ前処理
- Bounding Boxで切り抜いたもの+オリジナルの画像 ### モデル
- BigGANベース
- channel数のベースが24 ### 学習
- batch sizeは32
- 200エポック
- Gの学習率は1e-4、Dの学習率は6e-4
5位
データ前処理
モデル
- BigGAN-deep、ただしtruncation trickなし
- Generatorにshared class embeddingによるhierarchical noise injection
- channel数のベースの数はgeneratorが32、discriminatorが64
学習
- cosine annealing
- batch sizeは32
8位
データ前処理
- Bounding Box でのcrop、horizontal flip
- 綺麗なデータをピックして使おうとしたがあまりいい影響はなかった
モデル
- StyleGAN
- 入力は256次元
学習
- Auxiliary Classifierはあり
それぞれのコードの詳細を読んだ方がいいのでしょうが、とりあえずほとんどの人がBigGANを推していること、Bounding Boxを使って切り抜いた画像とオリジナルの画像を両方使うことあたりは重要そうな気がします。