Slide 1

Slide 1 text

Data-centric視点で 過去コンペを振り返る 2023/11/08 いのいち

Slide 2

Slide 2 text

自己紹介 ❖ Inoue Yuichi ❖ Turing Inc. Brain Research Team ❖ 京都大学 博士(薬学) ❖ Kaggle Competitions Grandmaster

Slide 3

Slide 3 text

今日紹介するコンペ - TReNDS - Graphem - Lyft Motion Prediction 上位解法をお話するというよりは、Data-centric視点で面白そうだなと思った部 分をピックアップして紹介しています!

Slide 4

Slide 4 text

TReNDS ● 2020年に開催されたコンペ リンク ● Targetは5個の連続値 ○ Age ○ domain1_1 ○ domain1_2 ○ domain2_1 ○ domain2_2 ● データは脳のMRIから抽出した特徴量 ○ fMRI: 53次元の3D画像データ ○ fnc: static FNC correlation features ○ loading: sMRI SBM loadings ● Metrics:重み付きで正規化された MAE

Slide 5

Slide 5 text

Table data ● 当時、RAPIDS(Open GPU Data Science | RAPIDS)がKaggleで使われるようになった時期で、 KGMoN の人たちがいろいろNotebookを出していた。 ● SVRが効くタイプのコンペでRAPIDSを使うことでとても高速に処理できた。 ● RAPIDSのお披露目会みたいになってた。

Slide 6

Slide 6 text

3D data ● SeuTaoさんがDiscussionで上げてくれてい るくらいだった。 ● コードもGithubにかなり丁寧に上げてくれて いたし、monaiという便利ライブラリも紹介し てくれていたので、やる気があれば誰でも取 り組めた...はず。 ● 単体では全くのメダル圏外

Slide 7

Slide 7 text

Table data &3D data ● 全然ドメインの違うデータを混ぜることで大きく CV/LB/PBが向上した。 ● ほとんどの人は最初3D dataは使っていなかっ た。

Slide 8

Slide 8 text

たくさん3Dのモデルを作成 他チームとの差分になりそうだったのでたくさんモデルを 作った。当時、2080Tiを1枚だったのでfp16で学習したり してた(なんかうまくいってた)。 ● いろんな構造のモデルを使用 ● 3D-ResNets-PyTorch ● 実験を早く回すためにfloat16で学習 ● 高解像度化

Slide 9

Slide 9 text

もっと多様なモデルを作ってたOnoderaさんに完敗 解法のリンク ● 3D dataのモデルも右脳モデルや左脳モデル、特定の 軸で切ったり、ランダムクロップしたりと、見慣れない 3D dataに対しても頭脳的な方法でデータをうまく拡張して いた。

Slide 10

Slide 10 text

Bengali.AI Handwritten Grapheme Classification - 2020年に開催されたコンペ リンク - ベンガル語の部首分類 - Inputは手書きGrapheme(単語)の画像 - 3つの部首タイプでそれぞれ分類 - Graphem root : 168 classes - Vowel diacritics : 11 classes - Consonant diacritics : 7 classes - 評価指標はRecall (2 : 1 : 1)

Slide 11

Slide 11 text

Baseline model architecture ・工夫点はAugmentationの組み合わせだと思っていた!

Slide 12

Slide 12 text

めっちゃシェイクダウン😇 Public : 18位 Private : 213位 (- 195位)

Slide 13

Slide 13 text

何がいけなかった...? Public / Privateには未知のGraphemeが含まれていた。 訓練データには1295種類のGraphemeしかないが、実際にはもっとある。 可能性的には168 x 11 x 7 = 12936種類のGraphemeが存在する。 Graphem root Vowel diacritic Consonant diacritic 実際 訓練

Slide 14

Slide 14 text

起こりうる部首の組み合わせを学習していた ● 学習が進むに連れて訓練に含まれる Grapheme(実線、Seen)については精度が上がっていくが、訓練に存在 しないGraphem(破線、Unseen)については学習を進めるとどんどん下がっていってる。 Accuracy Loss 0.6 0.9 訓練に存在しないGraphem

Slide 15

Slide 15 text

特にユニークだった1位の解法 1. CycleGANを使ってInput画像をフォント調に変換し、 Unseen Class Modelで予測 2. 「Seen」の場合、Seen Class Modelで最終スコアを予測 3. 「Unseen」の場合、Out of Distribution Detection Modelで Seen Graphemeかどうかを再計算 4. 「Seen」の場合、Seen Class Modelで最終スコアを予測 5. 「Unseen」の場合、Out of Distribution Detection Modelの 予測値を最終スコアとする

Slide 16

Slide 16 text

CycleGANで手書き文字を生成 すべてのGraphemeのFont画像 を作成し、学習させる Local CV Seen: 0.9377 Unseen: 0.8804 訓練にないGraphemに対してかなりの 高い精度に達している。

Slide 17

Slide 17 text

CycleGANで手書き文字を生成 Font画像の生成 各部首の要素の情報が 入ったDataFrameが与えら れていた。 “component”は足し算することでGraphemeを生成 することができた。 画像化する。 168x11x7=12936個のGrapheme ができる。 Kernel: Bengali Graphemes: Starter EDA+ Multi Output CNN Font 1 Font 2

Slide 18

Slide 18 text

Lyft Motion Prediction for Autonomous Vehicles 2020年に開催されたコンペ リンク Motion prediction用の大きいデータセットを作っ たのでそれでコンペしようぜ! https://arxiv.org/abs/2006.14480

Slide 19

Slide 19 text

データセット l5kitという専用のLibraryを使用してデータをGenerateする。 かなりたくさんのデータを生成することができる。 Satellite Semantic

Slide 20

Slide 20 text

データセット Ego: 自動運転車 Agent: 自動運転車が認識した周囲の移動物体 予測したいのはこのAgentの5秒後(50 frames)の軌跡 TestのSceneの10秒目の画像が評価 対象だった。

Slide 21

Slide 21 text

Our approach (14th place) ● 予測軌跡の移動距離が小さいほど大きく削るように調節 ○ 6m以下を50%削る ○ 3m以下を更に50%削る ○ 1.5m以下を更に50%削る ○ 0.75m以下を更に50%削る ● データ数は削る前の約53% ● 全体として6m以下・以上の割合が1:2になる これでおおよそデータ数が5,760,000くらいになる。   1エポック 12時間くらい!

Slide 22

Slide 22 text

Our approach (14th place)

Slide 23

Slide 23 text

11th place solution ● ResNet18 ● Rastesr size (150, 150) ● Batch size: 512 ● 408000 iterations Learning rateを下げながら学習を回し続けるとスコ アが良くなり続けた。 データをたくさん生成できる課題だったので、そういう 場合はデータ拡張よりも愚直に学習させるとしっかり 精度が良くなる。 (自動運転はこの性質が強いかも。) 僕らのチーム

Slide 24

Slide 24 text

まとめ ★ Kaggleは様々なコンペがあるので、データも面白いものが多い。 ★ 「Data-centric」という視点で見ても、昔から興味深いコンペは多い ★ Kaggleのコンペ出たい。