Generative Dog Images 2nd place solution (Japanese), Generative Dog Images, yabea, GANコンペ, 犬コンペ, GAN犬コンペ, Kaggle
Generative Dog ImagesExperiment with creating puppy pics2nd place solution[kaggler-ja] yabeaHFOFSBUPS
View Slide
Self Introduction■ Account Name: yabea■ Master’s Student at Keio University■ Machine Learning : 2018/03~■ Kaggle : 2019/02~@yabea182
コンペ概要と結果3
コンペ概要■ Kaggle初の画像⽣成コンペ https://www.kaggle.com/c/generative-dog-images■ 主催︓Kaggle Team■ 期間︓2019年6⽉28⽇〜8⽉14⽇(Private公開は8⽉29⽇)■ Data︓Stanford Dogs Dataset http://vision.stanford.edu/aditya86/ImageNetDogs/– カテゴリ数︓120– 画像数︓20,580– アノテーション︓クラスラベル、Bounding Boxes■ 提出物︓⽣成された64×64の⽝画像10,000枚■ Kernel Only https://www.kaggle.com/c/generative-dog-images/overview/kernels-requirements– 外部データ禁⽌– GPU(P100)1枚で9時間以内に学習を終わらせる必要がある4
評価指標 MiFID■ FID – Fréchet Inception Distance– GANの評価指標としてよく使われている指標のひとつhttps://arxiv.org/abs/1706.08500– 実画像分布と⽣成画像分布の近さをInceptionの中間層の特徴量を⽤いて測る– ⼩さいほど良い指標■ MiFID - Memorization-informed Fréchet Inception Distancehttps://www.kaggle.com/c/generative-dog-images/overview/evaluation– FIDに学習画像との類似度が⾼すぎる場合のペナルティを設けたもの(APPENDIX A)– 学習画像そのものを直接的(画像処理)および間接的(モデルに暗記させる)に提出する⽅法を罰する⽬的5
評価パイプラインhttps://www.kaggle.com/c/generative-dog-images/overview/evaluation■ Public Score– 学習データとInceptionモデルでスコアを計算– Inceptionモデルは公開されていたためローカルでも計算できた■ Private Score– 未知のデータと未知のモデルでスコアを計算6
結果 Private 2nd7
⽣成イッヌ8
2ND PLACE SOLUTION9
はじめに■ Final Submitted Kernels (やってることは⼤体⼀緒)– Private 2nd submission (version 1)https://www.kaggle.com/yukia18/sub-rals-biggan-with-auxiliary-classifier– Anotherhttps://www.kaggle.com/yukia18/sub-rals-ac-biggan-with-minibatchstddev■ Discussion Post– https://www.kaggle.com/c/generative-dog-images/discussion/104211■ ここで紹介する⼿法は、あくまでKernelの制約下でGANを学習する話であり、もっとリッチなリソースだと話が全然変わるはず■ 同じ⼿法でも⼈によって効いたり効かなかったりするhttps://www.kaggle.com/c/generative-dog-images/discussion10
前処理①■ Bounding Boxを⽤い⽝部分のみをクロップ■ Bounding Boxを⻑辺の⻑さを維持したまま正⽅形に整形– そのまま使うとイッヌが潰れたり⾒切れたりする■ 構造の変化・情報の⽋如11crop resize, random cropcropBounding Boxの整形
前処理②■ 画像をクロップし64×64にリサイズ– cv2.INTER_AREAを使⽤■ Augmentation– HorizontalFlip(p=0.5)のみ■ 画像を[-1,1]の範囲に正規化12
モデリング■ GPU1枚9時間に抑える必要があったため⼤きなモデルは動かせない■ LSGAN[1]にBigGAN[2]の要素を少しずつ⾜していった– Conditional Batch Normalization (G), Projection (D), Shared Embedding (G),Hierarchical Latent Noise (G), Non-local Block (G, D)を加えLocal FID 37~– 通常のConvolution層をResidual Block (G, D)に変更しLocal FID 27~■ Auxiliary Classifier[3] (D)を追加しLocal FID 15~– (Adversarial Loss) + (0.1 × Cross Entropy Loss)– 重み係数がかなり⼤事で1.0~0.2では崩壊■ Spectral Normalization (G, D), Orthogonal Initialization (G, D)– 学習画像との類似度を下げるのに役⽴った13
Generator概要図1×1 ConvUpsampleCBN3×3 ConvReLUCBN3×3 ConvReLUUpsample", ResBlock Up 512ResBlock Up 256ResBlock Up 128ResBlock Up 64Non-Local Block 128Linear 4*4*512BN, ReLU, 3×3 Conv 3TanhSplit [20]*5 Embedding 32 ∗ 4)14ResBlock Up(Upsample: Nearext Neighbor)Generator(SN except Embedding)
Discriminator概要図1×1 ConvAvgPool3×3 ConvReLU3×3 ConvReLUAvgPoolFC 1ResBlock Down 64Non-Local BlockResBlock Down 128ResBlock Down 256ResBlock Down 512ReLU, Global Sum Pooling Embedding 512ℎFC |C|15ResBlock Down Discriminator
学習■ 実画像に微⼩なランダムノイズを加える– (1/128) × Uniform(0,1)– この処理の有無で学習安定性が段違い■ Adversarial Loss: RaLS[4] (Relativistic average Least Square)■ Iteration数: 50,000 (Kernelの制限ギリギリ)■ その他パラメータはモデルに変更を加えるたび僅かに調整– Batch size: 64– Optimizer: Adam■ Learning rate: Generator = 2e-4, Discriminator = 8e-4■ beta 1 = 0.0, beta 2 = 0.999– Updates: G:D = 1:116
画像⽣成■ 評価⽤のGenerator– 学習中のGeneratorの重みのExponential Moving Averageで作成■ momentum=0.999– 結果が安定、FIDを~5程下げる■ Truncation Trick– 閾値を2.0に設定– ⽣成画像の質に貢献(したように⾒える)– 極端に低い閾値でない限りスコアにはあまり寄与しなかった17
おわりに18
お気に⼊りの⼀枚Thank you for watching !19
Reference20■ [1] LSGAN https://arxiv.org/abs/1611.04076■ [2] BigGAN https://arxiv.org/abs/1809.11096■ [3] Auxiliary Classifer https://arxiv.org/abs/1610.09585■ [4] RaLS https://arxiv.org/abs/1807.00734■ フリー素材– https://unsplash.com/photos/IPheOySCW7A– https://unsplash.com/photos/HQkKWPuXGfw
APPENDIX
Appendix A. Detail of MiFID■ Notation– 番⽬の実画像のInceptionの中間層の特徴量を34– 番⽬の⽣成画像のInceptionの中間層の特徴量を67■ 実画像と⽣成画像のコサイン類似度を計算– 47 = 1 − cos 34, 67■ 最⼩コサイン距離の平均を計算– = ?@∑4min747■ 最⼩コサイン距離がある閾値の場合FIDにペナルティを課す– DE3 = F, if < 1, otherwise– = Q ?RSTU22
Appendix B. Not Workings■ 前処理– cv2.INTER_LINEARを使った画像リサイズ– RandomResizedCrop 90%~100% proba=1.0– RandomRotate degree=Uniform(-5,5) proba=0.3■ モデリング– StyleGAN, PGGAN … Kernelの制約下では扱いが難しい– Minibatch stddev– Bilinear Upsampling in ResBlock Up■ 学習– Self Supervision ... 画像を回転(0, 90, 180, 270)させ回転⾓の分類– Hinge Loss … 時間内に収束せず– Deeper Models23
Appendix C. Some Insights■ ResBlockのReLUをLeakyReLU(0.2)とかに変えても効果なし︖■ Spectral Normalizationありなしでパラメータ設定が結構変わる■ 効いたり効かなかったりしたやつ– Learning Rate Scheduling (Cosine Annealing, Linear Decay)– Base channel size 64 -> 96 … 元が重いモデルは計算時間が⾜りない– Label smoothing24SNなし SNあり重み初期化 0,0.002 Orthogonal学習率(G:D) 2e-4:2e-4 2e-4:(4e-4~8e-4)Adam beta 1 0.5 0.0