Save 37% off PRO during our Black Friday Sale! »

社内CV輪講資料 / Kaggle NFL2

社内CV輪講資料 / Kaggle NFL2

社内のCV輪講について参加したkaggleコンペの振り返りをしたときの資料です

NFL Health & Safety - Helmet Assignment:
https://www.kaggle.com/c/nfl-health-and-safety-helmet-assignment

C31b5afbe1ffb5588b2fe5a9e39b357b?s=128

Takumi Karasawa

November 19, 2021
Tweet

Transcript

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

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

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

  4. 4 01 コンペ概要

  5. 5 “NFL Health & Safety - Helmet Assignment” アメフトの試合動画中のヘルメットを検出し、選⼿ラベルを割り当て NFL2

    コンペ 楽しそう。。 賞⾦⾼い。。 https://www.kaggle.com/c/nfl-health-and-safety-helmet-assignment/overview/description GIF
  6. 6 (参考)NFL1コンペ “NFL 1st and Future - Impact Detection” アメフトの試合動画中のヘルメット衝突の瞬間を検出

    GIF https://www.kaggle.com/c/nfl-impact-detection/overview/description
  7. 1プレイ(1動画) 約5~10sec 動画︓ n 59.94fps n 2つの固定視点 センサデータ︓ n 10Hz

    n 選⼿ラベルや 位置情報など ➤ボールスナップ(≒プレイ開始)が10フレーム⽬ 7 試合中の1プレイの動画とそれに対応するセンサ情報から、 動画中のヘルメットを検出し、選⼿ラベルを割り当てる タスク left, width, top, height, label
  8. 8 選⼿のショルダーパッド内蔵センサより得られるデータ ▪ 位置情報、加速度、向き、etc. ▪ 動画関係なくフィールド内の選⼿はデータが存在 センサデータ 位置と向き以外は結構ノイジーだった(多分) ⾝体の向きは90/270度の⼆峰性 [H/V]

    + 背番号 (H: home, V: visitor)
  9. 9 各プレイ2種類の視点の動画に対して予測をする(各々⾒える選⼿を予測) 動画 Sideline view Endzone view ただし、どちらサイドの Sideline/Endzoneかは未知 最初はざっくり全体

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

    ↓ 後半ズームしてく が多い
  11. 11 主データ︓ ▪ train︓120動画=60プレイ x 2視点 ▪ フレーム数︓300~600程度 ▪ test︓30動画/15プレイ(public23%/private77%)

    補助データ︓物体検出⽤の静⽌画データセット ▪ 9947(2フレーム主データと被り) データセット 各動画フレーム数 partial sideline
  12. 12 ▪ Weighted Accuracy ▪ 衝突の瞬間のヘルメット重みを1000倍 ▪ 衝突の予測は必要なし ▪ 予測ルール︓

    (各フレームにつき) ▪ 22ボックスまで ▪ 選⼿の重複ダメ ▪ ボックスの重複ダメ 評価
  13. 1プレイ(1動画) 約5~10sec 動画︓ n 59.94fps n 2つの固定視点 センサデータ︓ n 10Hz

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

  15. 15 全体 Helmet Detection Helmet Clustering Helmet Tracking By-frame Assignment

    Tracklet Assignment Self-Verification & Team Assignment Post Processing Jersey Recognition
  16. 16 YOLOv5(YOLOv5x6) NFL1stコンペの上位解法でよさげとされてたため ▪ 使⽤データ︓ ▪ train: 補助データセット全て ▪ val:

    主データセット (30フレーム間隔で1700枚サンプリング) ▪ w/o sidelineプレイヤー ▪ 画像特徴から区別してほしかった ▪ フル解像度1280 ▪ mAP 0.963 1. Helmet Detection Helmet Detection mp4
  17. 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
  18. 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
  19. 19 2タイプでアンサンブル(コスト⼩さい⽅選択)︓ 1. 座標変換+探索+normalizeして線形割当 (コスト最⼩を選択) 2. Homography予測➤直で線形割当 ▪ ⽐較のためコストのみnormalize 解決を図る課題感はこのへん︓

    ▪ フレーム内に存在する選⼿の特定 ▪ 画像内座標 ↔ センサ座標 ▪ 選⼿姿勢によるヘルメット位置座標の歪み 3. By-frame Assignment By-frame Assignment 座標変換+探索+線形割当 Homography予測+線形割当 Helmet Detection *fpsの違いについては最近傍のセンサ情報使⽤
  20. 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
  21. 21 座標変換+探索+normalizeして線形割当(コスト最⼩を選択) ➤ボールスナップ時に焦点 3-1. By-frame Assignment cam mp4 スコア (アサインにGT使⽤/impact重みなし)

    全フレーム
  22. 22 Homography予測➤直で線形割当 ▪ transformerベース ▪ ⼊⼒︓検出結果とセンサデータ ▪ アンサンブルのためコストのみnormalize 全体的なlimitation︓ ▪

    いずれにせよ座標変換ベースなので 選⼿姿勢による座標の不整合… ➤(相対𝑥!"# , 相対𝑦!"# )予測モデル検討も時間なく… 3-2. By-frame Assignment shiftも
  23. 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
  24. 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 ヘルメットの⾊が同じ
  25. 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
  26. 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⾼めの例
  27. 27 ▪ 評価指標が(submit的には)weighted recall ➤22選⼿以下の制限の下、なるべく予測を⼊れる 適⽤︓ 1. 最終予測結果とセンサデータの対応関係からhomography算出 ▪ 対応点不⾜時スキップ

    2. 割当のない検出結果をセンサ座標に投影 ▪ tracklet assignmentでのdropも多いので 3. 割当のない選⼿へ近い順にアサイン ▪ (チーム分類適⽤時)異チーム組み合わせはコスト5倍 7. Post-processing Tracklet Assignment Self-Verification & Team Assignment Post Processing
  28. 28 ▪ 動画後半のtrackingの旨味活⽤のため 「予測結果からのhomography計算➤再アサイン」 ➤ 悪化はしないが特に改善なし ▪ ⼤きく2つのlimitationを認識しているもアタックの時間なく… ▪ 選⼿の姿勢による座標の不整合

    ▪ 画像特徴から学習ベースの必要性あったが… ▪ 動画後半へのアサインロジックのlimitation ▪ こっちは他モジュールで結構救われてる ほか
  29. 29 全体再掲 Helmet Detection Helmet Clustering Helmet Tracking By-frame Assignment

    Tracklet Assignment Self-Verification & Team Assignment Post Processing Jersey Recognition
  30. 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
  31. 31 Endzone view Sideline view mp4 mp4 DEMO

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

  33. 33 ▪ 物体検出︓YOLOv5 ▪ トラッキング︓DeepSORT ▪ アサイン︓外側の選⼿を順に弾いて、 ICP(iterative closest point)+

    線形割当 ▪ ICP:三次元点群同⼠を位置合わせする⼿法 ▪ チーム分類︓k-means clustering ▪ DeepSORTでの特徴を使⽤ ▪ 最後に全情報を⽤いて、ICP+線形割当 3rd : fantastic_hirarinさん [link] ICP+線形割当
  34. 34 ▪ 物体検出: YOLOv5 ▪ トラッキング: SORT ▪ チーム分類: 2-phase

    k-means clustering ▪ 特徴抽出(マッチングの距離に使⽤)︓ ▪ player orientation prediction ▪ apparent gap prediction ▪ 座標変換︓直線検出 ▪ アサイン: 外側の選⼿を順に弾いて線形割当 2nd : titoさん [link] 直線検出 apparent gap チーム分類
  35. 35 ▪ 物体検出︓FCOS-likeモデル 2-stage検出 ▪ Image to Map Converter ▪

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