Slide 1

Slide 1 text

2021.11.19 CV輪講 からさわ Kaggle NFL2コンペふり返り “NFL Health & Safety - Helmet Assignment”

Slide 2

Slide 2 text

2 tomoyukunとNFL2コンペ参加してきました 16位銀

Slide 3

Slide 3 text

3 項⽬ 01|コンペ概要 02|⾃分らの解法 03|Top3解法

Slide 4

Slide 4 text

4 01 コンペ概要

Slide 5

Slide 5 text

5 “NFL Health & Safety - Helmet Assignment” アメフトの試合動画中のヘルメットを検出し、選⼿ラベルを割り当て NFL2 コンペ 楽しそう。。 賞⾦⾼い。。 https://www.kaggle.com/c/nfl-health-and-safety-helmet-assignment/overview/description GIF

Slide 6

Slide 6 text

6 (参考)NFL1コンペ “NFL 1st and Future - Impact Detection” アメフトの試合動画中のヘルメット衝突の瞬間を検出 GIF https://www.kaggle.com/c/nfl-impact-detection/overview/description

Slide 7

Slide 7 text

1プレイ(1動画) 約5~10sec 動画︓ n 59.94fps n 2つの固定視点 センサデータ︓ n 10Hz n 選⼿ラベルや 位置情報など ➤ボールスナップ(≒プレイ開始)が10フレーム⽬ 7 試合中の1プレイの動画とそれに対応するセンサ情報から、 動画中のヘルメットを検出し、選⼿ラベルを割り当てる タスク left, width, top, height, label

Slide 8

Slide 8 text

8 選⼿のショルダーパッド内蔵センサより得られるデータ ▪ 位置情報、加速度、向き、etc. ▪ 動画関係なくフィールド内の選⼿はデータが存在 センサデータ 位置と向き以外は結構ノイジーだった(多分) ⾝体の向きは90/270度の⼆峰性 [H/V] + 背番号 (H: home, V: visitor)

Slide 9

Slide 9 text

9 各プレイ2種類の視点の動画に対して予測をする(各々⾒える選⼿を予測) 動画 Sideline view Endzone view ただし、どちらサイドの Sideline/Endzoneかは未知 最初はざっくり全体 ↓ 後半ズームしてく が多い mp4 mp4

Slide 10

Slide 10 text

10 各プレイ2種類の視点の動画に対して予測をする(各々⾒える選⼿を予測) 動画 Sideline view Endzone view ただし、どちらサイドの Sideline/Endzoneかは未知 最初はざっくり全体 ↓ 後半ズームしてく が多い

Slide 11

Slide 11 text

11 主データ︓ ▪ train︓120動画=60プレイ x 2視点 ▪ フレーム数︓300~600程度 ▪ test︓30動画/15プレイ(public23%/private77%) 補助データ︓物体検出⽤の静⽌画データセット ▪ 9947(2フレーム主データと被り) データセット 各動画フレーム数 partial sideline

Slide 12

Slide 12 text

12 ▪ Weighted Accuracy ▪ 衝突の瞬間のヘルメット重みを1000倍 ▪ 衝突の予測は必要なし ▪ 予測ルール︓ (各フレームにつき) ▪ 22ボックスまで ▪ 選⼿の重複ダメ ▪ ボックスの重複ダメ 評価

Slide 13

Slide 13 text

1プレイ(1動画) 約5~10sec 動画︓ n 59.94fps n 2つの固定視点 センサデータ︓ n 10Hz n 選⼿ラベルや 位置情報など ➤ボールスナップ(≒プレイ開始)が10フレーム⽬ 13 試合中の1プレイの動画とそれに対応するセンサ情報から、 動画中のヘルメットを検出し、選⼿ラベルを割り当てる タスク left, width, top, height, label 再掲 まずそもそも何する︖が少し多様な感じのコンペだった

Slide 14

Slide 14 text

14 02 ⾃分らの解法

Slide 15

Slide 15 text

15 全体 Helmet Detection Helmet Clustering Helmet Tracking By-frame Assignment Tracklet Assignment Self-Verification & Team Assignment Post Processing Jersey Recognition

Slide 16

Slide 16 text

16 YOLOv5(YOLOv5x6) NFL1stコンペの上位解法でよさげとされてたため ▪ 使⽤データ︓ ▪ train: 補助データセット全て ▪ val: 主データセット (30フレーム間隔で1700枚サンプリング) ▪ w/o sidelineプレイヤー ▪ 画像特徴から区別してほしかった ▪ フル解像度1280 ▪ mAP 0.963 1. Helmet Detection Helmet Detection mp4

Slide 17

Slide 17 text

17 シンプルなIoUベース (IoU threshold: 0.2, max-age: 1) モチベーション︓ ▪ ⼗分に⾼fpsだった(60fps) ▪ ヘルメットの画像特徴、相性良くはなさそう ▪ クイックな変化へカルマンフィルタ特に嬉しくなさそう(特に衝突) ▪ IoUで明らかにわかるやつ逃したり、スイッチが散⾒ 結果的にDeepSORT, SORTをチューニングしたもの に⽐べ⾼速かつやや⾼精度だった ▪ ほか、ByteTrack-likeに低スコア拾うのを試すも特に改善なし 2. Helmet Tracking 参考)前フレームとのIoU(GT) チームレベルの活⽤はしたかった (戻ってこれず…) Helmet Detection Helmet Tracking

Slide 18

Slide 18 text

18 シンプルなIoUベース (IoU threshold: 0.2, max-age: 1) モチベーション︓ ▪ ⼗分に⾼fpsだった(60fps) ▪ ヘルメットの画像特徴、相性良くはなさそう ▪ クイックな変化へカルマンフィルタ特に嬉しくなさそう(特に衝突) ▪ IoUで明らかにわかるやつ逃したり、スイッチが散⾒ 結果的にDeepSORT, SORTをチューニングしたもの に⽐べ⾼速かつやや⾼精度だった ▪ ほか、ByteTrack-likeに低スコア拾うのを試すも特に改善なし 2. Helmet Tracking 前フレームとのIoU(GT) チームレベルの活⽤はしたかった (戻ってこれず…) Helmet Detection Helmet Tracking mp4

Slide 19

Slide 19 text

19 2タイプでアンサンブル(コスト⼩さい⽅選択)︓ 1. 座標変換+探索+normalizeして線形割当 (コスト最⼩を選択) 2. Homography予測➤直で線形割当 ▪ ⽐較のためコストのみnormalize 解決を図る課題感はこのへん︓ ▪ フレーム内に存在する選⼿の特定 ▪ 画像内座標 ↔ センサ座標 ▪ 選⼿姿勢によるヘルメット位置座標の歪み 3. By-frame Assignment By-frame Assignment 座標変換+探索+線形割当 Homography予測+線形割当 Helmet Detection *fpsの違いについては最近傍のセンサ情報使⽤

Slide 20

Slide 20 text

20 座標変換+探索+normalizeして線形割当(コスト最⼩を選択) ➤ボールスナップ時に焦点 座標変換(sideline only)︓ ▪ カメラ位置を仮定し、 センサデータx, y座標中⼼から傾き推定 ▪ pitchからBEV⽅向に変換したのち回転 ▪ 中⼼から遠いものは3通り探索 ▪ 直線検出なども⼀応実施 探索+normalizeして線形割当︓ ▪ センサデータx, y座標外側の選⼿から排除 ▪ 両座標を0~1にnormalizeして、 cost matrix計算後、線形割当 ▪ endzoneのみ画像y⽅向の姿勢ゆらぎ が⼤きく、x⽅向の重みを2倍 3-1. By-frame Assignment cam 3位discussionの図より https://www.kaggle.com/c/nfl-health-and-safety-helmet-assignment/discussion/285076

Slide 21

Slide 21 text

21 座標変換+探索+normalizeして線形割当(コスト最⼩を選択) ➤ボールスナップ時に焦点 3-1. By-frame Assignment cam mp4 スコア (アサインにGT使⽤/impact重みなし) 全フレーム

Slide 22

Slide 22 text

22 Homography予測➤直で線形割当 ▪ transformerベース ▪ ⼊⼒︓検出結果とセンサデータ ▪ アンサンブルのためコストのみnormalize 全体的なlimitation︓ ▪ いずれにせよ座標変換ベースなので 選⼿姿勢による座標の不整合… ➤(相対𝑥!"# , 相対𝑦!"# )予測モデル検討も時間なく… 3-2. By-frame Assignment shiftも

Slide 23

Slide 23 text

23 基本的にtrackingへ信頼を寄せる⽅針︓ (=false splitはあれどfalse concatが少ないの意。) ▪ 同⼀tracklet内ヘルメットは同⼀ラベルでアサイン ▪ スコアリング︓バイフレームでアサインする際のコスト逆数の総和 ▪ 特にアサインロジックは動画後半間違ってるので単なるvotingだときつい ▪ フレーム内コンフリクト解消も同スコアで⼩さい⽅をドロップ 4. Tracklet Assignment V11 (0.02) V11 (0.01) V11 (0.05) None ↓ V11 V18 (0.3) ↓ V11 V11 (0.06) instance-id: 4 Helmet Detection Helmet Tracking By-frame Assignment Tracklet Assignment

Slide 24

Slide 24 text

24 ▪ k-meansで2クラスタ ▪ 20x20にresizeして、10x10でcenter crop ▪ ヘルメットの⾊が同じこともあるため ヘルメットのみだとlimitationあり。 ➤洗練の時間なくself-verification導⼊ 5. Helmet Clustering & Team Assignment Helmet Clustering By-frame Assignment Tracklet Assignment Self-Verification & Team Assignment ヘルメットの⾊が同じ

Slide 25

Slide 25 text

25 ▪ k-meansで2クラスタ ▪ 20x20にresizeして、10x10でcenter crop ▪ limitationに対して、self-verification導⼊ ▪ Self-verification︓ ▪ 条件︓ 1. (予測結果との相関⼤)or(RGB分布が⼗分に分離) ▪ 予測性能に依存するのでRGB分布によって拾う 2. 2つのクラスタサイズが同程度 ▪ 「片方チームの一部と残り」ケースの回避(ヘルメット向きによるアピアランス変化など) ▪ 25/120動画が不適⽤となるくらい(厳しめに倒してる) ▪ Team Assignment︓ ▪ 予測結果からvotingでチーム決め ▪ 適⽤︓ ▪ アサインにて線形割当のcost matrixにて異チームの組み合わせのコスト5倍 5. Helmet Clustering & Team Assignment Helmet Clustering By-frame Assignment Tracklet Assignment Self-Verification & Team Assignment

Slide 26

Slide 26 text

26 easyocrを⽤いて背番号認識 ▪ recall低いがprecision⾼くて適⽤しやすかった ▪ 動画後半の拡⼤時に効く ▪ 2倍にupsamplingして⼊⼒(recall向上) 適⽤︓ ▪ OCRしてサイズや番号でフィルタリング後、 画像内ヘルメット平均サイズ1個分上にシフトし、最近傍に割当 ▪ 有⼒候補として登録し、trackletのアサイン時に有⼒候補あればアサイン 6. Jersey Recognition (OCR) Tracklet Assignment Jersey Recognition by-frame assignmentへも 適⽤したが数分間に合わず occlusionミスが稀に (2桁➤1桁) recall⾼めの例

Slide 27

Slide 27 text

27 ▪ 評価指標が(submit的には)weighted recall ➤22選⼿以下の制限の下、なるべく予測を⼊れる 適⽤︓ 1. 最終予測結果とセンサデータの対応関係からhomography算出 ▪ 対応点不⾜時スキップ 2. 割当のない検出結果をセンサ座標に投影 ▪ tracklet assignmentでのdropも多いので 3. 割当のない選⼿へ近い順にアサイン ▪ (チーム分類適⽤時)異チーム組み合わせはコスト5倍 7. Post-processing Tracklet Assignment Self-Verification & Team Assignment Post Processing

Slide 28

Slide 28 text

28 ▪ 動画後半のtrackingの旨味活⽤のため 「予測結果からのhomography計算➤再アサイン」 ➤ 悪化はしないが特に改善なし ▪ ⼤きく2つのlimitationを認識しているもアタックの時間なく… ▪ 選⼿の姿勢による座標の不整合 ▪ 画像特徴から学習ベースの必要性あったが… ▪ 動画後半へのアサインロジックのlimitation ▪ こっちは他モジュールで結構救われてる ほか

Slide 29

Slide 29 text

29 全体再掲 Helmet Detection Helmet Clustering Helmet Tracking By-frame Assignment Tracklet Assignment Self-Verification & Team Assignment Post Processing Jersey Recognition

Slide 30

Slide 30 text

30 各段階のスコア private public date 10/14 10/15 10/25 10/31 11/2 11/2 11/3 11/3 約10分前完了.. ↑⼿元のスコア(privateとほぼ同じくらい) 0.665 0.792 0.806 0.821 37th 23rd 20th 20th 18th 16th 52min 53min 58min 83min 91min ↑est. inference time

Slide 31

Slide 31 text

31 Endzone view Sideline view mp4 mp4 DEMO

Slide 32

Slide 32 text

32 03 Top3解法 👀 内容はdiscussionより。 画像も全て掲載リンクの各discussionより引⽤。

Slide 33

Slide 33 text

33 ▪ 物体検出︓YOLOv5 ▪ トラッキング︓DeepSORT ▪ アサイン︓外側の選⼿を順に弾いて、 ICP(iterative closest point)+ 線形割当 ▪ ICP:三次元点群同⼠を位置合わせする⼿法 ▪ チーム分類︓k-means clustering ▪ DeepSORTでの特徴を使⽤ ▪ 最後に全情報を⽤いて、ICP+線形割当 3rd : fantastic_hirarinさん [link] ICP+線形割当

Slide 34

Slide 34 text

34 ▪ 物体検出: YOLOv5 ▪ トラッキング: SORT ▪ チーム分類: 2-phase k-means clustering ▪ 特徴抽出(マッチングの距離に使⽤)︓ ▪ player orientation prediction ▪ apparent gap prediction ▪ 座標変換︓直線検出 ▪ アサイン: 外側の選⼿を順に弾いて線形割当 2nd : titoさん [link] 直線検出 apparent gap チーム分類

Slide 35

Slide 35 text

35 ▪ 物体検出︓FCOS-likeモデル 2-stage検出 ▪ Image to Map Converter ▪ カメラ⽅向からの2D座標を予測 ▪ アサイン︓ICPベース ▪ チーム分類︓ArcFaceで同チームかを予測 ▪ トラッキング︓IoUベース 1st : k_matさん [link] Image2Map *discussionとてもわかりやすいので詳細はそちら⾒ていただくのが良いかと︕