Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

自己紹介  序盤の流れ   解法紹介   ほか 自己紹介 唐澤 拓己(からさわ たくみ) AI 研究開発エンジニア 出身:東京大学 原田研究室 @Takarasawa_ Interest: - 物体検出 - ドメインアダプテーション 鈴木 智之(すずき ともゆき) AI 研究開発エンジニア 出身:慶応大学 青木研究室 @tomoyukun Interest: - 表現学習 - 動画認識 *公開のため詳細は割愛

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

自己紹介  序盤の流れ   解法紹介   ほか 結果 79位 でした。銀メダル嬉しいです m(_ _)m 一応ふたりとも Expert なれました〜 Suzuki: https://www.kaggle.com/tomoyukun Karasawa: https://www.kaggle.com/t9krsw

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

自己紹介  序盤の流れ   解法紹介   ほか 序盤:どうトライする? 分類か?いや回帰か?

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

自己紹介  序盤の流れ   解法紹介   ほか 前半: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]

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

自己紹介  序盤の流れ   解法紹介   ほか 解法紹介:Approaches Approach 1. Regression Approach 2. Binary Classification * 4 Approach 3. Classification -> Integration

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

自己紹介  序盤の流れ   解法紹介   ほか 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

Slide 18

Slide 18 text

自己紹介  序盤の流れ   解法紹介   ほか 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

Slide 19

Slide 19 text

自己紹介  序盤の流れ   解法紹介   ほか Approach ほかのボツ ふつうの Classification 安定感がなかった Ordinal Regression ある程度は上手くいってたが間に合わず

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

自己紹介  序盤の流れ   解法紹介   ほか 解法紹介:基本事項いくつか(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 - なんか前回のコンペのデータ使うとスコア上がるらしい?とディスカッションで見つけた - 「ディスカッション様様」 おそらく両方学習不十分 ….

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

自己紹介  序盤の流れ   解法紹介   ほか 解法紹介:ほか、効かなかったこと 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

Slide 25

Slide 25 text

自己紹介  序盤の流れ   解法紹介   ほか 解法紹介:ほか、効かなかったこと 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 しておくことで精度改善を行う。 *一応効いたが、効かないケースが出てしまって検証の時間なかったので省いた。

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

自己紹介  序盤の流れ   解法紹介   ほか 解法紹介:最終的に 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)

Slide 28

Slide 28 text

自己紹介  序盤の流れ   解法紹介   ほか 解法紹介:最終的に 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分くらいバッファとって、、、 むしろオーバーヘッド分減るはずだったのに、、、、

Slide 29

Slide 29 text

自己紹介  序盤の流れ   解法紹介   ほか 解法紹介:最終的に 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 にスコアリング完了。 提出できず。 <すごいなんとも言えない感情に陥る>

Slide 30

Slide 30 text

自己紹介  序盤の流れ   解法紹介   ほか 解法紹介:最終的に 結局、出していた予備 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) 負け惜しみ感たっぷり、、( 一応解法の共有としては、、)

Slide 31

Slide 31 text

自己紹介  序盤の流れ   解法紹介   ほか 解法紹介:スコア詳細 - スケール ● 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

Slide 32

Slide 32 text

自己紹介  序盤の流れ   解法紹介   ほか 解法紹介:スコア詳細 - アプローチ ● 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

Slide 33

Slide 33 text

自己紹介  序盤の流れ   解法紹介   ほか (勉強会のためのスライド割愛 ) ご清聴ありがとうございました。 何か為になる知見があれば幸いです。