Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
20
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

VideoPose3Dを動かしてみた(Detectronから)

CVPR2019のVideoPose3Dを有志の実装を参考にして動かしてみました。環境設定苦労したのであまりスマートじゃないですが日本語訳としてメモ残します。誰かの参考になれば。

3D human pose estimation in video with temporal convolutions and
semi-supervised training

alt

alt

論文紹介ページ, GitHub

元論文のコードでは、自分で用意した動画を使うところまでは公開されていなかったので、GitHubのissueから見つけたtobiasczさんという方のこちらののコードを動かします。
基本的にはこれに従い、エラーに対応するだけです。

全体の流れとしては、まずDetectronで2Dpose推定して、そのデータをVideoPose3Dに流す、となります。

それぞれのステップは独立してるので、今回は別々に環境用意しました。(というか、Detectronで用意した環境が後半でうまく動かなかったので後半用の環境も用意しました)

環境

Ubuntu 18.04.2 LTS
NVIDIA Driver Version: 390.116
ffmpeg4.0

ダウンロードするものまとめ

その都度書いてありますが、最初にまとめておきます。
e2e_keypoint_rcnn_R-101-FPN_s1x.yaml
COCO keypointsの重みファイル
chackpointファイル
・data_3d_h36m.npz (後述のコードを実行してください)

動画とフレーム画像の用意

動画は好きなものをどうぞ。
フレームはffmpegで用意します。割愛。
ちなみにffmpegはインストールされてないと最後の可視化ができません。

Detectron(2Dpose推定)

元はおそらくセグメンテーションですが、poseの部分だけ活用します

Detectron用仮想環境

公式がpython2.7で動かしてるらしいので、それに従います。
Caffe2を使う関係でCUDA8, cudnn7にします。

conda create -n detectron python=2.7 numpy=1.16.2 matplotlib scipy yaml pyyaml=3.12 protobuf opencv
conda activate detectron
conda install -c anaconda cudatoolkit==8
conda install -c pytorch cuda80
conda install cudnn
conda install pytorch-nightly cuda80 -c pytorch #これでcaffe2が入る

#好きなディレクトリに移り
git clone https://github.com/tobiascz/VideoPose3D.git

VideoPose3D/detectron_tools/ の下に以下のファイルを置きます

・用意したフレーム画像
e2e_keypoint_rcnn_R-101-FPN_s1x.yamlDetectronのGitHubからdownload)
COCO keypointsの重みファイル (もしなくなってたらこちらを参照

Detectron実行

python infer_simple.py --cfg e2e_keypoint_rcnn_R-101-FPN_s1x.yaml --output-dir demo/output --image-ext jpg --wts model_final.pkl input_floder

input_folder(フレーム画像の場所)の中にある--image-extの拡張子の画像に対して2Dpose推定を行います。
他に指定しているのは用意したファイルとかです。
2Dposeが書かれた画像と.npzファイルが生成されるはずです。これが2Dposeデータです

nishikori441pose.png

VideoPose3D (本題)

仮想環境構築

python2のままやろうとしたらいろいろ行き詰まったのでpython3の環境作ってしまいました。
pythonのバージョン以外はさっきと同じです。numpy1.16.3だと途中でつまるので注意してください。

conda create -n videopose python=3.6 numpy=1.16.2 matplotlib scipy yaml pyyaml=3.12 protobuf opencv
conda activate videopose
conda install -c anaconda cudatoolkit==8
conda install -c pytorch cuda80
conda install cudnn
conda install pytorch-nightly cuda80 -c pytorch #これでcaffe2が入る

ファイルの移動

・/VideoPose3D/data/にdetectronで先程作ったdata_2d_detections.npzを置く
・/VideoPose3D/data/にdata_3d_h36m.npzを置く。これは公式の手順でダウンロードできます。以下にコピペ

cd data
wget https://www.dropbox.com/s/e35qv3n6zlkouki/h36m.zip
python prepare_data_h36m.py --from-archive h36m.zip
cd ..

・/VideoPose3D/checkpoint/ にchackpointファイル(ダウンロードします)を置く

・/VideoPose3D/に元の動画を置く

エラー回避のためのいろいろ

ここまでがやり方として書かれてましたが、そのままでは動かなかったので以下やったことをメモしておきます。

・run_wild.pyの66行目np.loadの中に encoding = 'latin1' という引数を追加

# こうなる
keypoints = np.load('data/data_2d_' + args.keypoints + '.npz',encoding = 'latin1')

・common/visualization.py の中でffmpegのパスを通す(?)。
※自分のffmpegの場所を指定してください

#import文などのあとで
plt.rcParams['animation.ffmpeg_path'] =  '/usr/bin/ffmpeg'

動かす

python run_wild.py -k detections -arc 3,3,3,3,3 -c checkpoint --evaluate d-pt-243.bin --render --viz-subject S1 --viz-action Directions --viz-video input_video.mp4 --viz-camera 0 --viz-output output_video.mp4 --viz-size 5 --viz-downsample 1 --viz-skip 0

input_videoとoutput_videoの部分をundefined
指定してください。他はそのままで大丈夫のはずです。

公式のデモほどきれいに一致はしていないですが、調整すればさらによくなることが議論されてはいます


おしまい

とりあえず動かしてみました。

初記事でしたが参考になったら幸いです

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
20
Help us understand the problem. What are the problem?