Slide 1

Slide 1 text

Noisy label 対抗記 ~Cassava Leaf Disease Classification~ 分析コンペ勉強会 (2021.03.02)

Slide 2

Slide 2 text

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 研究員 オンライン名刺

Slide 3

Slide 3 text

Data Strategy and Operation Center Contents • どんなコンペだったか • なぜ取り組んだか • (⼀応)ソリューション • Noisy labelにどう対抗するか • testもNoisyなデータへの対抗記録 • まとめ

Slide 4

Slide 4 text

Data Strategy and Operation Center お礼 今回のコンペ参加にあたり、 Sansan DSOC 研究開発部 Kaggle部の GCPリソースを⼤いに活⽤させて頂きました。 この場を借りて感謝します🙇

Slide 5

Slide 5 text

Data Strategy and Operation Center 結果 • 銅メダル(226th / 3900, Top6%) • 画像コンペでは初メダルなので、ちょっと嬉しいが、もっと上⾏きたかった。

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

Data Strategy and Operation Center どんなコンペだったか 6 データセット > train : 21397枚, test : 15000枚(31% : Public, 69% : Private) > 直近の画像コンペの中では良⼼的なサイズ 評価指標 https://developers.google.com/machine-learning/crash-course/classification/accuracy

Slide 8

Slide 8 text

Data Strategy and Operation Center どんなコンペだったか 7 重要なポイント • データセットにおける画像のラベリングミスが⾮常に多い • PublicLBの評価に使われているデータセットもNoisyである • LeaderBorad上のスコアに⼤きな差がなかったこと

Slide 9

Slide 9 text

Data Strategy and Operation Center どんなコンペだったか 8 重要なポイント • データセットにおける画像のラベリングミスが多い(Noisy label) https://www.kaggle.com/telljoy/noisy-label-eda-with-cleanlab

Slide 10

Slide 10 text

Data Strategy and Operation Center どんなコンペだったか 9 重要なポイント • データセットにおける画像のラベリングミスが多い(Noisy label) https://www.kaggle.com/telljoy/noisy-label-eda-with-cleanlab

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

Data Strategy and Operation Center どんなコンペだったか 11 重要なポイント • LeaderBorad上のスコアに⼤きな差がなかったこと • Private test setの画像数は約10000枚 • ⾃分のモデルはざっくり10000枚中8990枚のラベルを当てられていた • +2枚(0.8992)当てていたら、順位は226位→172~202位のどこか

Slide 13

Slide 13 text

Data Strategy and Operation Center どんなコンペだったか 12 運 が⽀配する要素が⼤きそう Twitterでは おみくじコンペ Discussionでは lottery(宝くじ) と呼ばれる😂 重要なポイント • データセットにおける画像のラベリングミスが⾮常に多い • PublicLBの評価に使われているデータセットもNoisyである • LeaderBorad上のスコアに⼤きな差がなかったこと

Slide 14

Slide 14 text

Data Strategy and Operation Center なぜ取り組んだか 13 画像コンペよく分からんから 簡単そうなのやりたい testもNoisyなデータセット対策ができれば 上位⼊賞できるのでは?😏(ダメでした)

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

Data Strategy and Operation Center Noisy labelにどう対抗するか 15 • 学習データにfitさせすぎない • Noisy labelのデータを処理する

Slide 17

Slide 17 text

Data Strategy and Operation Center Noisy labelにどう対抗するか 16 • 学習データにfitさせすぎない •

Slide 18

Slide 18 text

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程度 精度が向上

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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データに合わせすぎない

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

Data Strategy and Operation Center Noisy labelにどう対抗するか 24 • • Noisy labelのデータを処理する

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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のみカウント。

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

Data Strategy and Operation Center Noisy labelにどう対抗するか 30 • Noisy labelのデータを処理する > Confident Learning • ライブラリが⾮常に使いやすい • Noisyデータを⾒つける場合 のあと、 clf.noise_maskを確認するだけ https://github.com/cgnorthcutt/cleanlab

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

Data Strategy and Operation Center testもNoisyなデータへの対抗記録 32 • Noise Classifierの構築 • •

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

Data Strategy and Operation Center testもNoisyなデータへの対抗記録 34 • • Cleanlabの考え⽅を応⽤ •

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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)にて予測した結 果に、誤り分布を適⽤

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

Data Strategy and Operation Center testもNoisyなデータへの対抗記録 39 • • • is_noisyフラグをstackingにて利⽤

Slide 41

Slide 41 text

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であったため、不採⽤

Slide 42

Slide 42 text

Data Strategy and Operation Center 学んだこと 41 • pytorchの使い⽅ • pytorch image modelsの使い⽅ • Snapmix, gradient_accumulation_stepsなどの画像の⼿法 • Noisy labelに有効なloss • Confident Learningの考え⽅、cleanlabの使い⽅ • Weight & Biasesによる実験管理

Slide 43

Slide 43 text

Data Strategy and Operation Center 反省点 42 • DiscussionやNotebookで有効とされている⽅法を追うのに 時間を使いすぎてしまい、⾃分で考えた⼿法をあまり試せなかった。 • CVの計算を、後半⾏わなかったり、⼀部適当になってしまった。⼤反 省。

Slide 44

Slide 44 text

No content