かえるのプログラミングブログ

プログラミングでつまずいたところとその解決策などを書いていきます。

2023年を振り返る

kaggle

2023年はチーム銀2 (金からの shake down), ソロ銅2 という戦績でした。

これまで同一ホストが2回目3回目と開催していて、王道のアプローチやソリューションが出揃っていたりTransformers のモデル順番にぶん回せばよい評価指標 RMSE の NLPコンペなど計算量とマイナーチェンジによる多様性でなんとか逃げ切れるようなコンペを選んでいました。

昨年ソロ金を取得したこともあり、これまであまり手をつけてこなかったお題のコンペにも挑戦しながら、GMに必要な5枚目の金メダル獲得を目指したものの金メダルに手が届きそうで手が届かず(Public 金からの shake down銀)悔しい思いをした1年でした。

記憶に残っているコンペについて書いていきます。

 

Hubmap チーム銀

ソロ金獲得のためのチームマージ縛りを解いて初めてチームアップしたコンペでした。

医療画像(細胞組織)のインスタンスセグメンテーションのタスクで、画像コンペは分類タスクしか参加してこなかったので学びが多かったです。

使い勝手がよいらしいと聞いていた mmdetection をはじめて使いました。ちょうど mmdetection 2系から3系の過渡期で 2系で書かれた過去のソリューションの内容を3系のドキュメントを見ながら実装するような形でキャッチアップし、銀圏上位に到達したあたりで上位のチームとチームマージしました。チームメイトたちのパイプラインが 2系で私が 3系だったこともあって、アンサンブルに苦戦しました。

まず同一の推論ノートブックで 2系の推論と3系の推論を実行する必要がありました。

どちらかに統一する方法も試しましたが、2系の実験結果が3系で、3系の実験結果が2系で再現できず断念しました。

チームメイトが 2系と3系の推論を両立できるように依存を整理してくれ解決しました。

次に推論結果をアンサンブルするところです。

インスタンスセグメンテーションでは予測結果に 座標の bbox とセグメンテーションマスク (と id) が出力されます。

これらをメモリに持っておくと 2系と3系の切り替えまで持ち続けるにはメモリが持たず、2系と3系の切り替えが必要な関係で、一回の推論ループ内で両方の推論をするのが難しいという問題がありました。

試行錯誤の結果、2系の推論結果を一回バイナリにエンコードして3系の推論中にデコードして混ぜるという複雑なことをやりました。エンコードしてデコードしても推論結果の同一性を担保しつつアンサンブルがうまく行ったのは気持ちよかったです。

このコンペでは、CVとLBで改善が見られるという怪しい処理が共有されていました。この怪しい処理は結果として private では効かないものでした。

それに頼ってスコアを上げながら金圏ボーダーを争っており、最後の最後でこの怪しい処理に頼っていていいのか不安になって急ごしらえで作った守りのサブで銀圏までのシェイクダウンで済んだという結果でした。

TrustCV だけでなく、なぜ効いてるか直感的でない怪しい処理は使うものではないなという教訓を得ました。

 

睡眠コンペ チーム銀

お題は睡眠時に装着する加速度センサー? のセンサーデータから起きたイベント、寝たイベントを検出するもので、自分にとってはあまり取り組んでこなかったタスクでした。Twitter の TL で盛り上がっていて、少しずつ公開 notebook で勉強していました。残り1ヶ月のところで激強 pipeline が公開され、その触り方に慣れてきで銀圏上位にスコアが乗ったタイミングで LBの上の方にいたチームの方々とチームを組んでもらいました。最終的に5人のチームとなり、それぞれの自前の pipeline をお持ちの2名と激強 pipeline ベースの3名(kaeru 含む)で進めていました。久しぶりの5名チームで評価関数をよく理解したアプローチやドメイン固有の後処理などチームメンバーのアイデアや実装力にたびたび助けられながら取り組みましたが、最後は shake down してしまいました。

ソリューションを見ると多様なアプローチが存在していました。復習や基礎を勉強し直すのによい教材だと思い、今はじっくり勉強をし直しています。


CTFコンペ ソロ銅

Capture The Flag (CTF) というセキュリティ技術版の kaggle みたいなものがあり、それが kaggle 内で開催されていたので興味があってでました。

情報セキュリティに関する問題で、かつ機械学習やコンピュータビジョンに関係がありそうなものが全27題出題されました。早い者勝ちで最も多くの問題を解いた人から賞金とメダルが獲得できる & 激しい計算リソースが必要ないひらめき勝負ということで参加しました。

開催期間中のコードやアイデアの共有が禁止されていたこともあって、難しかったですが、

GPT っぽい API に対する攻撃や xml インジェクション、Adversarial Attack の基本などが学べてよかったです。

 

(前年個人比)で技術書をたくさん読みました。輪読会のお題であったものから自分で選んだものまで、通しで読めたものからつまみ食いしたものまで色々読みました。型、テスト、基盤、LinuxGPUなどソフトウェア開発やハードの方面まで色々な関連技術に興味を持って読んだ内容が自分の中で繋がっていって楽しかったです。

 

仕事

昨年11月に転職した会社に引き続き在籍しています。勤続1年と1ヶ月です。はじめの半年は MLE としてモデリングをメインに、データアノテーションを社内の別のチームに依頼するところから、MLOps のチームが整備運用してくれている MLの推論基盤にデプロイまでして、あとはお客さんの手元に機能が届くところまでの各チームとの調整といった業務に取り組んでいました。現在までの半年は、MLOps エンジニアとして、推論基盤の作成や再学習基盤といった Google のサービスを組み合わせて MLモデルを運用するための仕組みの実装に取り組みました。MLOps とても楽しいです。また、エンジニアとして自分1人だけの視点のみならずチームの拡大や成長のためにできることを考えて動くことにもチャレンジしました。カジュアル面談や面接といった採用活動への参加や、新しく入ってくれたメンバーがすぐ活躍できるよう環境構築用のコンテナ環境を整えたり、オンボーディング資料を作ったりしました。まだまだ手が届かないところも多いですが、「個から組織に目を向けてできることからやっていく」は継続したいと思います。

 

プライベート

結婚して、新婚旅行に行って、引っ越し先も決めて人生が大きく動きました。

 

まとめ

2023年はプライベートが大きく動きました。

kaggle では GM チャレンジ継続中で、金圏からの shakn down で銀圏という悔しい結果が 2度続きました。触ったことがないようなお題のコンペにも取り組めて楽しかったです。

本も読みました。仕事についてもできることも視点も拡がってまだまだやることがありそうです。

2024年はまず GM になりたいです。

ありがとうございました。