初めてKaggleに参加したので振り返り【Cassavaコンペ】

Kaggleは前々からやってみたいと思いつつハードルの高さからなかなか手が出なかったのですが、CassavaコンペでKaggleデビューしたのでやったことや今後の課題など振り返りたいと思います。

自己紹介

社会人2年目で、SIerの先端技術部署で画像系の機械学習/深層学習の研究開発みたいなことをしています。自分でモデルを作ったりするわけではなく、既存の手法が実際に使えるのかやどのような実装になっているかの調査などを行っています。そのため機械学習/深層学習の基本的な知識はありますが、データ分析の経験はほぼないです。
なのでデータ分析の知識・経験を得るため、1からモデルを構築する練習としてKaggleを始めてみました。

結果

f:id:Ktkt:20210222220855j:plain
Cassavaコンペ結果

255/3900 位で銅メダルでした。
最終提出時点で934位でメダルのことを何も考えていなかったので、これがShake芸というやつか・・・と結構謎でした。ただメダルを獲得できたことは素直にうれしいです。

やったこと

基本的には小さめの実装から初めて徐々に機能を追加していく作戦。それでも最初の提出をするまでが一番時間がかかりました。 参考にpublic scoreがいくつになったのかも書いておきます。

  • 「Kaggleのチュートリアル」を読む
    Kaggleについて右も左もわからなかったので@currypurinさんの「Kaggleのチュートリアル」でサイトの使い方、Notebookの提出方法などを確認しました。この本がなかったら始められてないと思うので大感謝です。
  • ベースのNotebookを作る(public score:0.7298)
    今回は勉強もかねてPytorchで実装を行いました。最初はPytorchのチュートリアルや公開されているNotebookを頼りに、resnetで学習~推論を行うNotebookを作成しました。
  • Efficientnetを試す(0.8806)
    公開されているNotebookではEfficientnet-b4を使用しているものが多く、自分も使おうと思ったらどうしてもout of memoryになるのでEfficientnet-b3にしました。resnetと比べて15%ほどスコアが上がってモデル選び大事だなと。
    timmをインストールしてEfficientnetを使っていたら、提出時にはネット接続ができないことを知らずエラーになり、どういうこっちゃとなりました。*1
  • CVの実装(0.8898)
    Scikit-learnを用いてk-fold CVを行いました。
  • TTAをする(0.8935)
    TTAが何なのか知らなかったのですが、推論時にaugmentationする手法でKaggleではおなじみらしいです。*2TTAの回数はいくつか試してみて最終的には6回にしました。
  • アンサンブルをする(0.8971)
    Resnext50_32x4dとEfficientnet-b3で学習を行って、各推論結果の加重平均を使用しました。

反省

  • データ分析まで手が回らず工夫という工夫ができなかった
  • 全体的に実装を優先してあまり理論を追えなかった
  • 進めていくにつれてコードがごちゃごちゃになってしまった

今後の課題

  • データの分析を行う
  • ロス関数、オーギュメンテーション、オプティマイザーなど触れなかったところを触る
  • Colab、GCP等で実行できる環境を作る

感想

始めるまではKaggleはハードル高いなと思っていましたが、初心者向けのNotebookやDiscussionも多くとても楽しめました。いろいろな手法を試してスコアが上がるのを体験して"Kaggleはネトゲ"の意味が少しわかった気がします。
初めてのコンペでメダルを獲得できたのは素直にうれしかったですが、これといって自分で考えて試したことは少なかったので、次はデータ分析をしつつモデルの細部まで手を入れられるようになりたいです。
拙い文章でしたが最後まで読んでいただきありがとうございました。ご意見ご質問等ありましたらコメントかツイッターにいただけるとうれしいです!

*1:回避するには公開データセットからtimmをダウンロードしないといけない

*2:いまだにギャンブルぽい手法に感じて有用なのか半信半疑