👩‍💻

最新の3D姿勢推定をMotionBert、AlphaPoseでしてみる

2024/10/23に公開

はじめに

姿勢推定の中でも、最新の3次元の骨格座標を推定する。
特別なカメラ、GPUは必要とせず、オープンソースであるMotionBertAlphaPoseを利用して行う。

3D姿勢推定とは

https://youtu.be/slSPQ9hNLjM

流れ

  1. AlphaPoseを利用して、動画から2次元の骨格座標を推定する。
  2. MotionBertを利用して、上記の2次元の骨格座標から3次元の骨格座標を推定する。

AlphaPoseによる2次元の骨格推定

AlphaPoseとは

MotionBertで3D姿勢推定するためには、まず決められたフォーマットの2次元の骨格座標が必要。
その骨格データを取得するために、AlphaPoseを使用する。

AlphaPoseは、公式にMotionBertから利用を推奨されており、

同様の機能のOpenPose (CMU-Pose)より高い推定精度を持ち、

NVIDIA製のGPUや特殊なカメラを必須としない。

https://github.com/MVIG-SJTU/AlphaPose

AlphaPoseの実装

下記の記事を参考にしてAlphaPoseをインストール。

https://github.com/MVIG-SJTU/AlphaPose/blob/master/docs/INSTALL.md

セットアップが済んだら、下記のモデルを使用して、骨格推定する。
https://github.com/MVIG-SJTU/AlphaPose/blob/master/docs/MODEL_ZOO.md#halpe-dataset-26-keypoints

下記の設定ファイルとモデルファイルがクローンしたディレクトリに存在しない場合は、上記のサイトからダウンロードして所定のディレクトリに配置してから、実行する。

・256x192_res50_lr1e-3_1x.yaml
・halpe26_fast_res50_256x192.pth

実行結果として、

2次元の骨格座標をJSONファイル形式で得る。

詰まった点

・ライブラリのバージョンが最新でないものが多いので、仮想環境のanacondaで環境構築するのがおすすめ。
Windowsの場合は、下記の記事に注意。
https://github.com/MVIG-SJTU/AlphaPose/blob/master/docs/INSTALL.md#windows

・AlphaPose/trackers/PoseFlow/requirements.txtで指定されているバージョンでnumpy等のライブラリをインストールしていたが、それだと動作せず、githubの「Issues」に投稿されていたバージョンに変更してうまくいった。

MotionBertによる3次元の骨格推定

MotionBertとは

単眼カメラによる3D姿勢推定で最も高い精度を出しているツールのひとつ。

https://paperswithcode.com/sota/monocular-3d-human-pose-estimation-on-human3

NVIDIA製のGPUや特殊なカメラを必須としない。

https://github.com/Walter0807/MotionBERT

MotionBertの実装

下記の記事を参考にして、MotionBertをインストール。

https://github.com/Walter0807/MotionBERT/blob/main/README.md#installation

windowsの場合、
下記の記事の通りに、コードを修正する必要がある。

https://github.com/Walter0807/MotionBERT/pull/69/commits

下記の記事を下記の記事を参考にして、MotionBertを実行。

https://github.com/Walter0807/MotionBERT/blob/main/docs/inference.md#3d-pose

実行結果として、

3次元の骨格座標データを得る。

詰まった点

・GPUのCUDAはなくても、動作するので、インストール時にエラーが発生した場合は、下記の通り、変更してみる。

conda install pytorch torchvision torchaudio pytorch-cuda=11.6 -c pytorch -c nvidia

変更後

conda install pytorch torchvision torchaudio cpuonly -c pytorch

・python infer_wild.pyの実行で、
windowsの仮想メモリが不足してエラーが発生。増やしてみても解決しなかった。
infer_wild.pyを下記の通り編集して、処理の並列化を無効にすることで解決した。

'num_workers': 1,#もともとは8

最後に

初めての投稿なので、説明不足の部分があると思います。
不明点、間違いなどがございましたら、コメントからご指摘いただけるとありがたいです。

この3D姿勢推定の技術を利用して、歩き方から個人の識別の研究に取り組んでいます。
その記事も今後投稿しますので、よければお待ちください。

Discussion