やったこと
CenterNet (https://arxiv.org/abs/1904.07850) を使ってテニスの動画から選手,ボール,コートの四隅の位置を検出しました.
おたこさん(@otakoma)の記事を参考に,CenterNetを使ってテニスの動画から選手,コートの四隅,ボールを検出してみました.
— iwashi (@iwashi_tennis) October 26, 2019
各フレームを入力して位置を検出しています.動画はアントワープ決勝のマレー対ワウリンカhttps://t.co/hFoL0SJrbS pic.twitter.com/Q3kAxLJEzU
#CenterNet
論文の著者の方がGitHubのソースコードを公開しています.
モデルの理解については,DeNAさんのページを参考にさせて頂きました.
ざっくりいうと,物体の中心点を表すヒートマップ,縦横の大きさ,オフセットを予測してバウンディングボックスを生成する手法です.ヒートマップ,大きさ,オフセットそれぞれの損失の重み付き線形和を全体の損失としています.
今回は「手前の選手,奥の選手,コートの四隅,ボール」の4クラスを設定し,学習させました.コートの四隅とボールは縦横15ピクセルのバウンディングボックスとして教師データとしています.
バックボーンモデルはDLA34を使用しました.出力は4クラスのバウンディングボックスですが,ツイートの動画ではコート,ボールのバウンディングボックスの中心点を表示しています.CenterNetのデフォルトでは入力画像のサイズは512×512ですが,今回は384×384にリサイズした画像を入力しています.
下のツイートはヒートマップの動画です.4クラスの物体の中央部分が反応しています.CenterNetのデフォルトでは出力されるヒートマップは入力画像の1/4のサイズになっているので,拡大して入力画像とアルファブレンドしています.
ヒートマップの動画 pic.twitter.com/JtTKqyglZN
— iwashi (@iwashi_tennis) October 26, 2019
#テスト結果
ハードコートの試合だけでなく,クレー,芝のコートでもテストをしました.
用意したテストデータでは選手,コートの位置推定はほぼ間違いなくできていますが,ボールに関しては未検出や誤検出が見られます.動画のフレームを切り取ると,モーションブラーにより人間でも位置がわからない場合もあります.ここから先は物体検出の精度を上げるよりも,いかに補正していくかが重要なようにも思えます.
CenterNetを用いたテニスの動画の選手,コート,ボールの位置検出 クレーコート編
— iwashi (@iwashi_tennis) October 31, 2019
2019ローマ決勝 https://t.co/Wki050Ft7g
選手,コートの四隅の検出は問題なし
クレーでもボールの検出はできている pic.twitter.com/eqbrDhkHcl
CenterNetを用いたテニスの動画の選手,コート,ボールの位置検出 グラスコート編
— iwashi (@iwashi_tennis) October 31, 2019
2019ウィンブルドン決勝 https://t.co/HciP4ywr8B
選手,コートの四隅の検出はこちらも問題なし
フェデラーのバックボレーだけ怪しいが,概ねボールも検出できている pic.twitter.com/SjAAVD0iuC
CenterNetを用いたテニスの動画の選手,コート,ボールの位置検出 グラスコート編
— iwashi (@iwashi_tennis) October 31, 2019
2017シュツットガルト決勝 https://t.co/wkIaeFoEFg
選手の検出は問題なし
時折コート上の四隅ではない点を検出している
ボールを検出できていない時間が多い pic.twitter.com/Rm0XKf0xhw