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

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

Kyohei Uto
February 27, 2021

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

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

Kyohei Uto

February 27, 2021
Tweet

More Decks by Kyohei Uto

Other Decks in Science

Transcript

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

    View Slide

  2. 自己紹介
    きょうへい (twitter: @kuto_bopro)
    - Japanese Traditional Companyの入社1年目
    - 普段の仕事は地理・都市データを使った研究開発
    - kaggle expert
    - birdcall (鳥コンペ)に参加(🥉104th)

    View Slide

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

    View Slide

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

    View Slide

  5. コンペ概要
    熱帯雨林で録音された音声から24種の匿名の鳥・蛙の鳴き声を判別するコンペ
    - multi class & multi labelの分類タスク
    - タスクとしては鳥コンペと非常に似ている
    鳥コンペ 鳥蛙コンペ
    評価指標 micro averaged F1-Score LWLRAP
    ラベル付け weak label(音声単位) strong label(時間単位)
    クラス数 264 24
    予測 5s単位で予測 60s単位で予測
    その他  nocall(鳴いていない箇所)も予測 FPデータが存在

    View Slide

  6. 主な課題
    1. train/testでラベルの分布が異なる
    2. missing label
    3. FPデータの扱い

    View Slide

  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が非常に難しかった。
    専門家
    アルゴリズム 専門家

    View Slide

  8. 課題2. missing labels
    実際には鳴いているがラベルのない箇所が存在 (maskしているのがラベリング箇所 )
    missing labels
    label

    View Slide

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

    View Slide

  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
    アルゴリズム 専門家

    View Slide

  11. 課題への対策
    pseudo labeling
    (for train data)
    mask loss
    FPデータの扱い
    missing labels
    train/testの
    ラベル分布
    課題 対策
    過学習対策として3
    stageで学習

    View Slide

  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]

    View Slide

  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

    View Slide

  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

    View Slide

  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)

    View Slide

  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

    View Slide

  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

    View Slide

  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)

    View Slide

  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に感
    謝。

    View Slide

  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

    View Slide

  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

    View Slide