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
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
AIで社員の自主発信に広報目線を組み込む
_mossann_t
0
140
AIエージェントの自己改善をどう設計するか / How to Design Self-Improvement for AI Agents
22mi
26
17k
2026-09-18 gotanda.sre Terraformで複数環境作ったり、複数Stateに分割したりそれとTerragrunt / Terraform multi envs and multi states
masasuzu
4
700
株式会社シーエーシー エンジニア向け会社紹介資料
cac
0
57k
Railsのように考える: See through the Master
snoozer05
PRO
5
1.3k
AI時代、データエンジニアが一番おもろい
genshun9
0
690
Von-Neumann Machines, Dreams & The Futures of IT
ufried
0
120
作って終わりじゃないサーバーレス 〜9年運用する大規模EC物流API基盤の設計・運用のリアル〜
zozotech
PRO
0
470
AI 時代のスタートアップエコシステ厶から考究する技術的負債との向き合い方
m3m0r7
PRO
3
2.6k
AIに賢く動いてもらうためのコンテキスト〜Snowflake女子会 vol.8
snowwmn0824
0
160
Oracle Cloud Infrastructure(OCI):Onboarding Session(はじめてのOCI/Oracle Supportご利⽤ガイド)
oracle4engineer
PRO
2
20k
Slack上でインフラをトラブルシュートする! Agentic Platform Engineeringの第一歩
teru0x1
5
1.9k
Featured
See All Featured
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
6.2k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.6k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
2
2.9k
How GitHub (no longer) Works
holman
316
150k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.6k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
First, design no harm
axbom
PRO
2
1.3k
Scaling GitHub
holman
464
140k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
460
A better future with KSS
kneath
240
18k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Testing 201, or: Great Expectations
jmmastey
46
8.3k
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