Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
鳥コンペ反省会資料
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.7k
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.3k
生成AIの二大潮流と自動運転
koukyo1994
22
25k
ICML2021論文読み会資料
koukyo1994
2
1.7k
【2019-06-19】アルゴリズム勉強会 - 最小全域木
koukyo1994
0
320
Kaggle昔?話
koukyo1994
2
2.6k
コンペ中のコード、どうしてる?
koukyo1994
3
2.4k
変数間の関係を捉えたいあなたへ
koukyo1994
3
1.9k
脱! Deepでポン🎶ハイパラチューニング芸人を卒業するために
koukyo1994
7
4.9k
鳥蛙コンペ反省会資料
koukyo1994
3
1.5k
Other Decks in Technology
See All in Technology
負債のメタファと2026年 / Debt Metaphor in Agentic Engineering Age 202609 Edition
twada
PRO
11
6.2k
リアーキテクチャ後の障害ゼロを目指したShadow Testingの取り組み
nihonbuson
PRO
1
170
Oracle Cloud Network Path Analyzerを試してみた/I Tried Out Oracle Cloud Network Path Analyzer
masakiokuda
1
110
顧客に向き合う開発組織へ。リアーキテクチャとフィーチャーチーム化で挑む組織改革
safie
0
2.4k
Goodbye ShellScript, Hello File-based App
shunsock
0
800
え、こんなに早く改修できるの?──新人エンジニアとスクラムマスターの2人が語る、AI×アジャイル開発の現場
ysasago
2
680
手を動かして実感する、Kiro が変える開発体験
inariku
0
190
Claude Codeを「使うほど育つ」AI秘書にするノウハウ
minorun365
PRO
33
31k
GoのInterface内部構造から学ぶ!最高パフォーマンスを出すコード設計
yappli_developers
1
260
AgentCore Runtime上にAgentic Coding基盤を構築・展開する際の設計ポイントと限界点 / Design considerations and limitations when building an agentic coding platform on AgentCore Runtime
har1101
5
690
10Xに技術的負債をもたらした「2つの境界の歪み」その構造と解消への営み
10xinc
0
2.4k
The Knowledge Spine: A Machine-Executable Ontology for Governed Marketing Activation
vananth22
0
120
Featured
See All Featured
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
2
280
Faster Mobile Websites
deanohume
310
32k
Rails Girls Zürich Keynote
gr2m
96
14k
Bash Introduction
62gerente
615
220k
Visualization
eitanlees
152
17k
WCS-LA-2024
lcolladotor
0
830
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.2k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
940
Amusing Abliteration
ianozsvald
1
310
My Coaching Mixtape
mlcsv
0
320
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
290
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