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

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

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for Kyohei Uto Kyohei Uto
February 27, 2021

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

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

Avatar for Kyohei Uto

Kyohei Uto

February 27, 2021
Tweet

More Decks by Kyohei Uto

Other Decks in Science

Transcript

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

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

    Audio testのアノテーション方法 [3, 5, 23] Audio - trainには「アルゴリズムで検知された箇所のみラベルをつける」というバイアスが入っているので train/testのラベル分布が異なることが考えられる。 - testはデータ全体を隈なくチェックするので 1音声あたりのラベルが trainより多そう。 - これによりvalidationが非常に難しかった。 専門家 アルゴリズム 専門家
  3. 課題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 アルゴリズム 専門家
  4. 課題への対策 pseudo labeling (for train data) mask loss FPデータの扱い missing

    labels train/testの ラベル分布 課題 対策 過学習対策として3 stageで学習
  5. 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]
  6. 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
  7. 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
  8. 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)
  9. 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
  10. 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
  11. その他の取り組み 効いたこと(全て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)
  12. その他工夫した点 - 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に感 謝。
  13. 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
  14. 参考 - 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