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

鳥蛙コンペ反省会資料

2c68dc672293cc3f8a7a57d3af86f15b?s=47 Hidehisa Arai
February 27, 2021

 鳥蛙コンペ反省会資料

2020/11/18 ~ 2021/2/17にかけてKaggleで行われたRainforest Connection Species Audio Detection Challengeの16位解法と上位の解法まとめです。

2c68dc672293cc3f8a7a57d3af86f15b?s=128

Hidehisa Arai

February 27, 2021
Tweet

Transcript

  1. 🐤🐸コンペ 16位解法+α チーム『かえる&Hiraiwa&修論』
 kaerururu, Taku Hiraiwa, Y.Nakama, Hidehisa Arai

  2. チームメンバー
 修論
 Hidehisa Arai Y.Nakama kaerururu Taku Hiraiwa • Triple

    Kaggle Master • 音データの扱いが得意 
 • 修論終わって21新卒になれそう 
 • Contributor → Expert • 元生物実験屋さん
 • 30歳新卒というパワーワードを ひっさげて現職場に入社 
 • Competitions GM • 次は Notebooks GM が目標
 • 修論終わって21新卒になれそう 
 • Competitions Master • 修論書いたことない 
 • コキーコヤスガエル 絶対に許さない 
 2
  3. Table of Contents コンペ概要
 解法
 他のチームの解法総括
 まとめ
 3

  4. コンペ概要
 解法
 他のチームの解法総括 まとめ コンペ概要
 • 課題設定
 • 難しいポイント
 4

  5. コンペ概要 - 課題設定
 学習データは部分的にTPとFPの詳細なアノテーションあり、テスト時はクリップごとのマルチラベル予測
 train_tp: 学習データの一部につけられた「正解」
 train_fp: ホスト側のアルゴリズムで予測されたが、後に 人が確認して誤りとされた、「Not presentが保証された

    ラベル」
 ラベルは時間帯・周波数 帯の情報も持つ
 ラベルは完全ではないこ ともあり、不十分
 予測対象は24種の 🐤/🐸の種族ID
 5
  6. コンペ概要 - 難しいポイント
 ラベルの不完全さがさまざまな問題を引き起こす
 PU Learningの設定
 ラベルはこれだけ
 ラベルがついていても良さそうなの にない部分がたくさん! 


    工夫しないと決定境界がいいところに引かれないよ! 
 Validationが機能しない 
 Prior Probability Shift 
 ラベルが不十分なためテストと同じ評価法は不可能😢
 CVとLBが全く連動しない・・・🥺
 
 例) CV: 0.89830 (10sec chunk) → pub LB: 0.83648
 CV: 0.88284 (10sec chunk) → pub LB: 0.85181
 CV: 0.88276 (10sec chunk) → pub LB: 0.86812
 ラベルの本来の出現頻度に関わらず与えられた正解ラベルはおよそ 50程度に揃えられているため、予測の確率値には偏りが生じる
 Trainのラベル分布 Testのラベル分布 6
  7. コンペ概要
 解法
 他のチームの解法総括
 まとめ
 解法
 • 画像分類アプローチ
 • SEDアプローチ
 •

    アンサンブル
 7
  8. クロップに利 用
 解法 - 画像分類アプローチ
 Label as positive { “s0”:

    [211, 237], “s1”: [178, 207], ... } 1. 周波数帯の辞書作成 
 Label as negative Train TP/FPのみを信頼し、明確にアノテーションがある部分だけを切り抜いて画像分類
 Augmentations * PitchShift * Gain * AddGaussianNoise 2. TP/FPのラベルの周波数帯を6秒分切り抜く 
 3. 画像サイズを揃える 
 320x320, 456x456など
 4. EfficientNetを学習 
 Configurations models: tf_efficientnet_b<0-5>_ns loss: BCEFocalLoss Optimizer: AdamW Scheduler: Linear Warmup Epochs: 60 KFold: MultilabelStratifiedKFold x 5 Checkpointing: Monitor F1 score 5. 6秒ずつ時間をずらしながら24種分の周波数帯を切り抜く 
 学習時
 推論時
 ・・・
 6. 画像サイズを揃える 
 7. 学習したモデルで推論 
 クロップに利 用
 320x320, 456x456など
 Single model Scores Public LB: 0.92x ~ 0.935 Private LB: 0.92x ~ 0.931 8 ・・・ ・・・ ・・・ ・・・ ・・・ ・・・ ・・・ ・・・ ・・・ ・・・ 6秒ごとの予測(24種) 
 種ごとにmax を取る

  9. 解法 - SEDアプローチ
 SEDで色々試したがシングルモデルではPublic LB0.9の壁を崩せず
 9 1. TPラベルのある周りを10秒分切り抜く 
 2.

    ラベルはWeak/Strongで用意 
 Strong Weak 3. PANNsのHeadをEfficientNet, ResNeStなどにつける 
 4. 学習/推論は通常 
 Configurations models: tf_efficientnet_b<0,3>_ns, ResNeST loss: BCEFocalLoss Optimizer: SAM Scheduler: CosineAnnealing(T_max=10) Epochs: 55 KFold: StratifiedKFold x 5 Checkpointing: Monitor LWLRAP Weak/Strong labelで学習
 Single model Scores Public LB: 0.82 ~ 0.88 Private LB: 0.84 ~ 0.88 Augmentations * PitchShift * VolumeControl * PinkNoiseSNR
  10. 解法 - アンサンブル
 10 画像分類モデルはスタッキングで0.942、SEDは0.902、両方合わせて0.944
 EfficientNetB0 EfficientNetB1 EfficientNetB2 EfficientNetB3 EfficientNetB4

    EfficientNetB5 画像サイズ
 244 x 244 320 x 320 456 x 456 MLP Public LB: 0.942 Private LB: 0.940 画像分類モデル
 SEDモデル
 EfficientNetB0 EfficientNetB3 ResNeSt50 ・・・
 Public LB: 0.901 Private LB: 0.911 全11モデル
 Rank Average
 重みはPublic LBスコア 
 Public LB: 0.945 Private LB: 0.946 MLPによるスタッキング 
 ※入力はOOFではなく各画像パッチに対す る学習済みモデルの予測 
 Rank Average
 重みは手動で決定

  11. コンペ概要
 解法
 他のチームの解法総括
 まとめ
 他のチームの解法 総括
 • 不完全なラベル対策
 • 事前確率の調整


    • Validation
 11
  12. 他のチームの解法総括 - 不完全なラベル対策
 不完全なラベルを補う/ラベルがついていない部分を負例として扱わないようにするアプローチがあった
 チーム\手法
 Loss Masking Masked Input Hand

    Labeling Pseudo Labeling 1st Watercooled ✔ ❌ ✔ ✔ 2nd Selim Seferbekov ✔? ✔ ❌ ✔ 3rd SidChin ❌ ✔? ✔ ✔ 4th Hot Pursuit ❌ ❌ ❌ ✔ 5th birdcall revenge ✔ ❌ ❌ ✔ 6th 🐼Tropic Thunder🐼 ✔? ✔ ❌ ✔ 7th Beluga & Peter ❌ ❌ ✔ ✔ 8th SHINO ❌ ❌ ✔ ✔(Not worked) 9th Chris Deotte ✔ ❌ ❌? ❌? 10th RNA ✔ ❌ ❌ ✔ 11th CPMP ❌ ✔ ❌ ✔(Not worked) 13th Ryan Epp ❌ ❌ ❌ ✔(Mean Teacher) 12
  13. 他のチームの解法総括 - 事前確率の調整
 13 モデルの出力値を修正することでスコアアップを目指せた
 1st place 9th place クラス3を1.5倍というと聞こえは悪いがSmoothingの一種といえばわからなくもない?


    4th place Public LBをProbingしてテストに含まれるデータの分布を把握し、出力値 のスケーリングを行った
 テストのラベル分布が全く違うような気がしたのでクラス3とクラス18の出 力値は定数倍して確率をあげたらスコアが上がった
 左のような変換をしてモデルの出力値に定数 倍をすると大きくスコアが伸びた

  14. 他のチームの解法総括 - Validation
 1st place 色々試したけどCVとLBは相関し なかった。Public LBを頼りに考え るしかなかった
 2nd

    place CVとLBは相関しなかった。 Checkpointingをせず最終エポック の重みを使った
 上位の多くがTrust Public LBをしていた
 3rd place 手作業でラベルづけしたデータ セットを使ったらCVとLBがちゃん と連動した
 4th place コンペの最終盤までLocal CVは安 定せず、ほぼPublic LBに頼ってい た
 8th place Public LBを信頼した 
 11th place sample-wise ROC-AUCを使った。 Public LBとの相関は弱かったが サブせずに手法の良さを測るの には役立った
 14
  15. コンペ概要
 解法
 他のチームの解法総括
 まとめ
 まとめ
 
 15

  16. まとめ
 16 不完全なラベルが与えられていたため
 1. 決定境界が負例側に有利に引かれるようになってしまう
 2. Validationが難しい
 3. 事前確率シフト(Target Shift)というドメインシフトの一種が起きる


    課題
 • 入力をラベルが与えられている部分に制限 したモデルを学習
 • Validationはほぼ完全にTrust LB
 • SEDモデルは弱かったがアンサンブルで若 干効果を発揮
 解法
 • Lossのマスキング/入力のマスキングで信 頼できない情報を学習に用いない工夫
 • Pseudo LabelingやMean Teacherなどの Semi-Supervisedなやり方やハンドラベリン グでラベルの不足を補う
 • モデルの出力をいい感じに補正することで 事前分布を考慮する
 勝利の鍵
 不完全な情報にどう接するべきかが問われるコンペだった
 →情報を補って完全にする and/or 信頼できない情報は見ないことにする