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
Leveraging LLMs for Unsupervised Dense Retriever Ranking (SIGIR 2024)
kampersanda
2
250
Weekly AI Agents News! 9月号 プロダクト/ニュースのアーカイブ
masatoto
2
170
論文読み会 KDD2024 | Relevance meets Diversity: A User-Centric Framework for Knowledge Exploration through Recommendations
cocomoff
0
110
尺度開発における質的研究アプローチ(自主企画シンポジウム7:認知行動療法における尺度開発のこれから)
litalicolab
0
360
移動ビッグデータに基づく地理情報の埋め込みベクトル化
tam1110
0
160
メールからの名刺情報抽出におけるLLM活用 / Use of LLM in extracting business card information from e-mails
sansan_randd
2
270
ニューラルネットワークの損失地形
joisino
PRO
36
18k
Weekly AI Agents News! 11月号 論文のアーカイブ
masatoto
0
180
Weekly AI Agents News!
masatoto
26
35k
marukotenant01/tenant-20240826
marketing2024
0
520
精度を無視しない推薦多様化の評価指標
kuri8ive
1
290
さんかくのテスト.pdf
sankaku0724
0
530
Featured
See All Featured
Speed Design
sergeychernyshev
25
670
Git: the NoSQL Database
bkeepers
PRO
427
64k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
28
900
How to train your dragon (web standard)
notwaldorf
88
5.7k
The Cult of Friendly URLs
andyhume
78
6.1k
Put a Button on it: Removing Barriers to Going Fast.
kastner
59
3.6k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
28
2.1k
Being A Developer After 40
akosma
87
590k
Navigating Team Friction
lara
183
15k
Into the Great Unknown - MozCon
thekraken
33
1.5k
Bootstrapping a Software Product
garrettdimon
PRO
305
110k
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