はじめに
###記事の内容
DeepLabCut (Windows + Google Colaboratoryでの使い方は、前回記事)とOpenPoseで、姿勢推定を行い、その出力を見比べてみました
いずれも、2D動画の各フレームに対し深層学習モデルを適用し、身体部位を推定しています
#使った動画
今回使った動画は、2015年の夏に撮影した30fps, フルHD(1920×1080)の動画です
(たしかiPhone 5sで撮ったと思います)
被写体は、筆者
場所は分かる人が見ればわかるかと思いますが、とある陸上競技場です
元はmovファイルでしたが、Qiitaへアップロードするために、gifに変換しました
フレームレートを10へ落とし、リサイズ、クロップをしています
#DeepLabCutによる推定
-
解析環境
- windows10 home (64bit)
- Miniconda 3 ←ラベリングまで
- Google Colaboratory (python3)
-
推定する身体部位 (下記17部位)
- 首
- 右肩
- 右肘
- 右手首
- 左肩
- 左肘
- 左手首
- 右尻(大転子)
- 右膝
- 右踝
- 右踵
- 右爪先
- 左尻
- 左膝
- 左踵
- 左爪先
-
各パラメータ
- ラベル枚数: 20枚 (numframes2pick)
- 最初のモデル: mpii-single-resnet-101 (init_weights)
- トレーニング回数: 800000回 (iteration)
###学習したモデルの評価
iterations | %Training dataset | Train error(px) | Test error(px) |
---|---|---|---|
80000 | 95 | 1.82 | 19.58 |
カメラが動く上、20枚しかラベリング(お手本)に使ってないためか、結構エラーがあります
###deeplabcutによる動画
ラベリングが地味に大変なのと、学習にも時間がかかりましたが、ぱっと見の推定精度はなかなかではないでしょうか
#OpenPoseによる推定
-
解析環境
- windows10 home (64bit)
- Miniconda 3
- GeForce GTX 1050Ti + CUDA
※一回目にDLCをインストールしようとしたときに入れたが、詳細は忘れてしまいました。苦労した気がします
-
推定する身体部位 (下記25部位、BODY_25)
- 鼻
- 右目、左目
- 右耳、左耳
- 首
- 右肩、左肩
- 右肘、左肘
- 右手首、左手首
- 腰
- 右尻、左尻
- 右膝、左膝
- 右踝、左踝
- 右踵、左踵
- 右母指球、左母指球
- 右爪先、左爪先
-
OpenPose
- windows用Portable Demoを使っています
めちゃめちゃ簡単です
- windows用Portable Demoを使っています
一人しか推定しないので、下記コードを実行しています
bin\OpenPoseDemo.exe --video videopath.mov --tracking 0 --number_people_max 1 --write_video videopath_op.avi --write_json videopath_op\ --display 0
windowsではaviしか出力できないようです
関節点データは、json形式で吐き出させます。フレーム毎にファイルができるので、まとめる必要がありますね
###deeplabcutによる動画
このぐらいの動画なら、ものの数十秒で推定できちゃいますね
得意な動画とそうでない動画でパフォーマンスが全然違うのが困ったところなのですが、今回の動画に対しては驚きの精度です
#おわり
ちょっと興味があるけど、どのくらいの精度なのかを知りたい方の参考になればと思います。