Upgrade to Pro — share decks privately, control downloads, hide ads and more …

銀_202302_kaggle_NFL_Player_contact_detection

 銀_202302_kaggle_NFL_Player_contact_detection

1枚目の銀メダル。
解法はコチラ⇒
https://www.kaggle.com/competitions/nfl-player-contact-detection/discussion/391727

sugupokoは諦めない心を身に着けた!
#実験の効率化と、新しい視点を入れることを目指したい。

suguuuuuすぐー

March 14, 2023
Tweet

More Decks by suguuuuuすぐー

Other Decks in Technology

Transcript

  1. Platform Technology Division Copyright 2020 Sony Semiconductor Solutions Corporation DATE

    1/xx サマリ:概要に解法リンク • 参加コンペ: – 1st and Future - Player Contact Detection | Kaggle • 概要: – NFLの動画から選手同士が接触している期間を検出 • 入力:2視点の動画+メタ情報(ヘルメット位置、加速度など。)+選手同士のペア情報 • 出力:フレームごとの接触判定結果 • 順位: – 49位/936チーム(シルバー) • アプローチ概要: – ベース2.5D CNN(efficientnet b0 & b1) • ポイント:接触する瞬間部分のオーバーサンプリング • ポイント:2視点動画を使った2.5D+メタ情報を同時入力するDNN • ポイント:TSMモジュール差し込み • ポイント:マルチタスクラーニングで、前後フレームも予測させるようにプラス • ポイント:2モデルアンサンブル、TTA • チームについて: – 社内勉強会メンバを収集。(やったこと:リーディング、モデル作成、モデル性能改善) • 所感: – 全体: • 初めて諦めずにkaggleを最後までやり切ってみて、色々学ぶことがあった。諦めない心の成長をした気が する。 • やってみたかった実験はあるが心が持たずやりきれなかった。。。 – コンペでムズイと感じたところ: • ラベルの偏り:接触してる期間のデータが少ない。接触する瞬間をうまく見つけ出すのが難しい • 実装の工夫:サンプルが動作が遅く、学習推論共に高速化が必要。 – その他: • チームでコンペはやっぱり難しい。 – 同じ社内で誘った人と実施したが、情報共有の難しさや業務の忙しさなどからギャップが生じ てしまう、、、 コンペ 概要 2視点の動画+メタ情報(ヘルメット位置、加速度など。)+選手同士のペア情報 結果 各選手同士が接触している期間を検出!
  2. Platform Technology Division Copyright 2020 Sony Semiconductor Solutions Corporation DATE

    2/xx kaggle • 1位 • 1st and Future - Player Contact Detection | Kaggle • 2位 • 1st and Future - Player Contact Detection | Kaggle • 3位 • 1st and Future - Player Contact Detection | Kaggle • 4位 • 1st and Future - Player Contact Detection | Kaggle • 1st and Future - Player Contact Detection | Kaggle • 5位 • 1st and Future - Player Contact Detection | Kaggle • 6位 • 1st and Future - Player Contact Detection | Kaggle • 1st and Future - Player Contact Detection | Kaggle • 9位 • 1st and Future - Player Contact Detection | Kaggle • 14位 • 1st and Future - Player Contact Detection | Kaggle • 16位 • 1st and Future - Player Contact Detection | Kaggle • 18位 • 1st and Future - Player Contact Detection | Kaggle • 19位 • 1st and Future - Player Contact Detection | Kaggle • 31位 • 1st and Future - Player Contact Detection | Kaggle • 35位 • 1st and Future - Player Contact Detection | Kaggle • 41位 • 1st and Future - Player Contact Detection | Kaggle • 45位
  3. Platform Technology Division Copyright 2020 Sony Semiconductor Solutions Corporation DATE

    3/xx 上位陣に多かったアプローチ値はコチラ。 • 2-stage型がほとんど(11/16 投稿が2stage型) • 認識結果・画像特徴量取り出し⇒LGBM, XGBで stacking • player & player、player & groundを分割しモデリング(4/16投稿) • データを見てみると傾向は違うように見える。が、player&Groundには、無意味なデータが多く含まれ ていたとのツイートもあり。 • どのプレイヤー同士かを分かるようにヒントを与える(4/16投稿) • やり方としては、BBOXを画像化し同時入力、画像の頭塗りつぶし、画像に矩形表示など。 • こういう場合、どのプレイヤーが対象なのかが画像だけだと分かりづらい。
  4. Platform Technology Division Copyright 2020 Sony Semiconductor Solutions Corporation DATE

    4/xx Twitter (コンペ後のTwitterの方が良い情報が落ちてる。) • shinmura0さんはTwitterを使っています: 「NFLの感想を4つほど。 今回の一番の収穫は、1DCNN(UEMUさん に教えてもらった)。 平滑化の目的でXGB_predictionに、最初は移動平均を使っていたが、1DCNNの方が圧倒 的だった。他のコンペでも使える汎用技術なので、動画系のみならず、使っていきたい。 (1/6)」 / Twitter • yukiさんはTwitterを使っています: 「自分の解法はざっくりこんな感じ YOLOで選手領域クロップ、2DCNNで選手 画像に加えてヘルメットbboxのchannelを追加、マルチタスクで±1stepの衝突も一緒に予測、NNの出力をLGBM でshift特徴量を加え学習、最後に移動平均 細かな工夫などは他にもあるけどこれくらいやればPublic0.77くらいは 行けてた」 / Twitter • K_matさんはTwitterを使っています: 「kmat CNNパートのみシェア。 2DCNNをプレイヤ周辺でそれぞれおこなってマスクっぽいのを予測させて、プレイ ヤー間の積をとって、インターセクションの最大値をとりました。交差領域からロスを発生させるので安定性◎ https://t.co/1g2bRyfeho」 / Twitter – ラベルは作ってない。お気持ちで学習させたらそれになった。 • shinmura0さんはTwitterを使っています: 「psiチームの解法、これはマルチモーダルコンペに革命をもたらすのでは!? まさか、画像の1チャンネルをべ た塗り(2選手の距離などで)してCNNに入れるとか、思いつかない。 これは、鳥コンペ2(「音源」と「鳴いている場所」が与えられる)とかでも応用 できるし、凄い。 https://t.co/DRHSxGhuSM」 / Twitter • arutema47さんはTwitterを使っています: 「Tracking結果を画像化してCNNに突っ込むのは思いつかなかった(混戦になるとどのヘルメットに着目し てるかわからないので有効そう) 僕はヘルメットにboxを追加するという力技でした.. https://t.co/yZPqea9O6R」 / Twitter • ★ ★ ★ ★くるぴーさんはTwitterを使っています: 「2stage(nn -> nnの推論値+lgbm/xgb) にしなかったのが敗因か… LGBMとNNを最後アン サンブルすりゃいいと思ってたんだけど、こっちが最近流行ってるのかな。2stageが強いのか、複数fold使っていることでcvが安定したのか、はたまたその 両方だったのか…?」 / Twitter
  5. Platform Technology Division Copyright 2020 Sony Semiconductor Solutions Corporation DATE

    6/xx ベースラインのネットワーク構成 2.5D CNN With TSM concat -24~24, 4frame skip -24~24, 4frame skip Endzone view Sideline view 13frame 13frame MLP Meta 18個 sigmoid concat 1040 64 FC Crop with tracking info #Cropsize = helmet w*5 Resize to 128x128 0 ~ 1 FC sigmoid target Frame Contact or not 13 frames Contact or not Crop with tracking info #Cropsize = helmet w*5 Resize to 128x128 入力データ: 画像:1選手に着目し、時間方向含めて切り出し。2視点を同時利用。 メタ情報 : 中心フレームとなるデータのメタ情報を利用。
  6. Platform Technology Division Copyright 2020 Sony Semiconductor Solutions Corporation DATE

    8/xx やること、やったこと • やること – 速度アップ系 • データリダクション(間引きとか) • 推論コード高速化(ffmpegで画像化している部分を消したい) • 動画生成完了ごとに推論を実行させるようにする。 – 抜本的に精度改善系 • 事前学習モデル作成 • ヒートマップ同時入力 • LightGBM併用(メタを効率的に使うために。) • ポスト処理にて補正。 – 確率とメタを入力⇒推定 • 課題:時系列の検出境界部分を何とかしたい – 境界部分の正解ラベルを平均して滑らかに?? • アイディア:キーポイントを利用する? • モデルの見直しをする。 – ベース性能改善系 • マルチヘッドで、ヒートマップを推論できるようにする • バックボーン変更 – Resnet50、efficientnetb4, convnextv2以外 • Imbalanced sampler • 3クラスにして学習( NoContact、地面、プレイヤー)。 – 狙い:地面とプレイヤーの違いを意識させるため。 • 時間方向の密度を増やす。 • Matthews Correlation Coefficient – 1st and Future - Player Contact Detection | Kaggle – 実験 • 画像のみで確認 • LightGBMで実験 – 仮説 • プレイ開始時のプレイやの周辺密度で傾向が変わりそう。要傾向確認! – 密集している方がむずいのか、疎なほうがむずいのか。 – ぶつかった後に地面にぶつかるとかどうなのだろう。 • ラベルの作りが6フレームおきなので、中間フレームを埋めなきゃいけない。 • やったこと – 速度アップ系 • 事前切り出しでデータ生成⇒失敗 • Numpyに書き換え⇒よさげ – 抜本的に精度改善系 • G_flugで分ける。地面ぶつかりと、プレイヤー同士ブツカリをモデル分離⇒精 度大改善(0.694) – ベース性能改善系 • TSMの利用⇒効果あり +0.15(0.709) – https://www.kaggle.com/competitions/dfl-bundesliga- data-shootout/discussion/360236 • 切り出すフレーム範囲の変更⇒validは微妙 – 現状24frameの4飛ばし⇒12frameの2飛ばし • バックボーン変更⇒効果ありそう – Efficientnetb4>resnet50 – 学習未集束:Convnext • 切り出し方変更⇒効果ありそう – ヘルメット周辺、メットサイズx10で切り出し • FOCAL LOSS⇒再実行してみる – LossがNanになった。。。 • Imagenet 事前学習の利用 – LossがNanになる・・・・ – 実験 • 画像抜きで、メタデータだけで学習⇒うんち • 片方の視点+メタで確認 – 両方の視点ある方が良い。特性が異なる。 • データの並び順を修正(bt* c * w* h入力に変更) (mmcv-15) – 効果無しっぽい。変化なし • 1フレームずつ±16フレームインプット (mmcv13) • ヒートマップ時系列6フレームおき(効果無し。) • オーグメンテーションが±6を修正。
  7. Platform Technology Division Copyright 2020 Sony Semiconductor Solutions Corporation DATE

    9/xx P:まったくできない 0.0_58190_002259-42030-46176_V24_H89.mp4 0.0_58205_000809-28103-52445_H35_V82.mp4 0.0_58209_001445-38622-40621_H13_V30.mp4 0.0_58211_002891-39973-52411_H10_V30.mp4
  8. Platform Technology Division Copyright 2020 Sony Semiconductor Solutions Corporation DATE

    10/xx P:まったくできない 0.0_58218_003210-37095-38619_V74_H96.mp4 0.0_58219_000820-37778-47818_H56_V75.mp4 0.0_58240_000086-38947-52536_V11_V13.mp4
  9. Platform Technology Division Copyright 2020 Sony Semiconductor Solutions Corporation DATE

    11/xx V03-1の結果分析 Game-playごとのMCC分布 0.0_V90_H78_58537_003722-42443-43297.mp4
  10. Platform Technology Division Copyright 2020 Sony Semiconductor Solutions Corporation DATE

    12/xx 分布解析(コンタクトあるモノのみ) ①各game_play-player_idsにおける フレームの長さ ②各game_play-player_idsにおける コンタクトしているフレームの長さ ③各game_play-player_idsにおける コンタクト÷フレームの長さ 考察・分かるコト: ・toGroundとtoPlayerで、 game_play-player_idsごとの見ているフレームの長さは違う。(①より) ・地面とぶつかる長さは長めが多い。一方、プレイヤーは短い (②より) ・長さは違うが、分布は似ているようにデータセットが作成されている(③より) #プレイヤーの方が多めに含まれているように見えるかも。
  11. Platform Technology Division Copyright 2020 Sony Semiconductor Solutions Corporation DATE

    13/xx 分布解析(全部あるモノのみ) ①各game_play-player_idsにおける フレームの長さ 非コンタクト時の長さ
  12. Platform Technology Division Copyright 2020 Sony Semiconductor Solutions Corporation DATE

    14/xx • Distanceが2<を取り出し – contact時の距離は99%が2以下なので。 • 分かるコト – contact時は正規分布 – 非contact時は増加
  13. Platform Technology Division Copyright 2020 Sony Semiconductor Solutions Corporation DATE

    15/xx メタデータの相関確認 Contact == 1 Contact == 0 • distanceに対する相関の違いは? – どうやって比較すればいいんだろう・・・
  14. Platform Technology Division Copyright 2020 Sony Semiconductor Solutions Corporation DATE

    17/xx • game_play: プレイの一意のゲーム キーとプレイ ID の組み合わせ。 • game_key: ゲームの ID コード。 • play_id: プレイの ID コード。 • nfl_player_id: プレイヤーの ID コード。 • datetime: 10 Hz でのタイムスタンプ。 • step: プレイ開始を基準としたプレイ内のタイムステップ。 • position: プレーヤーのフットボールの位置。 • team: プレーヤーのチーム。ホームまたはアウェイ。 • jersey_number:選手の背番号 • x_position:フィールドの長軸に沿ったプレーヤーの位置。下の図を参照してください。 • y_position: フィールドの短軸に沿ったプレーヤーの位置。下の図を参照してください。 • speed: 速度 (ヤード/秒)。 • distance: 前の時点からの移動距離 (ヤード)。 • orientation: プレイヤーの向き (度)。 • direction: プレイヤーの動きの角度 (度)。 • acceleration: ヤード/秒^2で表した合計加速度の大きさ。 • sa: プレーヤーが動いている方向の符号付き加速度ヤード/秒^2。