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

鳥蛙コンペ反省会(birdcall revengeチーム)

5473f177bf5562e68645e1a6e0428f9c?s=47 Kyohei Uto
February 27, 2021

鳥蛙コンペ反省会(birdcall revengeチーム)

kaggle Rainforest Connection Species Audio Detection(https://www.kaggle.com/c/rfcx-species-audio-detection)

5473f177bf5562e68645e1a6e0428f9c?s=128

Kyohei Uto

February 27, 2021
Tweet

Transcript

  1. 鳥蛙コンぺ反省会 2021.02.27 birdcall revengeチーム (5th place solution)

  2. 自己紹介 きょうへい (twitter: @kuto_bopro) - Japanese Traditional Companyの入社1年目 - 普段の仕事は地理・都市データを使った研究開発

    - kaggle expert - birdcall (鳥コンペ)に参加(🥉104th)
  3. チームメンバー紹介 チーム名: birdcall revenge (鳥コンペのリベンジを誓ってつけた) コンペで失った HP(Husband Point) を回復してきます

  4. 結果 Public LB: 8th place Private LB: 5th place リベンジできました!!

  5. コンペ概要 熱帯雨林で録音された音声から24種の匿名の鳥・蛙の鳴き声を判別するコンペ - multi class & multi labelの分類タスク - タスクとしては鳥コンペと非常に似ている

    鳥コンペ 鳥蛙コンペ 評価指標 micro averaged F1-Score LWLRAP ラベル付け weak label(音声単位) strong label(時間単位) クラス数 264 24 予測 5s単位で予測 60s単位で予測 その他  nocall(鳴いていない箇所)も予測 FPデータが存在
  6. 主な課題 1. train/testでラベルの分布が異なる 2. missing label 3. FPデータの扱い

  7. 課題1. train/testでラベルの分布が異なる trainのアノテーション方法 class3 3である TP label FP label 3ではない

    Audio testのアノテーション方法 [3, 5, 23] Audio - trainには「アルゴリズムで検知された箇所のみラベルをつける」というバイアスが入っているので train/testのラベル分布が異なることが考えられる。 - testはデータ全体を隈なくチェックするので 1音声あたりのラベルが trainより多そう。 - これによりvalidationが非常に難しかった。 専門家 アルゴリズム 専門家
  8. 課題2. missing labels 実際には鳴いているがラベルのない箇所が存在 (maskしているのがラベリング箇所 ) missing labels label

  9. 課題2. missing labels trainデータの音声1132件のうち、1つの音声に異なる複数種のラベルがついている数はわずか 27件のみ CPMPのdiscussionでは1つの音声に平均して 4~5種の鳴き声が存在していることが示唆されていた。 このことからtrainデータには多くのmissing labelsが存在していることが考えられた。 1132件のtrainデータ(TP)

    複数種ラベルの音声 単一種ラベルの音声 27件 (2.4%)
  10. 課題3. FPデータの扱い True Positive(TP)データとFalse Positive(FP)データが与えられている trainのアノテーション方法 (再掲) class3 3である TP

    label FP label 3ではない Audio FPデータは「class3は鳴いていない」という情報のみなのでそのまま使うのは難しい しかしFPデータは、(1)間違われやすい音声が集まっている、 (2)数が多いのでうまく利用したい TP labelを含む音声数: 1132 FP labelのみの音声数: 3595 アルゴリズム 専門家
  11. 課題への対策 pseudo labeling (for train data) mask loss FPデータの扱い missing

    labels train/testの ラベル分布 課題 対策 過学習対策として3 stageで学習
  12. stage1 CV: 0.81 / Public LB: 0.84 - EfficientNet-b2をベースとしたSEDモデル -

    TPデータのみ使用 - 5fold MultilabelStratifiedKFold - ラベルのついた箇所が必ず入るように 10s random clip - 10s clip単位で学習・予測 - 30 epoch - LSEP Loss (rankに基づく損失関数 FAT2019 3rd solution) - augmentationなし 目的: stage2,3で用いるbaselineモデルを作成すること   10s random clip label=[3]
  13. stage2 CV: 0.734 / Public LB: 0.896 - stage1とほぼ同じ構成 -

    stage1のモデルをpretrained modelとしてfine-tuning - 5 epoch - TP/FPデータを使用 - Focal Lossベースのmask loss 目的: stage1モデルを強化し、pseudo labelを作成すること   stage1 model stage2 model pseudo label fine tuning
  14. 1: TPラベル(正例) 0: 曖昧なラベル(正例が混じっている ) -1: FPラベル(負例) mask loss trainデータにはmissing

    labelがあるため負例ラベル (0)にも実際には正例(1)が含まれる ex) 5クラスの場合 label = [ 0, 1, 0, 0, -1] pred = [ 0.2, 0.8, 0.4, 0.1, 0.3] TPラベルは1として学習 FPラベルは0として学習 0のところはmaskする(lossを計算しない) 以下の3つにラベルを分解 効果 - 曖昧なラベルをmaskして学習しないことで隠れた正例データを負例と学習しなくて済む - FPデータを0ラベルとは別で扱うことで学習に使用することができる - 最初はstage1で導入したが学習効率が悪くスコアも伸びなかったので、 stage2として少ないepochで学習し たところLB scoreが+0.05
  15. trainデータに対するpseudo labeling TPデータ TPデータの場合 stage2 model oof (leak対策) 1: pred

    > 0.5 0: pred < 0.5 FPデータの場合 TPデータ stage2 model mean concat 1: pred > 0.5 0: pred < 0.5 5fold modelの平均 1 audioに対して8s単位でラベル 付けしてpseudo labelを作成 元のTP/FPラベルに追加する pseudo label (8s weak label) pseudo label (8s weak label)
  16. stage3 CV: 0.954 / Public LB: 0.950 - stage2とほぼ同じ構成 -

    stage1のモデルをpretrained modelとしてfine-tuning - 5 epoch - TP/FPデータを使用 - pseudo labelを追加 - Focal Lossベースのmask loss 目的: pseudo labelを追加した最終的なモデル  stage1 model stage3 model pseudo label fine tuning original label
  17. ensemble pseudo labelのアンサンブル 最終結果のアンサンブル Public LB: 0.963 / Private LB:

    0.969 ResNet18 ViT WaveNet pseudo label pseudo label pseudo label pseudo label ResNet18 ViT WaveNet EfficientNet -b2 ResNeSt50 ensemble pred stacking pred final sub stage3で使用 pseudo labelを多様なモデルでアンサンブルしロバスト性を向上 weighted mean weighted mean weighted mean
  18. その他の取り組み 効いたこと(全て3rd stage) - last layer mixup - ラベルの詳細化 -

    0ラベルを0.45にsmoothing - cycle pseudo labeling (微増) 効かなかったこと - testに対するpseudo labeling - mixup - denoise model pseudo label pseudo labelをつけて学習したモデルで再度 pseudo labelを作成し学習というサイクルを繰り返す cycle pseudo labeling (勝手に名付けました) - 2: pseudo True label (pred > 0.5) - 1: original True label (TP) - 0: 曖昧なラベル - -1: original False label (FP) - -2: pseudo False label(pred < 0.01) ラベルの詳細化:ラベルをpseudoとoriginal別で扱い、 pseudoはlossの重みを小さくする(pseudoは×0.5)
  19. その他工夫した点 - CV戦略 複数指標をモニタリングしたものの CVとLBの相関はほとんど取れなかった。そのため基本 Trust LB - pseudoあり/なしLWLRAP -

    各クラスのAUC - recall(thr=0.5) - precision(thr=0.5) - リークの見直し - 終了10日前(LB:0.95)くらいはcycle pseudo labelingのようにstage数を増やすことでpseudo label の精度を上げようとしていたが伸び悩んでいた。 - Ahmetとチームマージ後、「リークを見直して stage1からやり直し、アンサンブルによりロバストな pseudo labelを作ろう」と提案されその方針に切り替えた。 - その結果、より良いpseudo labelができスコアも伸びた。二人ではできない判断だった。 Ahmetに感 謝。
  20. LBの推移 参考: https://www.kaggle.com/wakamezake/public-private-lb-score-progress leakage check stacking ensemble mask loss in

    stage2 pseudo labeling in stage3 weighted loss last layer mixup label smoothing team merge その1 team merge その2
  21. 参考 - kaggle discussion (5th place solution) https://www.kaggle.com/c/rfcx-species-audio-detection/discussion/220432 - 鳥蛙コンペのふりかえりブログ

    (私)https://kutohonn.hatenablog.com/entry/2021/02/18/224002 - 鳥蛙コンペのふりかえりブログ(戸田さん)https://www.ai-shift.co.jp/techblog/1657