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

APTOS 2019 Blindness Detection 勉強会資料

C31b5afbe1ffb5588b2fe5a9e39b357b?s=47 Takumi Karasawa
September 23, 2019

APTOS 2019 Blindness Detection 勉強会資料

2019/09/23 に開催された APTOS 2019 Blindness Detection 勉強会 にて発表させていただいた資料です

C31b5afbe1ffb5588b2fe5a9e39b357b?s=128

Takumi Karasawa

September 23, 2019
Tweet

Transcript

  1. APTOS 2019 Blindness Detection 勉強会資料 79th solution Takumi Karasawa, Tomoyuki

    Suzuki VS
  2. 自己紹介  序盤の流れ   解法紹介   ほか 自己紹介 唐澤 拓己(からさわ たくみ)

    AI 研究開発エンジニア 出身:東京大学 原田研究室 @Takarasawa_ Interest: - 物体検出 - ドメインアダプテーション 鈴木 智之(すずき ともゆき) AI 研究開発エンジニア 出身:慶応大学 青木研究室 @tomoyukun Interest: - 表現学習 - 動画認識 *公開のため詳細は割愛
  3. 自己紹介  序盤の流れ   解法紹介   ほか 結果 79位 でした。銀メダル嬉しいです m(_

    _)m
  4. 自己紹介  序盤の流れ   解法紹介   ほか 結果 79位 でした。銀メダル嬉しいです m(_

    _)m 一応ふたりとも Expert なれました〜 Suzuki: https://www.kaggle.com/tomoyukun Karasawa: https://www.kaggle.com/t9krsw
  5. 序盤の流れ・解法紹介 * 勉強会用の資料で、アップロードを予定していなかったため コンペ概要説明のスライドがありません。 参考:勉強会を主催していただいた @Maxwell_110 さんの資料 https://speakerdeck.com/hoxomaxwell/aptos-2019-28th-place-solution

  6. 自己紹介  序盤の流れ   解法紹介   ほか 初日:コンペ選び 画像系の kaggle やってみるか、と思ったら3つのコンペが同時に出てきた

     初めてなら取り組みやすそうな分類?   画像系なら Segmentation とかのほうが有利か? 人数?             
  7. 自己紹介  序盤の流れ   解法紹介   ほか 初日:コンペ選び 画像系の kaggle やってみるか、と思ったら3つのコンペが同時に出てきた

     初めてなら取り組みやすそうな分類?   画像系なら Segmentation とかのほうが有利か? 人数?                →  結局よくわからんので APTOS に。。。 Q1. 皆さん、どうやってやりやすいとか選んでるんでしょうか?? ( Kagglerの方々のツイートを見る限り データの闇が深いものを選んでしまった.... ??)
  8. 自己紹介  序盤の流れ   解法紹介   ほか 序盤:どうトライする? 分類か?いや回帰か?

  9. 自己紹介  序盤の流れ   解法紹介   ほか 序盤:どうトライする? 分類か?いや回帰か? なんかそれぞれ明確に症状があるらしい ..

    これは分類か? いやとはいえ深刻化していく連続的な変化か?
  10. 自己紹介  序盤の流れ   解法紹介   ほか 序盤:どうトライする? 分類か?いや回帰か? なんかそれぞれ明確に症状があるらしい ..

    これは分類か? いやとはいえ深刻化していく連続的な変化か? データ見たら正常(diagnosis: 0)が多い。。。 そもそも正常かの二値分類からの回帰もありか? 正常/異常 正常: 0 異常度合い 1 ~ 4 分類 回帰 というかこういうケースの手法とかあるのでは?
  11. 自己紹介  序盤の流れ   解法紹介   ほか 序盤:どうトライする? 分類か?いや回帰か? なんかそれぞれ明確に症状があるらしい ..

    これは分類か? いやとはいえ深刻化していく連続的な変化か? データ見たら正常(diagnosis: 0)が多い。。。 そもそも正常かの二値分類からの回帰もありか? 正常/異常 正常: 0 異常度合い 1 ~ 4 分類 回帰 というかこういうケースの手法とかあるのでは? 「いやまぁ、とりまやってみんとわからん。全部やってみるか」
  12. 自己紹介  序盤の流れ   解法紹介   ほか 序盤:どうトライする? 分類か?いや回帰か? なんかそれぞれ明確に症状があるらしい ..

    これは分類か? いやとはいえ深刻化していく連続的な変化か? データ見たら正常(diagnosis: 0)が多い。。。 そもそも正常かの二値分類からの回帰もありか? 正常/異常 正常: 0 異常度合い 1 ~ 4 分類 回帰 というかこういうケースの手法とかあるのでは? 「いやまぁ、とりまやってみんとわからん。全部やってみるか」 Q2. みなさん、一番最初って何を重視して動かれるんですか?
  13. 自己紹介  序盤の流れ   解法紹介   ほか 前半:cross validation 独特な数値で画像サイズが揃っている ....

    - 画像サイズによって提供元が違いそう。とすると画像の質も。 - CNN が本質じゃないデータの質で識別できた気になっちゃうのよくある。 クラスの偏りもすごい... → でもまぁ影響度的に提供元方向に汎化した方が良さそう • 画像サイズをもとに Group Fold • 評価は Loss、Kappa、Normalized Kappa LB の混沌も知らず、なぜか 0 sub のまま 1ヶ月くらいこれで実験 画像サイズ データ数 [358. 474.] [0, 0, 1, 0, 1, 2] [480. 640.] [0, 0, 33, 5, 4, 42] [614. 819.] [279, 7, 1, 0, 0, 287] [1000. 1504.] [0, 2, 63, 9, 18, 92] [1050. 1050.] [901, 19, 39, 2, 13, 974] [1110. 1467.] [0, 0, 2, 0, 0, 2] [1117. 1476.] [10, 0, 0, 2, 2, 14] [1226. 1844.] [0, 13, 28, 1, 19, 61] [1424. 2144.] [0, 1, 22, 3, 2, 28] [1536. 2048.] [351, 0, 0, 0, 0, 351] [1736. 2416.] [31, 234, 233, 60, 80, 638] [1764. 2146.] [0, 0, 0, 1, 0, 1] [1944. 2896.] [0, 6, 3, 21, 4, 34] [1958. 2588.] [231, 44, 165, 47, 46, 533] [2136. 3216.] [2, 13, 307, 32, 56, 410] [2588. 3388.] [0, 13, 91, 6, 31, 141] [2848. 4288.] [0, 18, 11, 4, 19, 52]
  14. 自己紹介  序盤の流れ   解法紹介   ほか 中盤:提出してみた なんか CV /

    LB ですごい差がでてるらしい。まぁ大丈夫っしょ。 → LB 0.753 「ふぁ?」 妥当なことしてるつもりでいたが、自分らがしょぼいのかコンペが闇なのか判断つかず 5 sub/日 試せるほど実験してないくせに節約する意味ないやん、、、となり、 過学習には気をつけつつ 、もう LB みながらやるか、となった。 感想「Kaggle、こわ。」
  15. 自己紹介  序盤の流れ   解法紹介   ほか 解法紹介:Approaches Approach 1. Regression

    Approach 2. Binary Classification * 4 Approach 3. Classification -> Integration
  16. 自己紹介  序盤の流れ   解法紹介   ほか Approach 1:Regression 通常の回帰。 Train:

    スカラーで出力、MSE で学習 Inference: [0.8, 1.6, 2.4, 3.2] の閾値で切ってラベル出力。 - 0 ~ 4の区間を五等分 - MSE 的に中央に寄るため ( 実際CM見ても寄ってた ) * 閾値の最適化も一応やったが、過学習とかわからないので引っ込めた。 Model 2.7 3 MSE
  17. 自己紹介  序盤の流れ   解法紹介   ほか Approach 2:Binary Cls x

    4 5つの症状の4つの境目を二値分類。回帰の意味合いを収束容易な二値分類で。 Train: 4つの出力をBCEで学習。 • 0 / 1以上 • 1以下 / 2 以上 • 2以下 / 3 以上 • 3以下 / 4 Inference: 4つの出力の合計を [0.8, 1.6, 2.4, 3.2] の閾値で切ってラベル出力 *4つモデル完全に分ける、ブランチで分離するとかの比較検証はできず * 推論もう少しやり方あったかな ...? Model 2 0.9 0.8 0.1 0.1 1 1 0 0 それぞれ BCE 0.9 0.8 0.1 0.1 SUM 1.9
  18. 自己紹介  序盤の流れ   解法紹介   ほか Approach 3:Cls -> Integration

    分類タスクとして解き、期待値の損失を加えて大小関係を加味。 Train: 分類 CE + 期待値 MSE で学習。 Inference: 事後確率の期待値を出力として使用。 ラベル出力の閾値は [0.5, 1.5, 2.5, 3.5] * もっとも単体ではスコアが良かったアプローチ。 Model 1 0.2 0.7 0.1 0. 0. 0 1 0 0 0 CE 0.2 * 0 + 0.7 * 1 + 0.1 * 2 + 0. * 3 + 0. * 4 0.9 MSE
  19. 自己紹介  序盤の流れ   解法紹介   ほか Approach ほかのボツ ふつうの Classification

    安定感がなかった Ordinal Regression ある程度は上手くいってたが間に合わず
  20. 自己紹介  序盤の流れ   解法紹介   ほか 解法紹介:基本事項いくつか(1/3) Preprocessing - 黒色の部分のカット。

    - 基本的に思い当たる前処理 (エッジ処理等) が CNN で表現可能な気がしてあまり行わず。 (優先順位的な問題。効果があるのか見てみたかった。特に BensCrop) Architecture - Res18, Res50, Res152, Senex50, Senex101 等試していた - Efficient net 良いらしいことを見かけてからはずっと Efficient net - B4, B5 あたりっしょって思ってそれ以外試しておらず - まとめると「ディスカッション様様 」
  21. 自己紹介  序盤の流れ   解法紹介   ほか 解法紹介:基本事項いくつか(2/3) Augmentation - flip,

    rot, crop, color jitter(, cutout, mixup) - 全手法CVにて精度向上した cutout が LB で全手法が精度が下がる。 最もCV不信になった瞬間。 - 元々直感に反して効かないと切り捨てた rot とかも入れたり適当にぶちこむ。 Resolution - 最初に高解像度の話をしておきながら、二日前くらいまで失念し (224, 224) でやりつづけた。 - 解像度の話をディスカッションでギリギリ見つけ、エポック数減らして回した Efficient Net b4:(380, 380)、Efficient Net b5:(456, 456) External Data - なんか前回のコンペのデータ使うとスコア上がるらしい?とディスカッションで見つけた - 「ディスカッション様様」 おそらく両方学習不十分 ….
  22. 自己紹介  序盤の流れ   解法紹介   ほか 解法紹介:基本事項いくつか(2/3) Pseudo Labeling -

    手元では上がったり下がったり - Public LB を信じれていなかったので引っ込めた ( 2 sub 目に使っても良いかなとかの話はあった。) Ensembling - 基本方針:Kappa score による評価だったので、単純な平均系統で行こうと。 - Mean Ensembling:出力のスケールあってない - Label Average:単純にそれぞれでラベルまで出力して平均 - Scaled Average:各アプローチの閾値を参考に 区分ごとに線形スケールして平均 - Weighted Average、Ridge Stacking、Voting、Group Voting:いろいろ試してみるが特に向上なし
  23. 自己紹介  序盤の流れ   解法紹介   ほか 解法紹介:ほか、効かなかったこと Balanced sampling -

    クラスバランス均等になるようにサンプリング。特に向上なし。 Loss - focal loss:hard example に焦点当てるべきタスクかと感じて使ったが、特に向上なし。 - kappa loss:classification の場合は各クラスの確率が出るので, batch 単位で kappa を直接最大化させる.データ依 存感が強い。CV / LB のギャップもあったためやめた。
  24. 自己紹介  序盤の流れ   解法紹介   ほか 解法紹介:ほか、効かなかったこと TTA: Two Crop

    / Twelve Crop - cv において精度が、Center Crop 単体 > Ten Crop だったことがあった。 - 端っこないほうが良いのでは? <通常の Ten Crop> 4 corners + Center x 2 flip Two Crop: 精度が同程度なら 10回も推論は時間の無駄では? (他のアンサンブルしたい) x 2 flip Twelve Crop: Ten Crop 普通は有効なのだから中心で同じことを。 Two Crop + に対して Ten Crop
  25. 自己紹介  序盤の流れ   解法紹介   ほか 解法紹介:ほか、効かなかったこと Size fine-tuning:“Fixing the

    train-test resolution discrepancy”, facebook AI research, 2019 - 学習時と推論時で解像度が異なりデータのスケール分布が異なるため、一般に精度が劣化する。 Train: random resized crop ⇔ Test(Valid): Ten Crop(Center Crop) - 学習最後に推論の解像度を用いて fine-tuning しておくことで精度改善を行う。 *一応効いたが、効かないケースが出てしまって検証の時間なかったので省いた。
  26. 自己紹介  序盤の流れ   解法紹介   ほか 解法紹介:ほか、効かなかったこと ABN: “Attention Branch

    Network: Learning of Attention Mechanism for Visual Explanation”, CVPR 2019 - CAMのような Activation Map を Attention Map としてネットワーク内に組み込む。 - Attention Map を生成するための Branch 側に関してもクラス分類確率を出力しマルチタスクで学習。 * 網膜データの性質的に Spatial な Attention が効きそうだったので採用したが、さして変化なし。 普通のものに加えて計算が重いので引っ込めた
  27. 自己紹介  序盤の流れ   解法紹介   ほか 解法紹介:最終的に 3 approaches ×

    2 scales = 6 models の Label Average 選択基準: - 途中で提出していた ensemble の上がり幅が Architecture Ensemble << Approaches Ensemble これを軸にマルチスケールで高精度化。アーキテクチャは時間制限の調整でB4 • Regression • Classification -> Integration • BCE × • Efficient Net b4 (224 × 224) • Efficient Net b4 (380 × 380)
  28. 自己紹介  序盤の流れ   解法紹介   ほか 解法紹介:最終的に 3 approaches ×

    2 scales = 6 models の Label Average 選択基準: - 途中で提出していた ensemble の上がり幅が圧倒的に Architecture Ensemble << Approaches Ensemble これを軸にマルチスケールで高精度化。アーキテクチャは時間制限の調整でB4 • Regression • Classification -> Integration • BCE × • Efficient Net b4 (224 × 224) • Efficient Net b4 (380 × 380) なんなら時間合わせるために学習減らしたりまで調整していた。。。 Private の時間測れないが、一応概算して 30分くらいバッファとって、、、 むしろオーバーヘッド分減るはずだったのに、、、、
  29. 自己紹介  序盤の流れ   解法紹介   ほか 解法紹介:最終的に 3 approaches ×

    2 scales = 6 models の Label Average 選択基準: - 途中で提出していた ensemble の上がり幅が圧倒的に Architecture Ensemble << Approaches Ensemble これを軸にマルチスケールで高精度化。アーキテクチャは時間制限の調整でB4 • Regression • Classification -> Integration • BCE × • Efficient Net b4 (224 × 224) • Efficient Net b4 (380 × 380) 8時間推論後、9:03 AM にスコアリング完了。 提出できず。 <すごいなんとも言えない感情に陥る>
  30. 自己紹介  序盤の流れ   解法紹介   ほか 解法紹介:最終的に 結局、出していた予備 sub が通る。。

    Public: 0.804/ Private: 0.923 (79 / 2944位) Public: 0.808/ Private: 0.927 (33 / 2944位) • Regression • Classification -> Integration • BCE • Efficient Net b5 (456 × 456) • Regression • Classification -> Integration • BCE × • Efficient Net b4 (224 × 224) • Efficient Net b4 (380 × 380) 負け惜しみ感たっぷり、、( 一応解法の共有としては、、)
  31. 自己紹介  序盤の流れ   解法紹介   ほか 解法紹介:スコア詳細 - スケール •

    Regression • Classification -> Integration • BCE ① Efficient Net b4 (224 × 224) • Regression • Classification -> Integration • BCE × ① Efficient Net b4 (224 × 224) ② Efficient Net b4 (380 × 380) Public: 0.808/ Private: 0.927 Public: 0.806/ Private: 0.923 • Regression • Classification -> Integration • BCE ② Efficient Net b4 (380 × 380) Public: 0.802/ Private: 0.923
  32. 自己紹介  序盤の流れ   解法紹介   ほか 解法紹介:スコア詳細 - アプローチ •

    Regression • Classification -> Integration • BCE ① Efficient Net b4 (224 × 224) Public: 0.806 • Regression ① Efficient Net b4 (224 × 224) Public: 0.792 • Classification -> Integration ① Efficient Net b4 (224 × 224) Public: 0.802 • BCE ① Efficient Net b4 (224 × 224) Public: 0.794
  33. 自己紹介  序盤の流れ   解法紹介   ほか (勉強会のためのスライド割愛 ) ご清聴ありがとうございました。 何か為になる知見があれば幸いです。