【OpenCVを使ったスポーツ画像解析6】深層学習(ディープラーニング)を用いてテニス選手をトラッキング
公開日:
最終更新日:2018/09/16
2018/09/16
深層学習(ディープラーニング)を使ってみました
【OpenCVを使ったスポーツ画像解析5】画像からテニス選手の位置を検出するでは、選手の初期位置を検出するために、HOG特徴量とSVM(サポートベクターマシン)を組み合わせた手法を用いました。
今度は流行りの深層学習(ディープラーニング)を用いて選手の動きをトラッキングしてました。
トラッキングした動画は↓になります。(動画素材は、shutterstockで購入した動画を用いています)
手前側の選手:「playerdown」
奥側の選手:「playerup」
と検出しています。
奥側の選手は、画像サイズに対して小さいからか、検出できていない時間帯も多いです。
これは小さい選手の学習データを増やせば解決できる問題かと思っています。
それでは、どうやって学習データをつくったか、モデルに学習させたか。
簡単ですが、概要を↓に書いてみました。
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選手とボールとして物体検出できるようにカスタマイズしていきます。
学習データの作り方
手前側の選手、奥側の選手、それぞれをバウンディングボックスで囲った学習データを作成しました。
こんな感じです。
(画像は↑の動画と同じになりますが、実際にはこの画像は学習には使っていません)
手前側の選手:「playerdown」、奥側の選手:「playerup」
とラベル付けをしながら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】深層学習(ディープラーニング)を用いてテニス選手とボールをトラッキング