AI技術(TrackNet)を使ってテニスのボール軌道をトラッキング
公開日:
最終更新日:2020/02/03
2020/02/03
ディープラーニング(深層学習)を活用してテニスのトラッキングシステムを作りたいでも書きましたが、テニスの試合のデータ記録を自動化したく、ディープラーニングを活用したトラッキングシステムの開発に取り組んでます。
テニスのトラッキングシステムでは、
・選手の動き
・テニスコート
・ボール
のデータ取得を自動化したいと思っています。
↓は、試合の映像から選手の動きとテニスコートを検出し、真上からみた位置に変換してアニメーションにしたものですが、ボールの軌跡が検出&プロットすることができていません。
ボールはサイズが小さい(=特徴が少ない)、瞬間的に動くものなので静止画にするとぶれる、など物体検出するのに難しい要因がいくつかあります。
カメラが固定されていればフレーム間差分という1つ前の画像フレームとの差をとって、動いたものだけを浮き出させる方法があって、下の動画のようにボールを検出することができます。
サーブの着弾点を機械学習(SVM)で予測してます。ボールはフレーム間差分で検出。着弾点はSVMで確率が一番高い箇所を予測していて精度はまだ8割ぐらい。説明変数は、ボール間ベクトルの長さや角度変化など。1つ前と次のボール情報を使用してます。#テニスの動画解析 pic.twitter.com/4Xy5zbCVXq
— おたこ (@otakoma) June 23, 2018
Qiita記事でもやり方を説明してます。
OpenCV(Python版)でテニスのボール軌道を検出する
ただ、トッププロの試合はカメラがパン、ズームしたり、画角が移動することが多々あります。そうすると背景も一緒に動体として検出されてしまい、ボールがその中に埋もれてしまいます。画像解析でなんとかならないか、あれこれやってはいたのですが、なかなかうまくいかず。
よい手法はないかなあと思っていたところ、はんぺんさんのツイートが。
TrackNetを試してみた
入力は予測したいフレームとその直前2枚を合わせた3枚の画像
コートがオーストラリアンオープンとかUSオープンみたいに青色でかつ出来るだけコートの上から撮ってるような動画だと検出しやすい
トラッキングも含めてやればもう少しまともになりそうhttps://t.co/IrhNbpOn1x pic.twitter.com/O3TOCiCLPe— はんぺん (@hampen2929) January 18, 2020
すごい、こんな精度良くボールを検出できるんだ。
ということで、自分もやってみました。
@hampen2929 さんがTrackNet使っているツイートみて自分もやってみた。ボールの誤検出は少ないし、軌道を補完してくれるしかなりいい感じだと思う。ただ推論時間が長い。自分のやり方の問題かもしれんが。 pic.twitter.com/6cLqKS1Pl1
— おたこ (@otakoma) February 1, 2020
TrackNetに関する説明はこちらになります。
ソースコードhttps://nol.cs.nctu.edu.tw:234/open-source/TrackNet/
説明を読むと、スポーツ映像からボールを検出するための予測モデルを構築したとあり、自分がやりたいことにドンピシャの手法です。
一般的な物体検出は、動画の各フレームを個別に処理して物体を検出します。TrackNetは1つ前と、2つ前のフレームも含め合計3つのフレームで処理します。
僕ら人間も、過去のボールの動きも含めてボールの動きを捉えてると思っていて、それと同じことなのかなあと思っています。
いい感じにボール検出ができましたが、こちらの手法は推論の計算に多くの時間を要します。
(GPU1080Ti×1の環境)
↑の動画は30秒程度の動画ですが、12時間ぐらいの時間を要しました。
画像サイズを小さくするなど、工夫をしないと実際に使うのは難しいかなと。テニスの試合は1試合数時間になりますから。
まだまだ課題は山積してますが、引き続き開発を進めていきたいなと思います。
以上、テニスのトラッキングシステムの進捗でした。