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

Kaggle State Farm Distracted Driver Detection

Avatar for Takuya Akiba Takuya Akiba
February 04, 2017

Kaggle State Farm Distracted Driver Detection

Kaggle の画像分類コンテスト State Farm Distracted Driver Detection にて 1440 チーム中 9 位を取った際のアプローチについて。

Avatar for Takuya Akiba

Takuya Akiba

February 04, 2017
Tweet

More Decks by Takuya Akiba

Other Decks in Programming

Transcript

  1. \ ヽ | / / \ ヽ | / /

    \ / _ わ た し で す _ / ̄\ ― |^o^| ― \_/  ̄  ̄ / \ / / | ヽ \ / / | ヽ \
  2. クラス c0: normal driving c1: texting - right c2: talking

    on the phone - right c3: texting - left c4: talking on the phone - left c5: operating the radio c6: drinking c7: reaching behind c8: hair and makeup c9: talking to passenger
  3. 余談:LB での accuracy l 普通に提出するとテストデータの public LB 部分 での logloss

    が⼿に⼊る(当たり前) l 実はテストデータの public LB 部分での accuracy も⼿に⼊れられる n 予想確率を one-hot っぽくして提出 (例:予想クラスを 0.91、それ以外を 0.01) n 正解時のスコアと不正解時のスコアが⼀定 n 正解の割合が計算できる
  4. Validation はちゃんとやる l Train / validation を完全ランダムに選択し ていた l 同じドライバーの画像は極めて似てる

    l テストデータと訓練データは違うドライバー l Train / validation もドライバーで分割しな いとだめ(そのための driver_imgs_list.csv!) l ド定番素⼈ミス
  5. Pre-trained VGG16 l このコンテストは external data 使⽤可 l Kaggle では初?

    Forum では議論が⽩熱 l Pre-trained model は絶対使う⽅が良い (と思った) l Pre-trained model を使うため、 CNN のモデルは既存のものから選ぶだけ(楽になった?)
  6. Pre-trained VGG16 l 当時定番っぽかった VGG16 を選択 l Fine tuning は⼩さめの学習率

    n 0.001 とかからスタート n (参考:ImageNet は普通 0.1 スタート) l 2,3 エポックで validation loss はサチってた (短い気がするが後述のデータの性質が関係?)
  7. 仮説2 l データが既に “Augment” されている? l 動画切り出しでデータが作られており、 同じドライバーの同じクラスの画像は酷似 【極端な解釈】 l

    ドライバー 26 ⼈ × 10 クラスで、 訓練データは本質的には 260 枚の「画像」 l 各「画像」は 100 枚弱に “Augment” されていて、 ⼊⼒データは 22 万枚である(ように錯覚している!?)
  8. 学習データが少ない! l 先程の「極端な解釈」によると本質的に訓練画像はたっ た 260 パターン l すぐモデルが overfit してしまうのは単純に学習データ

    が少なすぎるせいでは? l テストデータは 3 倍ぐらいある、利⽤できないか? l NDSB プランクトン分類コンペ優勝チームのブログによ ると Pseudo Labeling を使っている http://benanne.github.io/2015/03/17/plankton.html
  9. Pseudo Labeling とは l ⼀種の半教師有り学習のフレームワーク l 訓練データに加え、テストデータを⽤いて訓練 l テストデータのラベルは以前のモデルによる予測 l

    訓練データに対しテストデータが相対的に少なくな るように⼊れるほうが良いっぽい (NDSB 優勝チームは 2:1 になるようにしていたので僕もそれに従った)
  10. Pseudo Labeling の効果 l Pseudo Label にはアンサンブルで得たシングルモ デルより精度の⾼いラベルを使える l データが多くなり、より⼤きく汎化性能の⾼いモデ

    ルを安定して学習させられる(という説) Distillation に似ているが、Distillation は⼩さいモデルを作りたくて、Pseudo Labeling ではより⼤きいモデルを作りたい l 0.22374 → 0.21442
  11. 画像のまま k-NN l 計算が重いので画像は縮⼩して計算 l 距離は L2 より L1 のほうがやや精度が良い

    0.999 0.996 0.995 0.992 0.991 0.989 0.986 0.983 0.979 0.976 0.999 0.997 0.996 0.995 0.993 0.991 0.989 0.987 0.986 0.984 0.96 0.97 0.98 0.99 1 1 2 3 4 5 6 7 8 9 10 同じクラスの割合 k L2 L1
  12. Pseudo Labeling との相乗効果 l k-NN で予測結果を混ぜわせる l それを Pseudo Label

    にしてまた学習 l その予測結果を k-NN で混ぜ合わせて…… k-NN の関係をグラフだと思うと、 ちょっとグラフベース半教師有り学習っぽい
  13. ちなみに l k-NN なんてそんな荒削りなことするの、 ド素⼈な僕だけだよな・・・?と思ってた l が、フタを開けると、1 位を含むかなり多く の上位者が使っていた・・・! l

    あと、画像間の距離でのクラスタリングで⼈ 間がすっぱり別れないかとちょっと試したけ ど、そのまま使えそうな結果にはならず
  14. きっかけ l モデルをついに ResNet にした l これはスコア爆上げ間違い無し!( ・´ー・`)どや ・・・ l

    0.18072 が最⾼、0.17725 (VGG) を抜けない l ⼤きく悪くならないが、良くもならない
  15. 考えたこと l Pseudo Labeling が効きすぎているのでは? l Pseudo Label を暗記されてそのまま出⼒され ては困る

    l そこそこ離れた画像への Pseudo Label だけ が学習に影響してほしい l あと、完全なクラスタリングはどうしてもうまくいかないので、 クラスタリングがそこそこうまくいくっぽいことを利⽤したい
  16. Cross Pseudo Labeling 結果 l 0.17725 → 0.14573 l ⼤幅改善に成功

    (ただし ResNet への変更の影響も含むはず)