Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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とてもわかりやすいので詳細はそちら⾒ていただくのが良いかと︕