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

Noisy label 対抗記 ~Cassava Leaf Disease Classific...

Noisy label 対抗記 ~Cassava Leaf Disease Classification~ / Diary against the noisy label

■イベント 
:分析コンペ勉強会
https://sansan.connpass.com/event/202716/

■登壇概要
タイトル:Noisy label 対抗記~Cassava Leaf Disease Classification~
発表者: 
DSOC R&D研究員  齋藤 慎一朗

▼Twitter
https://twitter.com/SansanRandD

Sansan DSOC

March 02, 2021
Tweet

More Decks by Sansan DSOC

Other Decks in Technology

Transcript

  1. Data Strategy and Operation Center ⾃⼰紹介 • 2015年 3⽉ 東北⼤学⼤学院

    修了 • 2016年 4⽉~ ⽇系SI, 外資ITでSE, Data Scientist • 2021年 10⽉ Sansan株式会社 ⼊社 • 現在 ⽂書データからの情報抽出 齋藤 慎⼀朗 Shinichiro Saito sinchir0 Sansan 株式会社 DSOC(Data Strategy & Operation Center) 研究開発部 Data Analysis Group 研究員 オンライン名刺
  2. Data Strategy and Operation Center Contents • どんなコンペだったか • なぜ取り組んだか

    • (⼀応)ソリューション • Noisy labelにどう対抗するか • testもNoisyなデータへの対抗記録 • まとめ
  3. Data Strategy and Operation Center お礼 今回のコンペ参加にあたり、 Sansan DSOC 研究開発部

    Kaggle部の GCPリソースを⼤いに活⽤させて頂きました。 この場を借りて感謝します🙇
  4. Data Strategy and Operation Center 結果 • 銅メダル(226th / 3900,

    Top6%) • 画像コンペでは初メダルなので、ちょっと嬉しいが、もっと上⾏きたかった。
  5. Data Strategy and Operation Center どんなコンペだったか 5 • Cassavaの画像から、そのCassavaがどの病気にかかっているかを判別するコンペ •

    判別クラスは全部で5クラス > Cassava Bacterial Blight (CBB) > Cassava Brown Streak Disease (CBSD) > Cassava Green Mottle (CGM) > Cassava Mosaic Disease (CMD) > Healthy https://www.kaggle.com/tanulsingh077/how-to-become-leaf-doctor-with-deep-learning
  6. Data Strategy and Operation Center どんなコンペだったか 6 データセット > train

    : 21397枚, test : 15000枚(31% : Public, 69% : Private) > 直近の画像コンペの中では良⼼的なサイズ 評価指標 https://developers.google.com/machine-learning/crash-course/classification/accuracy
  7. Data Strategy and Operation Center どんなコンペだったか 7 重要なポイント • データセットにおける画像のラベリングミスが⾮常に多い

    • PublicLBの評価に使われているデータセットもNoisyである • LeaderBorad上のスコアに⼤きな差がなかったこと
  8. Data Strategy and Operation Center どんなコンペだったか 10 重要なポイント • PublicLBの評価に使われているデータセットもNoisyである

    • 学習にCleanデータのみを⽤いると、CVは上がるけれど、 LBは下がるというDiscussionが多く投稿されていた。 • 実際に試すと以下のような感じ。 > 学習に全データを⽤いたモデルのスコア • CV : 0.8837 • PublicLB : 0.8944 > 学習にCleanデータのみを⽤いたモデルのスコア • CV : 0.9206(ちょっとleakしてます。) • PublicLB : 0.8910
  9. Data Strategy and Operation Center どんなコンペだったか 11 重要なポイント • LeaderBorad上のスコアに⼤きな差がなかったこと

    • Private test setの画像数は約10000枚 • ⾃分のモデルはざっくり10000枚中8990枚のラベルを当てられていた • +2枚(0.8992)当てていたら、順位は226位→172~202位のどこか
  10. Data Strategy and Operation Center どんなコンペだったか 12 運 が⽀配する要素が⼤きそう Twitterでは

    おみくじコンペ Discussionでは lottery(宝くじ) と呼ばれる😂 重要なポイント • データセットにおける画像のラベリングミスが⾮常に多い • PublicLBの評価に使われているデータセットもNoisyである • LeaderBorad上のスコアに⼤きな差がなかったこと
  11. Data Strategy and Operation Center (⼀応)ソリューション 14 LB最⾼のsub > (efficientnet,

    resnext) * (5fold) * (4epoch) * (TTA10)のmean > CV : 0.898, PublicLB : 0.903, PrivateLB : 0.899 > Size : 512 > loss : LabelSmoothingCrossEntropy(epsilon=0.1) > Cutout > Batch Normalization layerのweightを、epoch前半のみ固定 CV最⾼のsub(clean) > (efficientnet, resnext, vit) * (5fold) * (TTA3)のmean > CV : 0.921, PublicLB : 0.900, PrivateLB : 0.897 > cleanlabを⽤いてnoisyと判断されたデータを除外して学習 CV最⾼のsub(All data, 未選択) > CV: 0.903, PublicLB : 0.900, PrivateLB : 0.901 😇 > RandomResizedCropとResizeのEnsemble
  12. Data Strategy and Operation Center Noisy labelにどう対抗するか 17 PublicLB PrivateLB

    resnext50_32x4d 0.8930 0.8916 vit_base_patch16_384 0.8921 0.8899 tf_efficientnet_b3_ns 0.8975 0.8921 上記3つのmean 0.9005 0.8999 • 学習データにfitさせすぎない > 多くのモデルでensembleを⾏う • 今回のようなNoisyデータセットでは特に重要だと感じた • 3modelのmeanを取るだけでPublicLBでは約0.005, PrivateLBでは約0.009程度 精度が向上
  13. Data Strategy and Operation Center Noisy labelにどう対抗するか 18 • 学習データにfitさせすぎない

    > noisyなlabelであることを考慮できるlossを選択する • lossに対するlabel smoothingの利⽤ • Bi-Tempered Logistic Loss • Symmetric Cross Entropy Loss
  14. Data Strategy and Operation Center Noisy labelにどう対抗するか • 学習データにfitさせすぎない >

    noisyなlabelであることを考慮できるlossを選択する • lossに対するlabel smoothingの利⽤ • 1,0のlabelを、学習時に0.95,0.05などに変換してlossを計算することで、 学習データにfitさせすぎないようにする⽅法
  15. Data Strategy and Operation Center Noisy labelにどう対抗するか 20 • 学習データにfitさせすぎない

    > noisyなlabelであることを考慮できるlossを選択する • Bi-Tempered Logistic Loss • Logistic lossが持つ「外れ値に全体のlossが⽀配される点」 「labelが誤っているsampleによって決定境界が広がってしまう点」に対するloss https://ai.googleblog.com/2019/08/ bi-tempered-logistic-loss-for-training.html
  16. Data Strategy and Operation Center Noisy labelにどう対抗するか 21 q =

    q(k|x) はground truthの分布 p = p(k|x) はpredictionの分布 • 学習データにfitさせすぎない > noisyなlabelであることを考慮できるlossを選択する • Symmetric Cross Entropy Loss • Noisy lableの場合、ground truthが真の分布ではなく、 predictionがある程度真の分布を表すことを考慮したloss https://arxiv.org/pdf/1908.06112.pdf
  17. Data Strategy and Operation Center Noisy labelにどう対抗するか 22 https://www.kaggle.com/c/cassava-leaf-disease-classification/discussion/203594≈ •

    学習データにfitさせすぎない > モデルのBacth Normalizarion layerのweightを学習前半のみ固定する • weightをtrainデータに合わせすぎない
  18. Data Strategy and Operation Center Noisy labelにどう対抗するか 23 hard label

    : [0,0,1,0] soft label : [0.01,0.73,0.25,0.01] New label : [0.003,0.219,0.775,0.003] • 学習データにfitさせすぎない > knowledge distillation method • ⼀度予測した結果のoof(soft label)と、groud truthのlabel(hard label)を⾜し合わせ て、soft labelとして再度学習する⼿法 • 過去コンペのPlant Pathology 2020の1st Solutionで⽤いられていた⼿法 • Discussion投稿者はスコアが改善したと記載(⾃分は時間が⾜らず未実施) https://www.kaggle.com/c/cassava-leaf-disease-classification/discussion/215607
  19. Data Strategy and Operation Center Noisy labelにどう対抗するか 25 • Noisy

    labelのデータを処理する > Confident Learning • Noisy label込みで学習した予測結果を、真のclassと仮定し、与えられたclassと合わ せて同時分布を⽣成した後、モデルの予測確率を照らし合わせることでNoisy label を検出 https://arxiv.org/pdf/1911.00068.pdf
  20. Data Strategy and Operation Center Noisy labelにどう対抗するか 26 • Noisy

    labelのデータを処理する > Confident Learning • Noisy Data込みでの予測を⾏う https://aotamasaki.hatenablog.com/entry/confident_learning
  21. Data Strategy and Operation Center Noisy labelにどう対抗するか 27 • Noisy

    labelのデータを処理する > Confident Learning • Noisy Data込みでの予測を⾏う • Predictionが最も⾼いclassを真のclass と仮定し、 𝐶! ","∗ を作成 https://aotamasaki.hatenablog.com/entry/confident_learning 例 与えられたclassが [dog, fox, cow] = [0, 1, 0]で Predictionが[dog, fox, cow] = [0.8, 0.1, 0.1]のとき 真のclassをdogと考え、 $ y (与えられたclass) = fox, y∗ (真のclass) = dogとしてC" #,#∗ へカウントする。 ただし、各クラスの平均出⼒確率を上回る Predictionのみカウント。
  22. Data Strategy and Operation Center Noisy labelにどう対抗するか 28 • Noisy

    labelのデータを処理する > Confident Learning • Noisy Data込みでの予測を⾏う • Predictionが最も⾼いclassを真のclass と仮定し、 𝐶! ","∗ を作成 • 正規化を⾏い、 " 𝑄! ","∗ を⽣成 https://aotamasaki.hatenablog.com/entry/confident_learning
  23. Data Strategy and Operation Center Noisy labelにどう対抗するか 29 • Noisy

    labelのデータを処理する > Confident Learning • Noisy Data込みでの予測を⾏う • Predictionが最も⾼いclassを真のclass と仮定し、 𝐶! ","∗ を作成 • 正規化を⾏い、 " 𝑄! ","∗ を⽣成 • " 𝑄! ","∗ を⽤いて、Dirty Dataを検出 https://aotamasaki.hatenablog.com/entry/confident_learning
  24. Data Strategy and Operation Center Noisy labelにどう対抗するか 30 • Noisy

    labelのデータを処理する > Confident Learning • ライブラリが⾮常に使いやすい • Noisyデータを⾒つける場合 のあと、 clf.noise_maskを確認するだけ https://github.com/cgnorthcutt/cleanlab
  25. Data Strategy and Operation Center testもNoisyなデータへの対抗記録 31 • Noise Classifierの構築

    • Cleanlabの考え⽅を応⽤ • is_noisyフラグをstackingにて利⽤
  26. Data Strategy and Operation Center testもNoisyなデータへの対抗記録 33 • Noise Classifierの構築

    • CleanlabにてNoisyと判断された画像を1,それ以外を0とした判別器Noise Classifier を構築し、Noiseデータかどうかを⾒分けたい • 結果として、oofに対するprecisionが22%で低い • 撤退
  27. Data Strategy and Operation Center testもNoisyなデータへの対抗記録 35 • Cleanlabの考え⽅を応⽤ •

    Cleanlabでは、別のラベルへの間違えやすいさ(誤り分布)を⽤いて計算 • 例えば、0というラベルは「0 : 0.77, 4 : 0.12, 1 : 0.06, 3 : 0.03, 2 : 0.02」という確 率で他のラベルに間違えらえやすい https://www.kaggle.com/telljoy/noisy-label-eda-with-cleanlab
  28. Data Strategy and Operation Center testもNoisyなデータへの対抗記録 36 • Cleanlabの考え⽅を応⽤ >

    誤り分布を利⽤し、下記のようなことを実施 • 誤り分布を、全てのpredの結果にかけてみる • 最もnaiveな⽅法。案の定、CV:0.8924→0.8335に落ちたため却下 • 誤り分布を、cleanlabにてNoisyと判別された画像にだけかけてみる • CV:0.8924→0.8870に落ちたため却下
  29. Data Strategy and Operation Center testもNoisyなデータへの対抗記録 37 All model predict

    All predict 🤔? Clean model predict Clean predict 😊! postprocess postprocess All predict × 誤り分布 Clean predict × 誤り分布 現実も多分 こんな感じ • Cleanlabの考え⽅を応⽤ > 誤り分布を利⽤し、下記のようなことを実施 cleanlabにてcleanと判断された画像のみを使ったモデルの予測値に、誤り分布をかける • 上述までの⽅法は全て、Noisy labelな画像も⽤いて学習したモデル(All model)の予測に対して、 誤り分布を適⽤ • 今回の⽅法では、Cleanlabelな画像のみを⽤いて学習したモデル(Clean model)にて予測した結 果に、誤り分布を適⽤
  30. Data Strategy and Operation Center testもNoisyなデータへの対抗記録 38 • Cleanlabの考え⽅を応⽤ >

    誤り分布を利⽤し、下記のようなことを実施 cleanlabにてcleanと判断された画像のみを使ったモデルの予測値に、誤り分布をかける • All modelとclean modelの予測ラベルが異なる部分をNoisyな画像と判断 • LBが0.895→0.894に低下し、却下
  31. Data Strategy and Operation Center testもNoisyなデータへの対抗記録 40 • is_noisyフラグをstackingにて利⽤ >

    各画像がnoisyかどうかを表すフラグ, is_noisyを付与 > is_noisyを特徴量に与え、LightGBMにてstacking > stacking時にLightGBMがis_noisyかどうかで利⽤する特徴量を分けてくれたら、 と期待 > is_noisyを含めた場合はCV:0.8991であり、is_noisyを含めなかった場合は CV:0.8997であったため、不採⽤
  32. Data Strategy and Operation Center 学んだこと 41 • pytorchの使い⽅ •

    pytorch image modelsの使い⽅ • Snapmix, gradient_accumulation_stepsなどの画像の⼿法 • Noisy labelに有効なloss • Confident Learningの考え⽅、cleanlabの使い⽅ • Weight & Biasesによる実験管理