DataTennis.NET

データテニスドットネット

AI技術(TrackNet)を使ってテニスのボール軌道をトラッキング

公開日:
最終更新日:2020/02/03

      2020/02/03

ディープラーニング(深層学習)を活用してテニスのトラッキングシステムを作りたいでも書きましたが、テニスの試合のデータ記録を自動化したく、ディープラーニングを活用したトラッキングシステムの開発に取り組んでます。

テニスのトラッキングシステムでは、
・選手の動き
・テニスコート
・ボール
のデータ取得を自動化したいと思っています。

↓は、試合の映像から選手の動きとテニスコートを検出し、真上からみた位置に変換してアニメーションにしたものですが、ボールの軌跡が検出&プロットすることができていません。

ボールはサイズが小さい(=特徴が少ない)、瞬間的に動くものなので静止画にするとぶれる、など物体検出するのに難しい要因がいくつかあります。

カメラが固定されていればフレーム間差分という1つ前の画像フレームとの差をとって、動いたものだけを浮き出させる方法があって、下の動画のようにボールを検出することができます。

Qiita記事でもやり方を説明してます。
OpenCV(Python版)でテニスのボール軌道を検出する

ただ、トッププロの試合はカメラがパン、ズームしたり、画角が移動することが多々あります。そうすると背景も一緒に動体として検出されてしまい、ボールがその中に埋もれてしまいます。画像解析でなんとかならないか、あれこれやってはいたのですが、なかなかうまくいかず。

よい手法はないかなあと思っていたところ、はんぺんさんのツイートが。

すごい、こんな精度良くボールを検出できるんだ。
ということで、自分もやってみました。

TrackNetに関する説明はこちらになります。
ソースコードhttps://nol.cs.nctu.edu.tw:234/open-source/TrackNet/

説明を読むと、スポーツ映像からボールを検出するための予測モデルを構築したとあり、自分がやりたいことにドンピシャの手法です。

一般的な物体検出は、動画の各フレームを個別に処理して物体を検出します。TrackNetは1つ前と、2つ前のフレームも含め合計3つのフレームで処理します。
僕ら人間も、過去のボールの動きも含めてボールの動きを捉えてると思っていて、それと同じことなのかなあと思っています。

いい感じにボール検出ができましたが、こちらの手法は推論の計算に多くの時間を要します。
(GPU1080Ti×1の環境)

↑の動画は30秒程度の動画ですが、12時間ぐらいの時間を要しました。
画像サイズを小さくするなど、工夫をしないと実際に使うのは難しいかなと。テニスの試合は1試合数時間になりますから。
まだまだ課題は山積してますが、引き続き開発を進めていきたいなと思います。

以上、テニスのトラッキングシステムの進捗でした。

 - blog, スポーツ画像解析