Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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]

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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)

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

その他の取り組み 効いたこと(全て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)

Slide 19

Slide 19 text

その他工夫した点 - 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に感 謝。

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

参考 - 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