Kaggle Grandmaster になるまでの振り返り
はじめに
はじめまして、tkです。初記事です。
Kaggle Grandmasterになることができたので、私のコンペの取り組み方や振り返りを書こうと思います。取り組み方などがKaggleをやっている方のお役に立てると嬉しいです。
背景
大阪の国公立大学の情報系M1で、画像系のコンペを中心に参加しています。 2021年5月にindoorコンペで初メダル(銅)を取り、2022年1月にKaggle Masterに昇格、2023年6月にKaggle Grandmasterになりました。
コンペの取り組み方
- 序盤 (コンペ開始~終了1ヶ月半)
- ベースラインを作る
- シンプル+学習に時間がかかりすぎない手法で
- 複雑にしすぎると、何が効いているのかよくわからなくなる
- notebook、discussionを読む
- 信頼できるCVを作る
- 信頼できるCVを作れないと、今後何もできなくなるので最優先
- データを見て、リークしない切り方を考える
- public lbが信頼できるか考える
- public/private の分割の割合やデータ量を見る
- CVとの相関を見る
- 普通は効かない手法が効いたら疑う
- 過去の類似コンペを調べる
- 過去の類似コンペとの差分を考える
- 考え方
- 今回のコンペだとデータの特徴やタスクは~だから、過去コンペの手法で~が使えそう
- データの特徴やタスクで~は類似しているコンペが無いから、どう扱うかで差がつくかもしれない
- 考え方
- ベースラインを作る
- 中盤 (終了1ヶ月半~終了2週間)
- チームマージを検討する
- データやタスクのどの部分で差がつきそうかを考える
- どんな解き方なら、コンペ終了時に金圏finishできるかを考える
- 終盤
- 差がつきそうな部分を重点的に調整する
- ソロだと、中盤で決めた解き方でfinishすることが多い
参加したコンペ
全コンペだと多すぎるので、金メダルを獲得したコンペのみ紹介します。
Sartorius - Cell Instance Segmentation
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
サンゴ礁の保護のためにヒトデを検出するコンペです。タスクは物体検出で、使えるモデルは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
英語学習者によって書かれたエッセイを、文法や語彙などの6つの基準で評価するコンペです。feedback2コンペの復習や、AWPの勉強をしたかったので、2週間ほど参加しました。
私の解法は、AWPやLLRDによる単体モデルの精度の向上、large系のモデルは層を半分ほどfreezeさせて学習の高速化+精度向上、多様なモデルでNelder-Meadによるアンサンブルです。
結果は7位でソロ金でした。
1st and Future - Player Contact Detection
NFLの試合中における選手の外部接触(選手同士または地面)を検出するコンペです。前回のNFLコンペが神だったのと、テーブル+動画データのマルチモーダルと面白そうだったため、参加しました。
前回、前々回のコンペの評判やタスクの面白さのおかげか、強い参加者が多いコンペでした。序盤からNFLやDFLとかで上位入賞しているMaster&GMの4人チームが発生していて恐ろしかったです。
私は、コンペの序盤から、
- 動画像のみを入力としてCNNを学習し、衝突しているかどうかの予測値を作成
- センサーのデータとCNNの予測値を入力としてGBDTを学習し、予測値を作成
のアプローチで取り組みました。2023年1月に同級生のpenguin46とチームマージしました。2月にQishenさん、Boさんからチームマージのお誘いがあり、マージしました。最終的な解法としては、私+penguin46のパイプラインと、Qishen+Boさんのパイプラインを個別に最適化し、予測値を単純平均しました。結果は6位でチーム金でした。
強い参加者ばかりで、楽しい&辛いコンペでした。また、非常に多様かつ面白い解法ばかりでした。チームメイトが全員強く、テーブル+画像の両方について非常に勉強になりました。
Vesuvius Challenge - Ink Detection
巻物の3D X線スキャンからインクを検出するコンペで、タスクはSemantic Segmentationです。
私の解法は、複数のsliceを上手く活用するために、3枚ごとにencoderに入力→slice方向にaverage pooling→decoderでmaskを出力しました。 また、序盤で公開したnotebookが多くの解法で使われていたのが嬉しかったです。
終わりに
チームを組んでくださった方々や、notebook, discussionなど、有益な情報を公開してくださった方々に感謝です。今後も色々なコンペに参加していこうと思います。