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

Kaggle鳥コンペ反省会 / Retrospective Birt Competition ...

ymicky06
April 03, 2022

Kaggle鳥コンペ反省会 / Retrospective Birt Competition on Kaggle

ymicky06

April 03, 2022
Tweet

More Decks by ymicky06

Other Decks in Technology

Transcript

  1. 自己紹介 • だれ? ◦ Twitter:ymicky06 ◦ Kaggle:ymicky • 某通信会社で機械学習エンジニア •

    Kaggle歴 ◦ 糖尿病コンペ🥉 ◦ タンパク質コンペ🥉 ◦ 鳥コンペ🥉←New! • 基本ソロ参加
  2. コンペ初期 • 終了1ヶ月前から手をつけ始める • とりあえず公開されていたBaselineカーネルをもとに学習から推論までの 一連のパイプラインを作ろうとした • submission.csvの作成難しすぎ問題 ◦ サンプルのtest

    dataめっちゃ少ない ◦ 本番のtest dataがnotebook上に現れない ▪ submit中にしか出現しないという仕様 • 上記に一週間近く溶かして残り約3週間
  3. コンペ初期 • 信頼できるLocal CVを作ろうとした • trainとtestの形式が違いすぎるため断念 ◦ trainはシングルラベル、testはマルチラベル ◦ trainはmp3ごとにラベル付け、testは5秒ごとにラベル付け

    ◦ 推論時はnocallも考慮する必要がある “aldfly” label test (site1, site2) train “aldfly” “nocall” “nocall” “aldfly” “aldfly”, “hamfly”
  4. コンペ中盤〜終盤 • tawaraさんとAraiさんのnotebookを参考にいろいろ改造する • 入力 ◦ 音声波形をLogmelspecに変換した2次元画像 ◦ チャンネル数1 •

    モデル ◦ EfficientNetB2〜B5を試してもっともval Loss, LB scoreが良かったB4を採用 • 波形に対するDataAugmentation ◦ 公開されていたものからいくつかピックアップ ◦ かなり効果あり ◦ TimeShifting, SpeedTuning ◦ AddGaussianNoise, PitchShift ◦ Gain, PolarityInversion, StretchAudio
  5. コンペ中盤〜終盤 • 画像サイズを増やす ◦ 効果あり ◦ 224, 320, 512 •

    secondary_labelを使った学習 ◦ Primary labelだけでなくsecondary labelも含めて学習 ◦ これは結構効果があった • Training設定 ◦ StratifiedKfold 5CV ◦ BCEWithLogitsLoss ◦ Adam ◦ CosineAnnealingLR ◦ epoch50 [0, 0, 1, 0, 0.5, 0.5, 0, ...] primary secondary one hot label
  6. ensemble • 最終的に以下の2種類を提出 • EfficientNetB4 + image size512の5fold平均 ◦ public:

    0.567, private 0.594 • EfficientNetB4 + image size320 + secondary labelの5fold平均 ◦ public: 0.566, private 0.598
  7. うまくいかなかったこと • external data ◦ 効果がありという人が多かったが自分はなぜか効果があまりなかった ◦ val lossは下がるがLBスコアが下がる ◦

    (自分のresampleの前処理がバグっていた可能性。。) • mixup ◦ Logmelspec上でmixup ◦ これも上位の人はみんな使っているが自分は効果なし ◦ (なにかコツがあるのか?) • denoise処理 ◦ 学習、推論中に音声波形に対してノイズ削減処理 ◦ あまり効果がなく、推論時間も大幅に増える不採用
  8. 反省・所感 • もっと激しいDataAugmentationをかければよかった ◦ 上位陣はかなりアグレッシブにノイズをかけたりしていた ◦ trainとtestのSNRが結構違っていた • 学習データから如何に鳴き声が現れている部分をクロップするかが重要? ◦

    上位陣はだいたいがんばって鳴き声ぽい部分をクロップする処理を入れていた ◦ SEDの場合もperiodを長くするなど • 自分の耳でデータを確認&EDAすることの重要性 • 音声データの扱いの勉強になった
  9. 1st solution • based on sound event detection (SED) model

    • no external data • data augmentation ◦ pink noise, gaussian noise, gaussian snr, gain (volume adjustment) • model ◦ sedでバックボーンをdensenet121 ◦ attentionのclampをtanhに • training ◦ mixup, specAugmetation ◦ trainining on 30 second clip ◦ bce loss & secondary label • threshold ◦ framewise_output, clipwise_outputと もに0.3 ◦ framewise, clipwiseともに現れた鳥を 予測に ◦ specAugした10TTA • CV vs LB ◦ local CVできなかったのでLBを参考に した • ensemble ◦ LB scoreを参考に13modelの4vote https://www.kaggle.com/c/birdsong-recognition/discussion/183208
  10. 3rd solution • aggressiveなdata augmetation ◦ gaussian noise with a

    sound to noise ratio up to 0.5 ◦ background noise ▪ 鳴き声が含まれていない背景音をミックス ◦ modified mixup ▪ 通常のmixupと変えてラベルをそのままの強さで ◦ random clopではなくout-of-foldで正解予測確率が高い部分をクリップ • model ◦ 4 model ensemble ◦ resnext, resnest and external data • 後処理 ◦ しきい値0.5 ◦ 前後の窓のscoreも集約して確率の上位を答えとする ▪ site 1,2は上位3つ ▪ site3は音の長さによって https://www.kaggle.com/c/birdsong-recognition/discussion/183199
  11. 4th solution • use external data • 音の強さで鳴き声が現れていそうな部分をクロップ • feature

    extraction ◦ パラメータを変えたlogmelの3チャンネル ◦ secondary labels • model ◦ efficientnetB3~B5 ◦ multi-sample dropout • training ◦ data aug ▪ gain, background noise, low frequency cutoff ◦ mixup • 4 model ensemble https://www.kaggle.com/c/birdsong-recognition/discussion/183339
  12. 5th solution • sed model • data aug ◦ backgrounds

    (all from external data thread) ◦ pink and brown noise ◦ pitch shift ◦ low pass filtering ◦ spec augments (time and frequency masking) • energy base crop & label smoothing (secondary label) • longer input (10~30sec) https://www.kaggle.com/c/birdsong-recognition/discussion/183300