Kaggle Grandmaster になるまでの振り返り

はじめに

はじめまして、tkです。初記事です。

Kaggle Grandmasterになることができたので、私のコンペの取り組み方や振り返りを書こうと思います。取り組み方などがKaggleをやっている方のお役に立てると嬉しいです。

背景

大阪の国公立大学の情報系M1で、画像系のコンペを中心に参加しています。 2021年5月にindoorコンペで初メダル(銅)を取り、2022年1月にKaggle Masterに昇格、2023年6月にKaggle Grandmasterになりました。

kaggle profile

コンペの取り組み方

  • 序盤 (コンペ開始~終了1ヶ月半)
    • ベースラインを作る
      • シンプル+学習に時間がかかりすぎない手法で
      • 複雑にしすぎると、何が効いているのかよくわからなくなる
    • notebook、discussionを読む
    • 信頼できるCVを作る
      • 信頼できるCVを作れないと、今後何もできなくなるので最優先
      • データを見て、リークしない切り方を考える
    • public lbが信頼できるか考える
      • public/private の分割の割合やデータ量を見る
      • CVとの相関を見る
      • 普通は効かない手法が効いたら疑う
    • 過去の類似コンペを調べる
      • そのタスクにおける典型的な手法と、何が効いて上位入賞したのかを意識しながら読む
      • 学習、推論コードを読む
      • 日本人の参加者が多いコンペだと、Twitterに有益な情報が転がっていることがあるため、Twitterを漁る
    • 過去の類似コンペとの差分を考える
      • 考え方
        • 今回のコンペだとデータの特徴やタスクは~だから、過去コンペの手法で~が使えそう
        • データの特徴やタスクで~は類似しているコンペが無いから、どう扱うかで差がつくかもしれない
  • 中盤 (終了1ヶ月半~終了2週間)
    • チームマージを検討する
    • データやタスクのどの部分で差がつきそうかを考える
    • どんな解き方なら、コンペ終了時に金圏finishできるかを考える
  • 終盤
    • 差がつきそうな部分を重点的に調整する
    • ソロだと、中盤で決めた解き方でfinishすることが多い

参加したコンペ

全コンペだと多すぎるので、金メダルを獲得したコンペのみ紹介します。

Sartorius - Cell Instance Segmentation

コンペURL

解法

3種類の細胞をInstance Segmentationするコンペです。コンペ序盤は、mmdetectionでMask R-CNNなどのInstance Segmentation用のモデルを育てる方針で取り組みました。コンペ終了1ヶ月前くらいにYamameさんと、その後terekaさん、yu4uさんとチームを組ませていただきました。

解法としては、細胞の種類ごとに細胞数や大きさの分布が異なるため、各細胞に合わせてモデルのパラメータをチューニングしました。他にも、ラベル無しデータの扱い方、後処理、Instance Segmentation用のアンサンブルなど、工夫できる部分が多く、楽しいコンペでした。結果は4位で初の金メダルを獲得し、kaggle masterになりました。チームメイトは画像処理の分野に強い方ばかりで、非常に多くのことを学ばせていただきました。学んだことは、GBRコンペなど、その後参加したコンペで活きました。

TensorFlow - Help Protect the Great Barrier Reef

コンペURL

解法

サンゴ礁の保護のためにヒトデを検出するコンペです。タスクは物体検出で、使えるモデルはyolov5やyoloxなどがありました。物体検出モデルで推論する際に、推論結果のbboxを小さくするとpublic lbだけ向上するという、よくわからない現象が起きていました(私はこれに気づきませんでした)。

public lbが謎だったので、trust cvで取り組みました。yoloxとmmdet系のモデルで、multi-scale trainingを高解像度+広範囲にするのが効きました(Faster-R-CNN r50 > yolov5 になるくらい効いた)。結果は8位でソロ金でした。

Feedback Prize - English Language Learning

コンペURL

解法

英語学習者によって書かれたエッセイを、文法や語彙などの6つの基準で評価するコンペです。feedback2コンペの復習や、AWPの勉強をしたかったので、2週間ほど参加しました。

私の解法は、AWPやLLRDによる単体モデルの精度の向上、large系のモデルは層を半分ほどfreezeさせて学習の高速化+精度向上、多様なモデルでNelder-Meadによるアンサンブルです。

結果は7位でソロ金でした。

1st and Future - Player Contact Detection

コンペURL

解法1

解法2

NFLの試合中における選手の外部接触(選手同士または地面)を検出するコンペです。前回のNFLコンペが神だったのと、テーブル+動画データのマルチモーダルと面白そうだったため、参加しました。

前回、前々回のコンペの評判やタスクの面白さのおかげか、強い参加者が多いコンペでした。序盤からNFLやDFLとかで上位入賞しているMaster&GMの4人チームが発生していて恐ろしかったです。

私は、コンペの序盤から、

  1. 動画像のみを入力としてCNNを学習し、衝突しているかどうかの予測値を作成
  2. センサーのデータとCNNの予測値を入力としてGBDTを学習し、予測値を作成

のアプローチで取り組みました。2023年1月に同級生のpenguin46とチームマージしました。2月にQishenさん、Boさんからチームマージのお誘いがあり、マージしました。最終的な解法としては、私+penguin46のパイプラインと、Qishen+Boさんのパイプラインを個別に最適化し、予測値を単純平均しました。結果は6位でチーム金でした。

強い参加者ばかりで、楽しい&辛いコンペでした。また、非常に多様かつ面白い解法ばかりでした。チームメイトが全員強く、テーブル+画像の両方について非常に勉強になりました。

Vesuvius Challenge - Ink Detection

コンペURL

解法

巻物の3D X線スキャンからインクを検出するコンペで、タスクはSemantic Segmentationです。

私の解法は、複数のsliceを上手く活用するために、3枚ごとにencoderに入力→slice方向にaverage pooling→decoderでmaskを出力しました。 また、序盤で公開したnotebookが多くの解法で使われていたのが嬉しかったです。

終わりに

チームを組んでくださった方々や、notebook, discussionなど、有益な情報を公開してくださった方々に感謝です。今後も色々なコンペに参加していこうと思います。