Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
鳥コンペ反省会資料
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Hidehisa Arai
September 26, 2020
Technology
6.6k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
鳥コンペ反省会資料
6位の解法です。
Hidehisa Arai
September 26, 2020
More Decks by Hidehisa Arai
See All by Hidehisa Arai
世界モデルにおける分布外データ対応の方法論
koukyo1994
7
2.2k
生成AIの二大潮流と自動運転
koukyo1994
22
25k
ICML2021論文読み会資料
koukyo1994
2
1.7k
【2019-06-19】アルゴリズム勉強会 - 最小全域木
koukyo1994
0
300
Kaggle昔?話
koukyo1994
2
2.6k
コンペ中のコード、どうしてる?
koukyo1994
3
2.3k
変数間の関係を捉えたいあなたへ
koukyo1994
3
1.8k
脱! Deepでポン🎶ハイパラチューニング芸人を卒業するために
koukyo1994
7
4.9k
鳥蛙コンペ反省会資料
koukyo1994
3
1.5k
Other Decks in Technology
See All in Technology
Terraform共通モジュールをチーム横断で“変えられる”運用へ ― リリースと適用の分離
kekke_n
0
930
しぶいSRE: サーバから見えない障害にどう向き合うか。ラストワンマイルのデバッグ実践 / Shibui SRE
kanny
11
3.8k
4人目のSREはAgent
tanimuyk
0
400
Foxgloveについて 実際にExtensionを開発して公開するまでの話 / About Foxglove: The Story of Developing and Releasing an Extension
ry0_ka
0
170
ポストモーテム! DDoSからサイトは守れた。 でもビジネスは守れなかった。
bengo4com
0
870
背中から、背中へ /paying forward to community
naitosatoshi
0
230
CSに"SLO"は要らない、経営層に"99.9%"は伝わらない - SREを全社に"翻訳"する3原則
cscengineer
PRO
0
2.6k
“ID沼入口” - 基本とセキュリティから始める、考え続けるためのID管理技術勉強会 告知&イントロ
ritou
0
430
Oracle Exadata Database Service on Cloud@Customer X11M (ExaDB-C@C) サービス概要
oracle4engineer
PRO
2
8.3k
AI Agent SaaS を支える自社仮想化基盤への挑戦と実運用 / ai-agent-saas-virtualization
flatt_security
2
2.1k
Amazon EVS で VCF 9.0 / 9.1 のサポート開始まとめ
mtoyoda
0
270
キャリアの中で本を作る / Making a Book During Your Career
ak1210
0
100
Featured
See All Featured
GraphQLとの向き合い方2022年版
quramy
50
15k
Balancing Empowerment & Direction
lara
6
1.2k
Claude Code のすすめ
schroneko
67
230k
GitHub's CSS Performance
jonrohan
1033
470k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
440
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
630
sira's awesome portfolio website redesign presentation
elsirapls
0
290
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
380
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
2
300
Chasing Engaging Ingredients in Design
codingconduct
0
230
Abbi's Birthday
coloredviolet
3
8.5k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.4k
Transcript
⿃コンペ反省会 6位解法 チーム「Deepでポン」 Hidehisa Arai 1
⾃⼰紹介 @kaggle_araisan https://www.kaggle.com/hidehisaarai1213 かつてKaggle Masterのアライさんという名前 でKaggleをやっていたアライグマ 東⼤航空宇宙の修⼠3年⽣をしながらNABLAS という会社でパートタイムResearcherをして いる Audioデータは昨年のFreesound
Audio Tagging 2019のコンペティションが初めてで その後業務でチョットダケ扱っていた 2
結果 Public 2nd (0.628) → Private 6th (0.668) 3
解法概要 4 • 3ステージの学習によって段階的にラベルのノイズを除去 • Sound Event Detection(SED)スタイルの学習および推論 • 全データで学習
+ EMAのモデル11個の重み付き和でアンサンブル
コンペの主課題 Train/Testの乖離 (Domain Shift) WeakかつNoisyなラベル 1. ⾳データの出⾃ • Train: Xeno
Cantoに収録者がアップ ロード • Test: (おそらく)野外設置型マイクロ フォンで取っている 2. アノテーション • Train: アップローダがつけた⾳クリッ プごとのラベル • Test: アノテータがつけたchunk(⼩区 間)ごとのラベル Trainのラベルはクリップごとにしか存在しな い(weak label)上に、主ラベルは1つのみ secondary_labelsという副ラベルがある場合も あるが信頼性はまちまち(noisy label) secondary_labelsはアップローダがつけていな い場合もあり、複数種の⿃が鳴いていてもつい ていない場合もある(missing label) nocallクラスはTestにしか存在しない 5
モチベーション ‒ domain shift Domain Shiftを分解して考える : ⼊⼒、: ラベル、∗: 真のラベル(観測できない)
"#$": "#$" → "#$" を推定するのが今回のタスク !"#$% ≠ (!&'! ) TrainとTestでは⼊⼒の性質が 異なる • 集⾳環境の違いに由来 • Testは遠くの⽅で⿃が鳴い ていることが多くSNRが⼩ さめ • ⿃の声以外の⾳イベントの 頻度や種類・傾向なども異 なる(と考えられる) !"#$% ∗ ≠ (!&'! ∗ ) TrainとTestでは真のラベルの 出現頻度が異なる • 集⾳場所の違いなどに由来 • 集⾳地点の⿃の分布や鳴き ⽅の差が反映されて分布差 が出る • Testはパッシブなため、 nocallが多いことも分布差に つながっている !"#$% ≠ !&'! TrainとTestでは⼊出⼒の対応 関係がそもそも違う • アノテーション⽅法の違い に由来 • Trainはアノテータが投稿者 なのでアノテーションには ⼤きなばらつきがある • Testはアノテーションがコ ントロールされている上、 chunk levelでラベルがある 6
モチベーション ‒ domain shift TrainとTestでは⼊⼒の性質が 異なる • 集⾳環境の違いに由来 • Testは遠くの⽅で⿃が鳴い
ていることが多くSNRが⼩ さめ • ⿃の声以外の⾳イベントの 頻度や種類・傾向なども異 なる(と考えられる) TrainとTestでは真のラベルの 出現頻度が異なる • 集⾳場所の違いなどに由来 • 集⾳地点の⿃の分布や鳴き ⽅の差が反映されて分布差 が出る • Testはパッシブなため、 nocallが多いことも分布差に つながっている !"#$% ≠ !&'! TrainとTestでは⼊出⼒の対応 関係がそもそも違う • アノテーション⽅法の違い に由来 • Trainはアノテータが投稿者 なのでアノテーションには ⼤きなばらつきがある • Testはアノテーションがコ ントロールされている上、 chunk levelでラベルがある Data Augmentationであり得 るバリエーションを網羅 ラベル⽐率を変えたデータで学 習させたモデルをアンサンブル ラベルの修正を⾏なって!"#$% を!&'! に近づける 7 !"#$% ≠ (!&'! ) !"#$% ∗ ≠ (!&'! ∗ )
モチベーション ‒ label noise Label Noiseを分解して考える Weak labelはnoisy label ラベルがクリップごとにしか存
在しないこと⾃体がnoisy Labelにある⿃の声がない場合がある 主ラベルは概ね信じていいが、⾳ クリップ上でまばらな場合が多い 副ラベルはよりまばらでほとんど 聞こえない場合もある Labelにない⿃の声がある場合もある 2/3の学習データは副ラベルが ない 副ラベルをつけるかどうかは投 稿者に委ねられているため、 missing labelもある 8 ラベル: aldfly, leafly, amered, canwar ラベル: warvir
モチベーション ‒ label noise 9 Weak labelはnoisy label ラベルがクリップごとにしか存 在しないこと⾃体がnoisy
Labelにある⿃の声がない場合がある 主ラベルは概ね信じていいが、⾳ クリップ上でまばらな場合が多い 副ラベルはよりまばらでほとんど 聞こえない場合もある Labelにない⿃の声がある場合もある 2/3の学習データは副ラベルが ない 副ラベルをつけるかどうかは投 稿者に委ねられているため、 missing labelもある 学習を⻑いchunkで⾏うことで chunkにラベル中の⿃の声が⼊ るようにする 蒸留により信頼度の低いラベル を排除 学習させたモデルで副ラベルが ないデータからmissing label を発⾒
Sound Event Detection (SED) 10 今回のタスクを解くには⼤きく⼆つの⽴場がある Audio Tagging Sound Event
Detection ⼊⼒の⾳クリップ単位でラベルづけを⾏う ⼊⼒に時間情報込みでラベルづけを⾏う 時間⽅向に集約 (max, mean, attention,…) Feature Extractor 特徴マップ ⼊⼒ (waveform,melspec,…) 特徴抽出 CNNなど Feature Extractor 特徴マップ ⼊⼒ (waveform,melspec,…) 特徴抽出 CNNなど Pointwise Classifier Classifier Clip-level予測 Frame-level予測 時間⽅向に集約 (max, mean, attention,…) 出⼒はClip-level予測と Frame-level予測の2つ
Stage 1 11 5fold PANNsでmissing labelを⾒つける • PANNsのCnn14DecisionLevelAtt • ⼊⼒は30sでクロップしたchunk←Weak
label対策 • Data Augmentation ←()のシフト対策 • Gaussian Noise • Pitch Shift • Volume Up/Down • Lossはclipwise outputとframewise outputの両⽅ にかける • 5fold学習し、Out-of-Foldの予測でTrain全体の予 測を作る • 副ラベルがないデータに絞って確率が>0.9かつ主 ラベルではないクラスを副ラベルに追加←missing label対策 Attention map 要素積をとった後時 間⽅向に潰して集約 Feature Extractor Segment-wise予測 Clip-level予測 (maxで集約) Clip-level予測 (attentionで集約) ℒ = , ( !"" + 0.5(, ( #!$) Attention map → 0.578(public) / 0.619(private) (銀圏)
Stage 2 12 5foldのSEDモデルでラベルの蒸留 • PANNsのアーキテクチャを継承 • CNNをResNeSt50に変更 • Stage1で⾒つけた追加ラベル使⽤
←missing label 対策 • ⼊⼒は20sでクロップしたchunk←Weak label対策 • Data Augmentation ←()のシフト対策 • Gaussian Noise • Pitch Shift • Volume Up/Down • 3channel input (melspec, pcen, melspec ** 1.5) • Lossはclipwise outputとframewise outputの両⽅ にかける • 5fold学習し、Out-of-FoldのFrame-wise予測を得 る • 元のラベルをoofの予測で修正 ←noisy label対策 264 n_frame(≠len(y)) クロップされたchunk Frame-wise予測 元のClipごとのラベル Chunk内の予測(確率値)を frame⽅向にmaxで集約し 閾値をかける np.logical_and 修正されたラベル 閾値を変えることで修正の度合いを変 化させモデルに多様性を与えられる → 0.601(public) / 0.655(private) (⾦圏)
Stage 3 13 ラベル修正の度合いを変化させた複数のモデルをAll data + EMAで学習しアンサンブルの種を⽤意 • PANNsのアーキテクチャ +
ResNeSt50/EfficientNet-B0 • Train Dataset/Train ExtendedのAll data training • Stage1で⾒つけた追加ラベル使⽤ ←missing label対策 • ⼊⼒は20sでクロップしたchunk←Weak label対策 • Data Augmentation ←()のシフト対策 • Gaussian Noise • Pitch Shift • Volume Up/Down • 3channel input (melspec, pcen, melspec ** 1.5) • Lossはclipwise outputとframewise outputの両⽅にかけ る(EfficientNetはFocalLossを使⽤) • 元のラベルをoofの予測で修正 ←noisy label対策 • Oof予測にかける閾値を0.3-0.7で変えてラベル修正の度 合いを変化させる ←(∗)のシフト対策 • 合計11個のモデルの重み付け平均(重みはpublic LB参考 に⼿動調整) ※ All data + EMA: Foldを切らずに全データを Trainに使い、重みのExponential Moving Averageをとったモデルを使うこと → 0.628(public) / 0.668(private) (⾦圏) librosa.power_to_db(librosa.feature.melspectrogram(y, )) librosa.pcen(librosa.feature.melspectrogram(y)) librosa.power_to_db(librosa.feature.melspectrogram(y) ** 1.5)
なぜ負けたのか? 14 優勝したいなら圧倒的な差をつけないと厳しいコンペだった ラスト2週間の戦略の失敗 • 新しいことを試さず、アンサンブルの種を ずっと作っていた • 学習時間が2倍強になるためExtendedデー タセットをギリギリまで使わなかった
• Stage2とStage3でprivate scoreはほとんど 変わっていなかった・・・(丸1ヶ⽉無駄に) 締め切り前⽇に気付くアライグマ
その他諸々 15 その他反省点 • Seedを固定する関数にバグがあり再 現性が取れなくなった、しかも気が ついたのがStage3の学習をしていた とき • パイプラインが複雑化した結果、新
しく加えた変更で過去の実験が再現 できなくなった • 結局1実験1scriptが⼀番わかり やすい(CPMPも⾔ってる) • Augmentationをエイヤで決めたのがた またまワークしてしまったので使い 続けていたが、pitch shiftが死ぬほ ど遅かったので削れば1.5倍くらい実 験ができたはず・・・ • 優勝者の解法でおそらくhard voting がかなり効いていたが、試しもせず 可能性を排除してしまった 効かなかったこと • Mixup • Logとる前に混ぜる(2nd,36th) • ラベルはUnionをとる(3rd ,36th) などが効いたらしい • Calltype classification • 実は⿃の鳴き声は複数パターンある • ⼤雑把に⾔ってもCallとSongはかな り異なるので別のクラスとして扱う • Calltypeというカラムがあったので ⼿作業で綺麗にして871クラス分類 するも変わらず • Larger model • 5thのOlegによると局所受容野が⼤き すぎるとダメらしい 時間があればやりたかったこと • モデルを増やす • ラベルの修正を繰り返す • Locationとelevation予測を分類の修 正に使う • ⿃の共起情報をもとに予測を後処理で 修正 • 背景雑⾳を混ぜ込む
Goldメダルはどうやれば取れるのか? • コンペの主題(メインの課題)を正確に把握すること • Bengaliのようにあまりはっきりと書かれていない場合もある • 最近はnoisy labelやdomain shiftが多かった(MLの研究の場でもホットな話題) •
Discussion / Notebookには⼀通り⽬を通す • 公開情報で役に⽴つことは全てやるのが前提 • 「みんながやっていること」は全部やった上でやっている⼈が少なさそうなことを試す • Notebookはノイズも多いのでDiscussion重視⽬(特にGMとか強そうなMasterが集まってるところ) • 難しいタスクは案外⽳場 • とりあえず⼿をつけやすいタスクは乱戦模様になりがち • 0.000xを競うタスクは⼿数の勝負になることもある • 2sub/dayはソロの味⽅ • Discussion/Notebookを投稿すると⾃分に有利になることもある • 議論が進む • コンペの流れを⽀配できる 16