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
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
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
探して_入れて_作って_使う_Agent_Skills___LT.pdf
peintangos
2
160
GoとSIMDとWasmの今。
askua
3
510
個人の発見を、組織の知恵に 〜生成AI活用を"探索"から"組織の仕組み"へ〜
kintotechdev
2
1k
noUncheckedIndexedAccess、3時間、1万円。 / noUncheckedIndexedAccess, 3 Hours, 10,000 JPY.
kaonavi
1
310
Sony_KMP_Journey_KotlinConf2026
sony
2
210
ITエンジニアを取り巻く環境とキャリアパス / A career path for Japanese IT engineers
takatama
4
1.8k
PHP と TypeScript の型システム比較:AI 時代の「型」は誰のためにあるのか? #frontend_phpcon_do / frontend_phpcon_do_2026
shogogg
1
260
MIERUNE JCT 発表資料「宇宙から伊能忠敬ごっこ」
syuchimu
0
190
トークン数だけでは測れない — Claude Code 組織展開の効果検証から学んだこと
makikub
0
130
Agentic ERPをどう設計するか ー 受発注エージェントを動かす、現場の知見と設計思想ー
recerqainc
1
1.7k
そのPoC、何を検証したつもりでしたか? AIプロダクトの価値検証で陥った落とし穴
techtekt
PRO
0
150
AIプラットフォームを運用し続けるための可観測性
tanimuyk
4
1.1k
Featured
See All Featured
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.3k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.2k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
840
Embracing the Ebb and Flow
colly
88
5.1k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
120k
Building Flexible Design Systems
yeseniaperezcruz
330
40k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.3k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
310
Prompt Engineering for Job Search
mfonobong
0
330
How to make the Groovebox
asonas
2
2.2k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.3k
Into the Great Unknown - MozCon
thekraken
41
2.5k
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