Upgrade to Pro — share decks privately, control downloads, hide ads and more …

鳥蛙コンペ反省会資料

Hidehisa Arai
February 27, 2021

 鳥蛙コンペ反省会資料

2020/11/18 ~ 2021/2/17にかけてKaggleで行われたRainforest Connection Species Audio Detection Challengeの16位解法と上位の解法まとめです。

Hidehisa Arai

February 27, 2021
Tweet

More Decks by Hidehisa Arai

Other Decks in Technology

Transcript

  1. 🐤🐸コンペ 16位解法+α
    チーム『かえる&Hiraiwa&修論』

    kaerururu, Taku Hiraiwa, Y.Nakama, Hidehisa Arai

    View Slide

  2. チームメンバー

    修論

    Hidehisa Arai
    Y.Nakama
    kaerururu
    Taku Hiraiwa
    ● Triple Kaggle Master
    ● 音データの扱いが得意 

    ● 修論終わって21新卒になれそう 

    ● Contributor → Expert
    ● 元生物実験屋さん

    ● 30歳新卒というパワーワードを
    ひっさげて現職場に入社 

    ● Competitions GM
    ● 次は Notebooks GM が目標

    ● 修論終わって21新卒になれそう 

    ● Competitions Master
    ● 修論書いたことない 

    ● コキーコヤスガエル 絶対に許さない 

    2

    View Slide

  3. Table of Contents
    コンペ概要

    解法

    他のチームの解法総括

    まとめ

    3

    View Slide

  4. コンペ概要

    解法

    他のチームの解法総括
    まとめ
    コンペ概要

    ● 課題設定

    ● 難しいポイント

    4

    View Slide

  5. コンペ概要 - 課題設定

    学習データは部分的にTPとFPの詳細なアノテーションあり、テスト時はクリップごとのマルチラベル予測

    train_tp: 学習データの一部につけられた「正解」

    train_fp: ホスト側のアルゴリズムで予測されたが、後に
    人が確認して誤りとされた、「Not presentが保証された
    ラベル」

    ラベルは時間帯・周波数
    帯の情報も持つ

    ラベルは完全ではないこ
    ともあり、不十分

    予測対象は24種の
    🐤/🐸の種族ID

    5

    View Slide

  6. コンペ概要 - 難しいポイント

    ラベルの不完全さがさまざまな問題を引き起こす

    PU Learningの設定

    ラベルはこれだけ

    ラベルがついていても良さそうなの
    にない部分がたくさん!

    工夫しないと決定境界がいいところに引かれないよ!

    Validationが機能しない 

    Prior Probability Shift 

    ラベルが不十分なためテストと同じ評価法は不可能😢

    CVとLBが全く連動しない・・・🥺


    例) CV: 0.89830 (10sec chunk) → pub LB: 0.83648

    CV: 0.88284 (10sec chunk) → pub LB: 0.85181

    CV: 0.88276 (10sec chunk) → pub LB: 0.86812

    ラベルの本来の出現頻度に関わらず与えられた正解ラベルはおよそ
    50程度に揃えられているため、予測の確率値には偏りが生じる

    Trainのラベル分布 Testのラベル分布 6

    View Slide

  7. コンペ概要

    解法

    他のチームの解法総括

    まとめ

    解法

    ● 画像分類アプローチ

    ● SEDアプローチ

    ● アンサンブル

    7

    View Slide

  8. クロップに利
    用

    解法 - 画像分類アプローチ

    Label as positive
    {
    “s0”: [211, 237],
    “s1”: [178, 207],
    ...
    }
    1. 周波数帯の辞書作成

    Label as negative
    Train TP/FPのみを信頼し、明確にアノテーションがある部分だけを切り抜いて画像分類

    Augmentations
    * PitchShift
    * Gain
    * AddGaussianNoise
    2. TP/FPのラベルの周波数帯を6秒分切り抜く
    
 3. 画像サイズを揃える

    320x320, 456x456など

    4. EfficientNetを学習

    Configurations
    models: tf_efficientnet_b<0-5>_ns
    loss: BCEFocalLoss
    Optimizer: AdamW
    Scheduler: Linear Warmup
    Epochs: 60
    KFold: MultilabelStratifiedKFold x 5
    Checkpointing: Monitor F1 score
    5. 6秒ずつ時間をずらしながら24種分の周波数帯を切り抜く

    学習時

    推論時

    ・・・

    6. 画像サイズを揃える
    
 7. 学習したモデルで推論

    クロップに利
    用

    320x320, 456x456など

    Single model Scores
    Public LB: 0.92x ~ 0.935
    Private LB: 0.92x ~ 0.931 8
    ・・・
    ・・・
    ・・・
    ・・・
    ・・・
    ・・・
    ・・・
    ・・・
    ・・・
    ・・・
    6秒ごとの予測(24種) 

    種ごとにmax
    を取る


    View Slide

  9. 解法 - SEDアプローチ

    SEDで色々試したがシングルモデルではPublic LB0.9の壁を崩せず

    9
    1. TPラベルのある周りを10秒分切り抜く

    2. ラベルはWeak/Strongで用意

    Strong
    Weak
    3. PANNsのHeadをEfficientNet, ResNeStなどにつける
    
 4. 学習/推論は通常

    Configurations
    models: tf_efficientnet_b<0,3>_ns,
    ResNeST
    loss: BCEFocalLoss
    Optimizer: SAM
    Scheduler: CosineAnnealing(T_max=10)
    Epochs: 55
    KFold: StratifiedKFold x 5
    Checkpointing: Monitor LWLRAP
    Weak/Strong labelで学習

    Single model Scores
    Public LB: 0.82 ~ 0.88
    Private LB: 0.84 ~ 0.88
    Augmentations
    * PitchShift
    * VolumeControl
    * PinkNoiseSNR

    View Slide

  10. 解法 - アンサンブル

    10
    画像分類モデルはスタッキングで0.942、SEDは0.902、両方合わせて0.944

    EfficientNetB0
    EfficientNetB1
    EfficientNetB2
    EfficientNetB3
    EfficientNetB4
    EfficientNetB5
    画像サイズ

    244 x 244
    320 x 320
    456 x 456
    MLP
    Public LB: 0.942
    Private LB: 0.940
    画像分類モデル

    SEDモデル
 EfficientNetB0
    EfficientNetB3
    ResNeSt50
    ・・・

    Public LB: 0.901
    Private LB: 0.911
    全11モデル

    Rank Average

    重みはPublic LBスコア

    Public LB: 0.945
    Private LB: 0.946
    MLPによるスタッキング

    ※入力はOOFではなく各画像パッチに対す
    る学習済みモデルの予測

    Rank Average

    重みは手動で決定


    View Slide

  11. コンペ概要

    解法

    他のチームの解法総括

    まとめ

    他のチームの解法
    総括

    ● 不完全なラベル対策

    ● 事前確率の調整

    ● Validation

    11

    View Slide

  12. 他のチームの解法総括 - 不完全なラベル対策

    不完全なラベルを補う/ラベルがついていない部分を負例として扱わないようにするアプローチがあった

    チーム\手法
 Loss Masking Masked Input Hand Labeling Pseudo Labeling
    1st Watercooled ✔ ❌ ✔ ✔
    2nd Selim Seferbekov ✔? ✔ ❌ ✔
    3rd SidChin ❌ ✔? ✔ ✔
    4th Hot Pursuit ❌ ❌ ❌ ✔
    5th birdcall revenge ✔ ❌ ❌ ✔
    6th 🐼Tropic Thunder🐼 ✔? ✔ ❌ ✔
    7th Beluga & Peter ❌ ❌ ✔ ✔
    8th SHINO ❌ ❌ ✔ ✔(Not worked)
    9th Chris Deotte ✔ ❌ ❌? ❌?
    10th RNA ✔ ❌ ❌ ✔
    11th CPMP ❌ ✔ ❌ ✔(Not worked)
    13th Ryan Epp ❌ ❌ ❌ ✔(Mean
    Teacher)
    12

    View Slide

  13. 他のチームの解法総括 - 事前確率の調整

    13
    モデルの出力値を修正することでスコアアップを目指せた

    1st place
    9th place
    クラス3を1.5倍というと聞こえは悪いがSmoothingの一種といえばわからなくもない?

    4th place
    Public LBをProbingしてテストに含まれるデータの分布を把握し、出力値
    のスケーリングを行った

    テストのラベル分布が全く違うような気がしたのでクラス3とクラス18の出
    力値は定数倍して確率をあげたらスコアが上がった

    左のような変換をしてモデルの出力値に定数
    倍をすると大きくスコアが伸びた


    View Slide

  14. 他のチームの解法総括 - Validation

    1st place
    色々試したけどCVとLBは相関し
    なかった。Public LBを頼りに考え
    るしかなかった

    2nd place
    CVとLBは相関しなかった。
    Checkpointingをせず最終エポック
    の重みを使った

    上位の多くがTrust Public LBをしていた

    3rd place
    手作業でラベルづけしたデータ
    セットを使ったらCVとLBがちゃん
    と連動した

    4th place
    コンペの最終盤までLocal CVは安
    定せず、ほぼPublic LBに頼ってい
    た

    8th place
    Public LBを信頼した

    11th place
    sample-wise ROC-AUCを使った。
    Public LBとの相関は弱かったが
    サブせずに手法の良さを測るの
    には役立った

    14

    View Slide

  15. コンペ概要

    解法

    他のチームの解法総括

    まとめ

    まとめ


    15

    View Slide

  16. まとめ

    16
    不完全なラベルが与えられていたため

    1. 決定境界が負例側に有利に引かれるようになってしまう

    2. Validationが難しい

    3. 事前確率シフト(Target Shift)というドメインシフトの一種が起きる

    課題

    ● 入力をラベルが与えられている部分に制限
    したモデルを学習

    ● Validationはほぼ完全にTrust LB

    ● SEDモデルは弱かったがアンサンブルで若
    干効果を発揮

    解法

    ● Lossのマスキング/入力のマスキングで信
    頼できない情報を学習に用いない工夫

    ● Pseudo LabelingやMean Teacherなどの
    Semi-Supervisedなやり方やハンドラベリン
    グでラベルの不足を補う

    ● モデルの出力をいい感じに補正することで
    事前分布を考慮する

    勝利の鍵

    不完全な情報にどう接するべきかが問われるコンペだった

    →情報を補って完全にする and/or 信頼できない情報は見ないことにする


    View Slide