OpenPoseより自由に使える姿勢推定ライブラリMMPose

OpenPoseより自由に使える姿勢推定ライブラリMMPose ツール

「野球やサッカーなどのスポーツで姿勢推定を行いたい」
「OpenPose以外の選択肢を探している」

このような場合には、MMPoseがオススメです。
この記事では、MMPoseについて解説しています。

本記事の内容

  • MMPoseとは?
  • MMPoseのシステム要件
  • MMPoseのインストール
  • MMPoseの動作確認

それでは、上記に沿って解説していきます。

MMPoseとは?

MMPoseとは、PyTorchをベースにしたオープンソースの姿勢推定用ツールボックスです。
姿勢推定と言えば、OpenPoseが最も知名度があります。

個人的に普通に使うなら、OpenPoseで十分です。
でも、OpenPoseでは次のような画像を作成してはいけません。

OpenPoseは、スポーツに関する領域は一切利用禁止となっています。
高額なライセンス料(年間2万5千ドル)を払っても、NGと言われています。

ただ、その辺の情報は不明瞭です。
とにかく、OpenPoseにはややこしい面があると覚えておいてください。

しかし、MMPoseならそんなことは関係ありません。
商用でもスポーツでの利用でも、何でもOK。

そして、機能的にもMMPoseの方が上かもしれません。
OpenPoseは、2020年11月の更新を最後にストップしています。

それに対して、MMPoseは定期的に更新されています。
新しいアルゴリズムなども随時サポートしているようです。

また、MMPoseはOpenMMLabプロジェクトの一部でもあります。

OpenMMLabは、コンピュータビジョンを中心に開発を行っている研究チームです。
OpenMMLabが公開している成果は、以下。

MMPoseが、ライブラリとして表示されています。
他には、MMCVに注目してください。

MMCVは、PyTorchをベースとしたオープンソースのコンピュータビジョンフレームワークです。
このMMCVの中で人物姿勢推定に特化したのが、MMPoseと言うことになります。

以上、MMPoseについて説明しました。
次は、MMPoseのシステム要件について説明します。

MMPoseのシステム要件

現時点でのMMPoseの最新バージョンは、0.29.0になります。

基本的な部分として、以下が公式に明記されています。

MMPose works on Linux, Windows and macOS. It requires Python 3.6+, CUDA 9.2+ and PyTorch 1.5+.

特殊な環境でない限り、上記のシステム要件は問題ないでしょう。
それ以外の部分で説明が必要になります。

MMPoseは、OpenMMLabが開発するMMCVにおけるプロジェクトの一つです。
そして、MMCVはPyTorchをベースにしています。

この関係を前提にした場合、以下がシステム要件としてポイントになります。

  • PyTorch
  • MIM
  • MMCV 1.7.0
  • Numpy 1.23.5

それぞれを以下で説明します。

PyTorch

公式では、PyTorch 1.5以降と記載されています。
現時点で最新バージョンとなる1.13.1でも大丈夫です。

PyTorchのインストールは、次の記事で説明しています。

GPUが利用可能であれば、GPU版のインストールをオススメします。

MIM

MIMは、OpenMMLabプロジェクトの管理ツールです。
MIMを使えば、パッケージやモデルなどを一括で管理するすることができます。

MIMのインストールは、次のコマンドで可能です。

pip install openmim

MMCV 1.7.0

MMPoseは、MMCVをフレームワークにしています。
そのため、MMCVをインストールする必要があります。

MMCVは、MIMを使ってインストールします。

mim install mmcv-full

ただし、MMCVのバージョンには注意が必要です。
MMPoseを動かそうとした場合、次のようなエラーが出ることがあるかもしれません。

AssertionError: MMCV==1.7.1 is used but incompatible. Please install mmcv>=1.3.8, <=1.7.0.

このようにしてインストールすれば、上記エラーを回避できます。

mim install mmcv-full==1.7.0

時期やバージョンによって、インストールすべきバージョンは異なるでしょう。
エラーが出た場合は、その内容を見て対処する必要があります。

Numpy 1.23.5

Numpyが1.24.0以降であれば、次のようなエラーが出ます。

AttributeError: module 'numpy' has no attribute 'int'.
`np.int` was a deprecated alias for the builtin `int`. To avoid this error in existing code, use `int` by itself. Doing this will not modify any behavior and is safe. When replacing `np.int`, you may wish to use e.g. `np.int64` or `np.int32` to specify the precision. If you wish to review your current use, check the release note link for additional information.
The aliases was originally deprecated in NumPy 1.20; for more details and guidance see the original release note at:
    https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations. Did you mean: 'inf'?

そのため、事前にNumpy 1.23.5をインストールしておく必要があります。

pip install numpy==1.23.5

MMPoseのバージョンが、変われば解決している可能性はあります。
強いて言うと、MMPoseの不具合のようなモノです。

以上、MMPoseのシステム要件を説明しました。
次は、MMPoseのインストールを説明します。

MMPoseのインストール

MMPoseのインストールは、Python仮想環境の利用をオススメします。
Python仮想環境は、次の記事で解説しています。

検証は、次のバージョンのPythonで行います。

> python -V  
Python 3.10.4

そして、システム要件である以下をインストール済という状況です。

  • PyTorch
  • MIM
  • MMCV 1.7.0
  • Numpy 1.23.5

ここまで準備が整っていれば、次のコマンドを実行するだけです。

pip install mmpose

インストールが完了したら、次のコードを実行してみましょう。

import mmpose
print(mmpose.__version__)

コンソールに次のようにバージョンが表示されれば、インストール成功と言えます。

0.29.0

以上、MMPoseのインストールを説明しました。
次は、MMPoseの動作確認を説明します。

MMPoseの動作確認

MMPoseの動作確認を行うには、モデルを用意する必要があります。
MIMを使えば、モデルや設定ファイルを簡単に取得できます。

以下のコマンドを実行します。

mim download mmpose --config associative_embedding_hrnet_w32_coco_512x512  --dest .

処理が完了すると、指定した場所にファイルが保存されます。

次は、姿勢推定を行いたい画像を用意します。
今回は、次の画像を用意。

input.jpg

動作確認は、次のコードで実行可能です。

from mmpose.apis import (init_pose_model, inference_bottom_up_pose_model, vis_pose_result)

config_file = 'associative_embedding_hrnet_w32_coco_512x512.py'
checkpoint_file = 'hrnet_w32_coco_512x512-bcb8c247_20200816.pth'
pose_model = init_pose_model(config_file, checkpoint_file, device='cuda:0')  # or device='cpu'

image_name = 'input.jpg'
# test a single image
pose_results, _ = inference_bottom_up_pose_model(pose_model, image_name)

# show the results
vis_pose_result(pose_model, image_name, pose_results, out_file='output.jpg')

上記を実行すると、「output.jpg」が作成されています。
この画像は、「MMPoseとは?」で紹介した画像になります。

以上、MMPoseの動作確認を説明しました。

タイトルとURLをコピーしました