Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Kaggleのたんぱく質コンペで銅メダルとった話 / Get Bronze medal on ...

ymicky06
April 03, 2022

Kaggleのたんぱく質コンペで銅メダルとった話 / Get Bronze medal on Kaggle Competition

ymicky06

April 03, 2022
Tweet

More Decks by ymicky06

Other Decks in Technology

Transcript

  1. 概要 • 評価指標 ◦ macro F1 score ▪ 用は各クラスのF値の平均 •

    データ ◦ train: 31072枚(28GB), test: 11702枚(9.3GB) ◦ size 512x512, 4 channel ◦ 任意で使っていいデータとして1024x1024の画像(約70GB)も提供されている ◦ external dataの使用OK
  2. やったこと1 • まずは公開されているカーネルを動かす ◦ InceptionV3, Xception (keras) ◦ green, blue,

    redの3channel ◦ size: 299 x 299 ◦ lossは単純なbinary cross entropy ◦ adam ◦ augmentation (random flip, random rotation, brightness, zoom) ◦ CNNの出力が0.5を超えたクラスを予測とする ◦ 初期学習率変えてみたりスケジューリングしてみたり earlystoppingしてみたり Public LB score: 0.397
  3. やったこと2 • このころからdiscussionでFocal Lossが使えるかもという話が出て Focal Lossをつかったカーネルが出始める • Focal Lossはもともと物体検知で提案されたクラスの不均衡にうまく対応するため に提案された損失関数

    • easy example による損失の影響 を小さくする →より難しいfocusすべきexample  が学習に寄与するようになる ただ、自分の実装がミスったのかパラメータがよく なかったのか、あまり精度向上に効果が なかった・・ https://www.slideshare.net/DeepLearningJP2016/dlfocal-loss-for-dense-object-detection https://qiita.com/agatan/items/53fe8d21f2147b0ac982
  4. やったこと3 • しきい値調整 ◦ validation scoreが最大になるように各クラスのしきい値をbruteforce search ◦ →上位ソリューションを見ると  macroF1はしきい値に敏感なのでうまいやり方がいろいろあったぽい

    • Test Time Augmentation (TTA) ◦ inference時にテスト画像を何倍(x 16)かにaugmentしてaugmentされた 各画像に対する予測値の平均をとる ◦ 簡単に精度が上がるのでやらない理由なし(実装も簡単) ◦ kaggleの画像コンペではほぼデフォルトで使用されてる模様? Public LB score: 0.397 → 0.420 Public LB score: 0.420 → 0.442
  5. やったこと5 • LR range test & Cyclical Learning rate ◦

    いい初期値を見つけていい感じに学習率を上下させながら学習させる ◦ このころからpytorchのラッパーであるfastaiを使い始める Cyclic Learning Rate(Image: https://arxiv.org/pdf/1506.01186.pdf) https://medium.com/@nachiket.tanksale/finding-good-learning-rate-and-the-one-cycle-policy-7159fe1db5d6 https://qiita.com/keng000/items/c50794fb7f029062bd0d
  6. fastaiはいいぞ • fastaiならLR range test も cyclical learning rate 簡単!!

    • TTAも1行!! from fastai import * learn = ConvLearner.pretrained(arch, data, precompute=True) lrf=learn.lr_find() lr=np.array([1e-4, 1e-3, 1e-2]) learn.fit(lr, 3, cycle_len=1, cycle_mult=2) log_preds,y = learn.TTA() https://github.com/fastai/fastai
  7. やったこと6 • dicussionで画像サイズが大きい方が精度がいいことを知る • やってみる ◦ Cyclical learning rate ◦

    size 512 x 512 ◦ Resnet34 Public LB score: 0.442 → 0.496 ここらへんでシルバー圏内にはいって、 「あれこれもしかしたらメダル取れんじゃね?」 と思い始める
  8. leakageの闇 • Human Protein Atlasの公式サイトからダウンロードできる external dataにテスト画像と類似している画像が複数あることが 画像のハッシュ値を調べることで発覚 • 当時leakを発見した人が圧倒的スコアを叩きだしていた

    ◦ その後、discussionで情報が公開される • 運営がleakしたテスト画像を計算対象外としてLB scoreを再計算したもの の影響は完全に消せなかった模様 Public LB score: 0.496 → 0.520
  9. コンペ終盤 • いろいろなモデル、size、lossの組み合わせでひたすら学習 • seed averaging • 最終的に以下のモデルを多数決でアンサンブル ◦ Resnet34,

    s256, focalloss ◦ Resnet34, s512, focalloss ◦ SE-Resnet50, s512, focalloss ◦ SE-ResNeXt50, s512, focalloss ◦ SE-ResNeXt50, s512, BCE Public LB score: 0.520 → 0.571
  10. 1st place solution • ensumbleなし&single foldで驚異のprivate LB 0.593 (2位ぶっちぎり) •

    randomly crop patches • Focal loss + Lovasz • Densenet121 • 謎のLR Scheduler • TTA • Post-processing ◦ threshold • Metric Learning ( ! ) https://www.kaggle.com/c/human-protein-atlas-image-classification/discussion/78109 http://researchers.lille.inria.fr/abellet/talks/metric_learning_tutorial_CIL.pdf “I tried all kinds of network structure according to the Multi-Label classification papers, the results were not improved instead of their beautiful structures and theory behind them.:)”
  11. 3rd place solution • Focal Loss • AutoAugmentもどき ◦ RLの代わりにrondom

    search • 各画像の平均分散で正規化 ◦ 公式とexternal dataの平均分散が大きく違ったため • remove duplicate images • TTA(x8) • 出力がLBと同じ分布になるようにしきい値調整 (LB probing) • ensumble ◦ resnet34: 512x512, 5 fold ensemble with TTA ◦ se_resnext50: 1024x1024, single fold with TTA ◦ inceptionv3: 1024x1024, single fold with TTA https://www.kaggle.com/c/human-protein-atlas-image-classification/discussion/77320 Private LB 0.570
  12. 4th place solution (一部) • GapNet-PL ◦ backboneをresnet34, SE blockを挟んだり改造

    ◦ weighted BCE & F1 loss ◦ cosine annealing • Dual Loss ResNet https://www.kaggle.com/c/human-protein-atlas-image-classification/discussion/77300 Private LB 0.567