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

鳥蛙コンペ - Team Exodia

yuki
February 26, 2021

鳥蛙コンペ - Team Exodia

鳥蛙コンペ33rd place solution

yuki

February 26, 2021
Tweet

More Decks by yuki

Other Decks in Research

Transcript

  1. 鳥蛙コンペ反省会
    2021/2/27

    View Slide

  2. 自己紹介
    2
    ◎ 名前:yuki(Twitter, kaggle)
    ◎ kaggleは2019年のNFLコンペあたりから参戦
    ◎ 音コンペは今回の鳥蛙コンペが初
    ◎ Husband kaggler(not PAPA kaggler)
    鳥蛙コンペはチームで参戦

    View Slide

  3. コンペ概要
    3
    ◎ 音声ファイル内に含まれる24種の鳥と蛙の鳴き声を当てるMultiLabel分類
    ◎ 音声ファイルはすべて60秒
    ◎ Clip単位の分類
    ◎ 鳴き声の周波数、時間は学習データに含まれている
    ◎ 評価指標はlabel-weighted label-ranking average precision(LWLRAP)
    ◎ 学習データは2種類提供されている
    ○ 鳴き声を自動で検出して
    ◉ 専門家レビューによって正しいと判断されたもの -> train_tp.csv(1132ファイル)
    ◉ 専門家レビューによって間違っていると判断されたもの -> train_fp.csv
    ✓自動検出できなかった鳴き声のラベルは欠損してしまうことがポイント

    View Slide

  4. 結果
    4
    ◎ Public32位/Private33位で銀メダル
    去年の同じ時期に参加したDSB2019では
    26位から837位のshake downを経験。
    その時の記憶が蘇ってきて発表の瞬間は
    いつも以上にドキドキしたぜ。

    View Slide

  5. 提出モデル
    5
    ◎ 提出モデルはSEDモデル3つ、not SEDモデル4つから成る7モデルのアンサンブル
    (PublicLB:0.927/PrivateLB:0.934)
    # model CV PublicLB PrivateLB
    1 SED EfficientNet-B3 0.845 0.919 0.927
    2 SED EfficientNet-B3 0.838 0.916 0.925
    3 SED EfficientNet-B3 0.835 0.912 0.922
    4 not SED ResNeSt50 0.863 0.893 0.908
    5 not SED ResNeSt50 0.851 0.891 0.897
    6 not SED Densnet121 0.806 0.886 0.894
    7 not SED Densnet121 0.823 0.885 0.892
    主にこれらついてお話します
    アンサンブルは加重平均ですが、OOF予測値がほとんど参考にならなかったので、
    精度の低いモデルほどweightが低くなるように調整

    View Slide

  6. Model
    6
    ◎ PANNsアーキテクチャーのSEDモデル
    (shinmuraさんのディスカッションがベース)
    • Feature Extractor : EfficientNet-B3
    • Loss Function : BCELoss
    • Optimizer : SGD
    • Scheduler : CosineAnnealingLR
    • LR : 0.15
    • CV : 4Fold multilabel-stratifiedkfold
    • Data Augmentation : denoise
    • train_fp、soudtype_idは使ってない
    waveform
    input
    Log-melspectrogram
    croped melspectrogram
    clipwise output framewise output
    output
    Data Augmentation
    Convert melspectrogram
    crop
    PANNs base SED
    (EfficientNet-B3)
    aggregate
    ✓ 学習率は0.15より下げると精度が落ちる(epoch数増やしてもダメ)
    ➢ 学習率は高いほうが良いと言っているnotebook有り
    ✓ Data Augmentationはいろいろ試したがほとんど効かなかった。Todaさんが
    紹介されていたDenoiseをData Augmentationとして使うと効いた
    (0.912->0.919)
    ✓ ValidationデータにOverfitしないように5Fold CVではなく4Fold CVにした
    (どのくらい効果があったかは不明)

    View Slide

  7. 学習データ/検証・テストデータ
    7
    学習データ 検証・テストデータ
    Target
    ・ ・ ・ ・ ・ ・
    60/9秒のwindowを半分ずつスライドさせながらcrop。1Clipあたり17枚の画像
    が作成される。1Clip予測するのに17画像予測する必要がある。
    (testと同じように評価するためにvalidationも17画像予測していたが、
    missing labelのことを考えると、targetが存在する画像のみで評価したほうがよ
    かったかも。)
    train_tpのラベルが含まれるように60/9秒でrandom crop。周波数方向は切り
    取らない。
    60/2秒~60/20秒を実験したが60/9秒、60/10秒あたりが精度良かった。
    17images
    60
    9
    Sec.
    256*1001pixel
    missing labelsへの対処をしていないのにもかかわらずそこそこ(?)の精度が出せたのは
    60/9秒という秒数が鳴き声の情報を損なわず、ラベルが欠損している鳴き声が混入しづらい
    いい感じの秒数となったことが要因?( 60/6秒でcropした人が多い印象)
    38位の人も60/6秒より、60/12秒のほうが良かったと言ってる。

    View Slide

  8. Adversarial Validation
    8
    ◎ Testデータのほうがノイズが少ないというディスカッションを見て、TrainとTestの分布
    がどのくらい異なるのか気になりAdversarial Validationを実施
    ◎ 結果はAUC0.81と高め。ただ、データを見てみるとノイズでTrainとTest判断してい
    るわけではない印象。収音環境や収音機材が違うのかと推測
    ✓ Train寄りのTrainを少し除いたデータで学習すること僅かに精度向上
    ➢ 0.912 -> 0.916

    View Slide

  9. Didn't work
    9
    •Araiさんのnotebookで紹介されているAugmentationの他、mixup、 random brightness 、SpecAugment
    など、いろいろ試したがことごとく効かなかった(not SEDモデルではいくつか効くものもあった)
    Data Augmentation
    •そもそもmissing labelsへの対処をしておらず、Pseudo label自体の信頼性が低かったことが原因?
    Pseudo labeling(test/train、soft label/hard label)
    •Class3の精度が目立って低くかったため、Class3を2値分類で当てる専用モデル作成を試みたがうまくいかず
    Class3専用モデル
    •予測値に閾値を設けて閾値以上の値の和を求める(多く鳴いているもをより評価するイメージ)
    •各Classに係数をかけるような後処理。OOFが最大化するような係数を求めていたが、そもそもOOFが信頼できるもの
    ではなく、よい係数を求めることができなかった
    Post Process

    View Slide

  10. 反省
    10
    ◎ なんといってもmissing labelsへの対処を何もしていないこと。チーム内でもmissing labelに関
    する議論はほとんどしていない。
    ○ データがどう作られたかよく考えなければいけなかった(よく言われているやつ)
    ◎ 見落としているディスカッションがあった
    ○ 主催者の論文が存在することをソリューションを読んで知った
    ○ (英語が苦手なのでディスカッション読むの結構しんどい)
    コンペ序盤から5人チームで参加したことはよかった!
    いつもは数か月も続かないモチベーションもなんとか保つことができた。
    わからないことは教えてくれるし、間違いも指摘してくれるし最高。

    View Slide