Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Generative Dog Images
Search
hirune924
August 15, 2019
Research
2
1.5k
Generative Dog Images
kaggle Generative Dog Images competition Solutions
hirune924
August 15, 2019
Tweet
Share
Other Decks in Research
See All in Research
LLM based AI Agents Overview -What, Why, How-
masatoto
2
590
Weekly AI Agents News! 8月号 論文のアーカイブ
masatoto
1
160
「確率的なオウム」にできること、またそれがなぜできるのかについて
eumesy
PRO
7
3k
[依頼講演] 適応的実験計画法に基づく効率的無線システム設計
k_sato
0
100
さんかくのテスト.pdf
sankaku0724
0
270
KDD論文読み会2024: False Positive in A/B Tests
ryotoitoi
0
180
湯村研究室の紹介2024 / yumulab2024
yumulab
0
240
Physics of Language Models: Part 3.1, Knowledge Storage and Extraction
sosk
1
930
第60回名古屋CV・PRML勉強会:CVPR2024論文紹介(AM-RADIO)
naok615
0
240
文化が形作る音楽推薦の消費と、その逆
kuri8ive
0
110
20240725異文化融合研究セミナーiSeminar
tadook
0
150
The Fellowship of Trust in AI
tomzimmermann
0
130
Featured
See All Featured
Designing on Purpose - Digital PM Summit 2013
jponch
115
6.9k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
32
1.8k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Visualization
eitanlees
144
15k
Agile that works and the tools we love
rasmusluckow
327
21k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
41
2.1k
How To Stay Up To Date on Web Technology
chriscoyier
788
250k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
25
1.8k
Fontdeck: Realign not Redesign
paulrobertlloyd
81
5.2k
Making Projects Easy
brettharned
115
5.9k
10 Git Anti Patterns You Should be Aware of
lemiorhan
654
59k
The Invisible Side of Design
smashingmag
297
50k
Transcript
Generative Dog Images Experiment with creating puppy pics @hirune924
コンペ概要 • Kaggle初(世界初?)のGANコンペ • 主催:Kaggle • 期間:2019年6月28日~8月14日 • Data:Stanfordの公開している犬画像データセット •
20579枚の犬の画像+犬種と犬のBounding Boxのannotation • 提出物:GANによって生成された10000枚の64x64の犬画像 • Kernel Onlyコンペ • Submitの計算はすべてKernel上で行わなければならない • Kernel要件 • インターネット接続無し • 9時間以下の実行時間 • 13GBのRAM • 外部データの使用無し https://www.kaggle.com/c/generative-dog-images/overview
評価指標
MiFID • Inception Score(IS) • ImageNetで学習済みのInception Networkを用いた評価指標 • InceptionNetworkが識別しやすい→質が高い •
識別されるラベルのバリエーションが多い→多様 • FID • 現在GANの評価指標としてよく使用されているもの • ISでは実画像の分布が考慮されていないという欠点を改善するため、実画像と生成画像の分 布間の距離をFrechet距離によって測る • 小さいほど良い指標 • MiFID • FIDでは学習に使用した画像を暗記して、そのまま提出すると非常に良いスコアが得られて しまうため、実画像との距離平均が一定の閾値を下回る場合にペナルティを設定したもの
評価パイプライン • Public LBでは学習データと公開されたInceptionモ デルによってスコアが計算される • Private LBでは未知のデータと未知のモデルによっ てスコアが計算される https://www.kaggle.com/c/generative-dog-images/overview/evaluation
Solution紹介の前に… コンペ中のドラマを振り返る
コンペ初期 • Imitation Game Kernelの公開 • MiFIDの閾値を決定するための距離を簡単に騙せることが判明 • 画像を0.999:0.001の割合で混ぜ合わせることで簡単に20程度のスコアが出る •
さすがにこの方法はルール違反であったが、一時の快楽を味わいたい人たちがKernelを Fork&Submitし始める。早くもLB崩壊 • 純粋なGANを極めようとする集団と評価指標をうまくハックしようとする集団が生まれる https://www.kaggle.com/jazivxt/imitation-game
コンペ中期 • Dog Memorizer GAN kernelの公開 • Imitation Gameはさすがにルール違反だったが、モデルに画像を丸暗記させるなら合法で は?という発想
• GANは程度の違いはあれど学習画像を覚えているケースがあるし合法と違法の線引きが難 しい • 例えばCGANのクラス数を学習画像数と同じにすればそれはGANなのか?という問題 • 画像をクロップすることで評価指標をハック、そしてスコアは一桁台に… • これに対するKaggleの判断 この方法はグレーゾーンであり、現在それは許可されていると思う Kaggleの判断にがっかりする純粋GAN勢 完全に崩壊するLB https://www.kaggle.com/cdeotte/dog-memorizer-gan
コンペ後期 締め切りを5日延ばして14日にするわ、あとMemorizer GANは禁止な 提出物は全部コードチェックするからサブミットはKaggle運営とshare すること Kaggleの判断に大歓喜する純粋GAN勢 手のひら返しをくらったMemorizer GANを極めた勢 • コンペ終了(9日)まで一週間を切ったころ、それまで沈黙していたKaggle運営が動き出す
• なお禁止の基準を明確に定義すると必ずハックする人が現れるからか、禁止の基準についての 質問に対しては悉く沈黙
Solution
試したGAN一覧 • LSGAN • StyleGAN • Memorizer CGAN (Public LB
5位) • ACGAN • ACLSGAN • DRAGAN • WGAN-GP • SNGAN • SAGAN • Conditional SAGAN • VQ-VAE-2 • VAEでpretrain→LSGAN • Data Cleaning Methods • 手作業でアノテーション(犬の顔が引きで写っているか寄りで写っているか) • PCA→k-means • Segmentation→PCA→k-means • VGG16→PCA→k-means 色々と試したが、多すぎるので以降では最終サブミットしたGANを中心に解説する
Final Submission - architecture • モデル構造 • Upsampling→Convは上手く機能しなかったためConvTransposeを使用 • Spectral_normはスコアを56→46まで引き上げた
• 重いGANはkernelの制約下では上手く学習することが出来なかった • nzは128、nfeatsは64がベスト https://www.kaggle.com/hirune924/public-lb-38-92350-solution
Final Submission - how to train • 基本的にはLSGAN • Loss:
MSELoss • Optimizer: Adam(betas=(0.5, 0.999), weight_decay=1e-5) • Learning Rate • Generator: 0.0008 • Discriminator: 0.0002 • CosineAnnealingで減衰 • DataAugmentation • RandomResizedCrop(scale=(0.7, 1.0), ratio=(1., 1.))→RandomHorizontalFlip→Normalize • Gradient Penaltyは上手くいかなかった(lambdaなどのチューニングが足りなかったかも?) • LearningRateを通常より大きくすることでスコアが46→39まで向上 • 小細工は基本的に通用しない • 計算リソースが許すならハイパーパラメータチューニングはもっとするべきだったかも • Truncation trick(thresh=0.5)を使うとスコアが39→38まで向上 • Final best score: 38.92350 https://www.kaggle.com/hirune924/public-lb-38-92350-solution
Final Submission - result • DOGS https://www.kaggle.com/hirune924/public-lb-38-92350-solution
上手くいかなかった手法たち
結果と考察 • StyleGAN → kernel9時間で実行するには重すぎた。もっと削れるところはあったかも • ACGAN → 犬種ラベルを使ってもスコアを改善できなかった •
ACLSGAN → ACGANよりはスコアは良かったが… • DRAGAN → 学習失敗、犬が崩壊する • WGAN-GP → 学習はできたがスコアは少し悪くなった • SNGAN → PFNのChainer実装を試したがKernel上で動かせず…(Chainerのversion違い?) • SAGAN → 悪くはなかったがスコアの改善ならず • Conditional SAGAN → 犬種ラベルを使ってもスコアを改善できなかった • VQ-VAE-2 → 2段階目の学習が重すぎ • VAEでpretrain→LSGAN → pretrain意味なし、破壊的忘却? • Data Cleaning Methods • 手作業でアノテーション(犬の顔が引きで写っているか寄りで写っているか) → スコアの改善ならず。特定の写り方をしている画像だけを用いて学習すると生成画像は 綺麗になるが多様性を下げる結果になる。 • PCA→k-means → クラスタリングはまぁまぁ上手くできた。だが上に同じく… • 犬Segmentation→PCA→k-means → クラスタリングも機能せず • VGG16→PCA→k-means → クラスタリングも機能せず
上位Solutionは公開され次第 随時更新予定
Happy GAN Solution (score: 38.70295) • モデルアーキテクチャはシンプル • 入力データにわずかなノイズをのせている •
Learning RateはDG共に0.0005 • Real_labelは0.7 Fale labelは0.0(固定) • Loss: BCELoss, Optimizer: Adam • 750 epochでアーリーストッピング https://www.kaggle.com/leonshangguan/dcgan-data-cleaning-sub-v1?scriptVersionId=18470145
Happy GAN Solution (score: 38.70295) • DOGS https://www.kaggle.com/leonshangguan/dcgan-data-cleaning-sub-v1?scriptVersionId=18470145
Johannl Solution (score: 38.26191) • StyleGANを使用? • LearningRateはDG共に0.001 • lr_scheduler.ExponentialLR(gamma=0.99)
• 入力ノイズが512 • ラベルはノイズをのせて変動 • 段階的に解像度を上げていくような実装は見つけられなかった。解像度固定? • 250epoch!? https://www.kaggle.com/johannl/sn-dcgan-style?scriptVersionId=18780768
Johannl Solution (score: 38.26191) • DOGS https://www.kaggle.com/johannl/sn-dcgan-style?scriptVersionId=18780768
Theo Viel Solution (score: 30.33340) • Progressive GANをConditionalにしたものを使用 • Real
imageに変わったnormalizeを使用(2をかけて1を引く?) • bboxを上下左右に10px拡大して使用 • Generatorの学習を安定させるのにEMA Weights Decayを使用? • LossはHingeLossを使用 • Learning Rateはともに6e-3 • Latent dim は256 • Epochは[5, 10, 20, 40, 100]ごとに解像度を上げる、解像度は[4, 8, 16, 32, 64] • それぞれの犬種だけの生成画像を採点し、スコアの悪い犬種は除いて提出物を作ったがスコアは改善され なかった https://www.kaggle.com/theoviel/conditional-progan-30-public?scriptVersionId=18873238
• DOGS Theo Viel Solution (score: 30.33340) https://www.kaggle.com/theoviel/conditional-progan-30-public?scriptVersionId=18873238
yabae Solution (score: 15.81605) • BigGANベースのモデルを使用 • shared embedding of
dog breed labels • hierarchical latent noise • projection • auxiliary classifier (ACGAN) • RaLSのLossを使用 • Batchsizeは128 • LearningRateがG: 2e-4, D: 4e-4と他とは違った感じ? • Exponential Moving Average of generator weights(Generatorの学習安定用?) • 入力画像にuniform noiseをのせる • なんか複雑なことをしている割には実装がきれいな気がする https://www.kaggle.com/yukia18/sub-rals-ac-biggan-with-minibatchstddev?scriptVersionId=18828724 https://www.kaggle.com/c/generative-dog-images/discussion/104211
• DOGS https://www.kaggle.com/yukia18/sub-rals-ac-biggan-with-minibatchstddev?scriptVersionId=18828724 yabae Solution (score: 15.81605)
Dmitry Vorobiev Solution (score: 14.95516) • BigGANを使用(https://github.com/ajbrock/BigGAN-PyTorch) • Generatorの2倍のチャンネルを持つDiscriminatorを使用 •
多様性を維持しながら意味のある部分をできるだけ多く保持したData Augmentation • Bboxを上手く活用し、回転やズームを利用 • Paddingをとても工夫している • 生成した画像にノイズ除去を使用することで場合によってはMiFIDを10以上も改善 • 元のアーキテクチャに大きな変更は加えていないがAttentionの層に微調整を加えて軽量に • Truncation trickでは大きな改善はなかったが少しは良くなる • BigGAN-deepは上手くいかなかった • stochastic weight averaging (SWA)を使用(元のコードについているものを使用) https://www.kaggle.com/dvorobiev/doggies-biggan-sub-data-aug-3
• DOGS Dmitry Vorobiev Solution (score: 14.95516) https://www.kaggle.com/dvorobiev/doggies-biggan-sub-data-aug-3
おまけ Solution(Memorizer CGAN)
Memorizer CGAN • 一時期Kaggle運営はMemorizer GANを許可していたので、 ある意味Kaggleを信じてMemorizer GANを極めてみた。 • 基本的にはクロップのみでMiFIDの距離を騙すのがポイント(ブレンドはしない) •
元のMemorizer CGANではスコアが7.2ほど出ていたがクロップの方法が雑かった • 元のクロップ方法ではアス比が0.75以上の画像のクロップ領域が小さくなり、距離が小さくな りがちだった→画像のアス比に応じてクロップの方法を微調整 • ランダムシードサーチによって57という神シード値を見つける(score: 5.17518) • そして一時の快楽に… https://www.kaggle.com/hirune924/public-lb-5-17518-solution-memorizer-cgan https://www.kaggle.com/jesucristo/memorizer-cgan-for-dummies