2018/09/16ツイート深層学習(ディープラーニング)を使ってみました【OpenCVを使ったスポーツ画像解析5】画像からテニス選手の位置を検出するでは、選手の初期位置を検出するために、HOG特徴量とSVM(サポートベクターマシン)を組み合わせた手法を用いました。今度は流行りの深層学習(ディープラーニング)を用いて選手の動きをトラッキングしてました。トラッキングした動画は↓になります。奥側の選手:「playerup」と検出しています。奥側の選手は、画像サイズに対して小さいからか、検出できていない時間帯も多いです。これは小さい選手の学習データを増やせば解決できる問題かと思っています。それでは、どうやって学習データをつくったか、モデルに学習させたか。簡単ですが、概要を↓に書いてみました。R-CNN、SSD、YOLOなどいろんな手法があるようです。ここではSSDという手法を用いました。SSDモデルをKerasで実装した↓のリポジトリを利用しました。github.com/rykov8/ssd_kerasこのリポジトリでは学習済みモデルが実装されているので、ダウンロードしてからちょっとの作業でデモを試すことができます。デモの動かし方は、こちらのサイトを参考にするとよいかと思います。高速リアルタイム物体検出デモをKerasで試す初期設定では、人、猫、犬など20種類の物体を検出できるようになっていますが、ここでは試合をしている2選手とボールとして物体検出できるようにカスタマイズしていきます。手前側の選手、奥側の選手、それぞれをバウンディングボックスで囲った学習データを作成しました。(画像は↑の動画と同じになりますが、実際にはこの画像は学習には使っていません)手前側の選手:「playerdown」、奥側の選手:「playerup」とラベル付けをしながらxmlファイルを作成し、学習データをつくっていきます。やり方は、こちらのサイトを参考にさせていただきました。物体検出用の画像アノテーション正解データ生成に便利なツール紹介されているツールを使うと、バンディングボックスを指定してラベル付けするのをマウス操作で簡単に行うことができますし、xmlデータの生成も自動でやってくれます。物体検出をそこそこの性能でやるためには、数千~数万枚の学習データを作成する必要があり、こういうツールを使用しないと作業がかなり辛くなります。今回は↑の手順で2000枚のデータをつくって学習させてみました。ダウンロードしたSSDモデルには、VOC2007のデータセット(5000枚)で学習済みのモデルがあります。そこにテニスの試合用のデータとして、2000データを加えて転移学習させたという形になります。学習データの作成が終わったら、そのデータを使ってSSDモデルに学習させる必要があります。学習ではこちらのサイトを参考にさせていただきました。同じお点前で、自分でつくった学習データを学習させることができます。・get_data_from_XML.pyを実行し、学習データをまとめたファイルの作成(**.pklファイル)・train.pyで学習スタートという順番で学習させます。私のGPUマシン(GTX1080Ti)では、学習に10時間ぐらいかかりました。こんな感じでテニスの試合のトラッキングツールを作成しております。ツールと言える段階にはありませんが。課題ややるべきことは多くありますが、工夫を加えながら今後も開発を進めていこうと思っております。ご意見ご要望や試合動画を募集中ご意見やご要望あれば、datatennisnet@gmail.comまでご連絡ください。アマチュアプレーヤー向けにも開発していきたいと思っているので、試合の動画を提供していただける方は是非ご連絡ください。選手の動きをトラッキングしたデータ(動画やポイント毎の移動量)を作成し、送付いたします。錦織がディミトロフを下しました。~ストロークの回転数と速度、リターン位置~先日放送されたBS1のスポーツデータコロシアムで、テニスが取り上げられました。link購読するサイトについて「データ」×「テニス」をキーワードにブログを書いたり、データを公開したり、データ分析用のツール開発を進めてます。詳細は「サイトについて」にて。ツイッターもやってます。データテニス【DataTennis】サイト管理人がつくったテニスのスコア記録用のアプリです。otakomaサイトリンクテニス・ライブスコア(FlashScore)・男子ATP/女子WTAツアー/チャレンジャーなどほぼ全てのテニストッププロの試合のライブスコアを確認することができます。