DataTennis.NET

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

【OpenCVを使ったスポーツ画像解析6】深層学習(ディープラーニング)を用いてテニス選手とボールをトラッキング

公開日:
最終更新日:2018/07/27

      2018/07/27

深層学習(ディープラーニング)を使ってみました

【OpenCVを使ったスポーツ画像解析5】画像からテニス選手の位置を検出するでは、選手の初期位置を検出するために、HOG特徴量とSVM(サポートベクターマシン)を組み合わせた手法を用いました。

しかし、審判やボールパーソンまでも検出してしまい、選手と区別するためのロジックを新たに考えてコーディングする必要がありました。

それは面倒だなと思い、流行りの深層学習(ディープラーニング)に頼ってみた次第です。

深層学習を用いてトラッキングした動画は↓になります。

手前側の選手:「playerdown」
奥側の選手:「playerup」
ボール:「ball」
と検出し、選手2人の移動軌跡を表示しています。

ボールパーソンや審判など余計なものは検出していなく、ちゃんと選手2人を検出できていそうです。
ただ、ボールは検出しているときとしていないときがあり、まだまだな感じですね。

また実は上の動画は、学習データに用いた動画で、↓が学習に使っていない動画をトラッキングしたときの動画となります。

奥側の選手を前側の選手と誤検出していることがあります。ボールの検出も微妙ですね。
学習データをもっと増やすべきなのか、異常値ははじくようにする必要があるのか。
もうちょっと工夫が必要ですね。

それでは、どうやって学習データをつくったか、モデルに学習させたか。
簡単ですが、概要を↓に書いてみました。

SSD( Single Shot MultiBox Detector)について

深層学習による物体検出手法では、R-CNN、Fast R-CNN、Faster R-CNN、SSD、YOLOなどいろんな手法があるようです。
ここではSSDという手法を用いました。

SSDモデルをKerasで実装した↓のリポジトリを利用しました。
github.com/rykov8/ssd_keras

このリポジトリでは学習済みモデルが実装されているので、ダウンロードしてからちょっとの作業でデモを試すことができます。

デモの動かし方は、こちらのサイトを参考にするとよいかと思います。
SSD: Single Shot MultiBox Detector 高速リアルタイム物体検出デモをKerasで試す

初期設定では、人、猫、犬など20種類の物体を検出できるようになっていますが、ここでは試合をしている2選手とボールとして物体検出できるようにカスタマイズしていきます。

学習データの作り方

手前側の選手、奥側の選手、ボール、それぞれをバウンディングボックスで囲った学習データを作成しました。

こんな感じです。

(2018/5/2 画像を削除しました。)

手前側の選手:「playerdown」、奥側の選手:「playerup」、ボール:「ball」
とラベル付けをしながらxmlファイルを作成し、学習データをつくっていきます。

やり方は、こちらのサイトを参考にさせていただきました。
物体検出用の画像アノテーション正解データ生成に便利なツール

紹介されているツールを使うと、
バンディングボックスを指定してラベル付けするのをマウス操作で簡単に行うことができますし、xmlデータの生成も自動でやってくれます。

物体検出をそこそこの性能でやるためには、数千~数万枚の学習データを作成する必要があり、こういうツールを使用しないと作業がかなり辛くなります。

今回は↑の手順で2000枚のデータをつくって学習させてみました。
ダウンロードしたSSDモデルには、VOC2007のデータセット(5000枚)で学習済みのモデルがあります。
そこにテニスの試合用のデータとして、2000データを加えて転移学習させたという形になります。

学習のさせ方

学習データの作成が終わったら、そのデータを使ってSSDモデルに学習させる必要があります。

学習ではこちらのサイトを参考にさせていただきました。
物体検出アルゴリズム(SSD : Single Shot MultiBox Detector)を学習させてみる

VOCデータセットをダウンロードして学習させる方法が書いてありますが、
同じお点前で、自分でつくった学習データを学習させることができます。

・get_data_from_XML.pyを実行し、学習データをまとめたファイルの作成(**.pklファイル)
・train.pyで学習スタート
という順番で学習させます。
私のGPUマシン(GTX1080Ti)では、学習に10時間ぐらいかかりました。

と、こんな感じでテニスの試合のトラッキングツールを作成しております。
まだツールと言える段階にはありませんが。
課題ややるべきことは多くありますが、工夫を加えながら今後も開発を進めていこうと思っております。

ご意見ご要望や試合動画を募集中

ご意見やご要望あれば、datatennisnet@gmail.comまでご連絡ください。

アマチュアプレーヤー向けにも開発していきたいと思っているので、試合の動画を提供していただける方は是非ご連絡ください。
選手の動きをトラッキングしたデータ(動画やポイント毎の移動量)を作成し、送付いたします。

スポーツ画像解析リンク
・【OpenCVを使ったスポーツ画像解析1】テニス選手の移動量や軌跡をデータ化する
・【OpenCVを使ったスポーツ画像解析2】フェデラー選手の移動軌跡をグラフ化してみました
・【OpenCVを使ったスポーツ画像解析3】選手やテニスボールの移動を自動で検出して移動軌跡をトラッキング
・【OpenCVを使ったスポーツ画像解析4】テニスコートのラインの自動検出
・【OpenCVを使ったスポーツ画像解析5】画像からテニス選手の位置を検出する
・【OpenCVを使ったスポーツ画像解析6】深層学習(ディープラーニング)を用いてテニス選手とボールをトラッキング

 - blog, スポーツ画像解析, データ分析, テニス×テクノロジー