0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Apple Silicon Mac で SMPL-X を動かすまで

0
Last updated at Posted at 2026-07-24

はじめに

人体メッシュ 3D モデルとして有名な SMPL / SMPL-X を触ってみたいと思っても、最初の一歩で「環境構築」「モデルファイル」「可視化ライブラリ」の3つが絡んで、意外と詰まりやすいです。

この記事では、Apple Silicon Mac 上で まず SMPL-X のコア機能を動かす ところまでを最初のステップの第1目標として整理し、さらに、次のステップの可視化の試しとして smplx リポジトリの examples/demo.py を動かそうとして遭遇したエラーと対処もまとめます。

この記事で分かること

  • Apple Silicon Mac で SMPL-X を試すための最小構成
  • PyTorch の MPS が使えるかどうかの確認方法
  • SMPL-X の forward を試す最小テスト test_smplx.py でコア機能が動いていることを確認する方法
  • examples/demo.py を動かす段階で遭遇した可視化系のエラーと対処法

前提・想定読者

この記事は、次のような人を想定しています。

  • Apple Silicon Mac を使っている人
  • Python / PyTorch を少し触ったことがある人
  • SMPL / SMPL-X をこれから手元で試したい人

逆に、この記事では SMPL-X の理論やパラメータ意味の詳細には深入りしません。まずは 手元で動かす ことを優先します。

この記事のゴール

この記事では、目標を最初から2段階に分けて考えます。

第1目標: test_smplx.py が動くこと

ここが最初の成功ラインです。

  • Python 仮想環境を作る
  • PyTorch をインストールし、MPS が見えることを確認する
  • smplx をインストールする
  • SMPL-X のモデルファイルを配置する
  • test_smplx.py を実行し、verticesjoints が出ることを確認する

第2目標: examples/demo.py の可視化を試すこと

次のステップとして、smplx リポジトリの examples/demo.py を動かして、可視化まで試します。

ただし、この段階では SMPL-X 本体ではなく、pyrender や Open3D といった 可視化側の依存ライブラリ に起因する問題に遭遇することがあります。

構成の考え方

今回いちばん大事なのは、SMPL-X の コア機能の確認可視化の試行 を分けることです。

test_smplx.py が通っていれば、少なくとも SMPL-X の forward 自体は成功しています。一方で demo.pypyrender / matplotlib / open3d などの可視化モジュールに依存するため、ここでコケたとしても「SMPL-X 本体が動いていない」とは限りません。

この切り分けを最初にしておくと、トラブルシュートがかなり楽になります。

環境構築

ここから、Apple Silicon Mac で最小構成を作っていきます。

1. Python 仮想環境を作る

まずは作業ディレクトリと仮想環境を作ります。PyTorch は macOS で通常の Python 環境上に pip で導入できます。

mkdir smplx-on-apple-silicon
cd smplx-on-apple-silicon

python3.11 -m venv .venv
source .venv/bin/activate

python --version

ここでは Python 3.11 を使っています。Open3D の Apple Silicon 周りでは Python 3.12 より 3.11 を推奨する issue もあり、現時点では 3.11 のほうが扱いやすいでしょう。

続けて、pip 周りも上げておきます。

python -m pip install --upgrade pip setuptools wheel

2. PyTorch を入れる

Apple Silicon Mac では、PyTorch は MPS backend を通じて GPU を利用できます。

まずは通常どおりインストールします。

pip install torch

導入後、MPS が見えているか確認します。

python - <<'PY'
import torch
print("torch version:", torch.__version__)
print("MPS available:", hasattr(torch.backends, "mps") and torch.backends.mps.is_available())
PY

MPS available: True が出れば、Apple Silicon の GPU を使う準備ができています。

ここで False でも CPU 実行はできますが、Apple Silicon 環境の利点を活かしたいなら後で見直したほうがよいです。

3. smplx をインストールする

SMPL-X の Python パッケージは、公式リポジトリで pip install smplx[all] が案内されています。

pip install "smplx[all]"

導入確認として、まずは import だけ試します。

python - <<'PY'
import smplx
print("smplx imported successfully")
PY

ここが通れば、少なくとも Python パッケージとしての smplx は使える状態です。

4. モデルファイルを配置する

ここが最初のハマりどころです。

smplx をインストールしても、SMPL-X のモデルファイル自体は別途用意する必要があります。

たとえば次のような配置にしておくと分かりやすいです。

models/
└── smplx/
    ├── SMPLX_MALE.npz
    ├── SMPLX_FEMALE.npz
    └── SMPLX_NEUTRAL.npz

最初に試すだけなら、SMPLX_NEUTRAL.npz があれば十分です。

smplx リポジトリ の README でも、モデルファイルをダウンロードしたうえで demo.py を動かす流れが説明されています(モデルファイルをダウンロード入手するには、SMPL-X公式サイトでアカウント登録をする必要があります)。

第1目標: test_smplx.py でコア機能を確認する

ここからが本番です。

まずは、forward が通って vertices と joints が得られるか を確認します。

以下のスクリプトは、SMPL-X モデルを読み込み、ゼロ姿勢・ゼロ形状の状態で verticesjoints を出す最小例です。

このスクリプトを test_smplx.py として保存します。

import torch
from smplx import SMPLX

model = SMPLX(
    model_path="./models/smplx",
    gender="neutral",
    batch_size=1,
    use_pca=False,
    flat_hand_mean=True,
)

betas = torch.zeros((1, 10))
body_pose = torch.zeros((1, model.NUM_BODY_JOINTS * 3))
global_orient = torch.zeros((1, 3))
left_hand_pose = torch.zeros((1, model.NUM_HAND_JOINTS * 3))
right_hand_pose = torch.zeros((1, model.NUM_HAND_JOINTS * 3))
expression = torch.zeros((1, model.num_expression_coeffs))
jaw_pose = torch.zeros((1, 3))
leye_pose = torch.zeros((1, 3))
reye_pose = torch.zeros((1, 3))
transl = torch.zeros((1, 3))

output = model(
    betas=betas,
    body_pose=body_pose,
    global_orient=global_orient,
    left_hand_pose=left_hand_pose,
    right_hand_pose=right_hand_pose,
    expression=expression,
    jaw_pose=jaw_pose,
    leye_pose=leye_pose,
    reye_pose=reye_pose,
    transl=transl,
)

print("vertices:", output.vertices.shape)
print("joints  :", output.joints.shape)

そして、実行します。

python test_smplx.py

vertices:joints: の shape が表示されれば成功です。

この時点で、Apple Silicon Mac 上で SMPL-X のコア機能は動いている と判断できます。

ここで一度区切る

個人的には、ここで一度「成功」とみなすのが重要だと思っています。

というのも、この先の可視化は smplx 本体ではなく、pyrender や Open3D などの周辺事情に影響されやすいからです。

つまり、上の test_smplx.py が動いたなら、少なくとも

  • smplx のインストール
  • モデルファイルの配置
  • SMPL-X の forward
  • PyTorch 連携

まではできています。

第2目標: examples/demo.py を試す

次のステップとして、smplx リポジトリの examples/demo.py を動かしてみました。この demo.py--plotting-module 引数で pyrender, matplotlib, open3d を切り替えられるので、可視化確認の入り口としてちょうど良いです。

git clone https://github.com/vchoutas/smplx.git
cd smplx

python examples/demo.py \
  --model-folder ../models \
  --gender=neutral \
  --plotting-module=pyrender

ただし、この段階でいくつかハマりどころがありました。

エラー対処集

ここからは、第2目標の可視化を試したときに遭遇した問題 です。

第1目標の test_smplx.py が通っているなら、SMPL-X 本体ではなく可視化周辺を疑うのがコツです。

エラー1: NumPy 2.x と pyrender の互換性

demo.py--plotting-module=pyrender で試したとき、NumPy 2.x 環境では pyrender の互換性問題に当たることがあります。

pyrender 側の issue でも、NumPy 2.x に対応していないことが報告されています。

典型的には、こんなエラーです。

AttributeError: `np.infty` was removed in the NumPy 2.0 release. Use `np.inf` instead.

NumPy 2.0 では後方互換性のない API 整理が入っており、移行ガイドでも互換性対応が必要であることが説明されています。

この問題は SMPL-X 本体ではなく、pyrender 側の NumPy 追従が追いついていない ことが原因です。

対処としては、まず NumPy を 1.x 系に固定するのが現実的です。

pip install "numpy<2"

明示的に固定するなら、次でもよいです。

pip install numpy==1.26.4

NumPy 2 系の移行期間中は、こうした依存関係のズレが起きやすいので、可視化ライブラリを含む環境では numpy<2 にしておくのが無難です。

エラー2: Apple Silicon 上の Open3D のアーキテクチャ不一致

次に、demo.py--plotting-module=open3d を試したとき、Apple Silicon では Open3D の import や GUI 周りで詰まることがあります。

Open3D は公式ドキュメントで ARM64、つまり Apple Silicon をサポートしている一方、環境によっては Python バージョンや wheel の組み合わせで問題が出ることがあります。

まず確認したいのは、自分の Python が本当に arm64 ネイティブで動いているか です。

uname -m
python --version

uname -marm64 なら、少なくとも OS 側は Apple Silicon ネイティブです。

次に Open3D を素で import してみます。

python - <<'PY'
import open3d as o3d
print(o3d.__version__)
PY

もしここで import エラーが出るなら、SMPL-X ではなく Open3D 側の問題です。

また、Open3D の Apple Silicon issue では Python 3.12 より 3.11 を勧めるコメントもあり、少なくとも現時点では Python 3.11 を使う のが無難です。

まずは次のように確認するのがおすすめです。

pip install open3d
python - <<'PY'
import open3d as o3d
print(o3d)
PY

Open3D の ARM サポートはありますが、場合によってはソースビルドや wheel の見直しが必要になることもあります。

そのため、この記事の段階では Open3D 可視化が動かなくても、第1目標は達成している と割り切るのが大事です。

ここまでの整理

今回の要点は、次の3つです。

  • test_smplx.py が動けば、SMPL-X のコア機能は動いている
  • examples/demo.py は便利だが、可視化ライブラリ側の依存関係に影響されやすい
  • したがって、コア機能の成功可視化の成功 は分けて考えるべき

この整理をしておくと、エラーに遭遇したときも「何が壊れているのか」を冷静に切り分けられます。

ここまでのコマンドまとめ

最後に、この記事で使ったコマンドをまとめておきます。

mkdir smplx-on-apple-silicon
cd smplx-on-apple-silicon

python3.11 -m venv .venv
source .venv/bin/activate

python -m pip install --upgrade pip setuptools wheel
pip install torch
pip install "smplx[all]"

python - <<'PY'
import torch
print("torch version:", torch.__version__)
print("MPS available:", hasattr(torch.backends, "mps") and torch.backends.mps.is_available())
PY

# test_smplx.py を実行
python test_smplx.py

# 可視化を試すとき
pip install "numpy<2"
pip install open3d

# smplx リポジトリの取得
git clone https://github.com/vchoutas/smplx.git
cd smplx

# smplx デモの実行(可視化)
python examples/demo.py \
  --model-folder ../models \
  --gender=neutral \
  --plotting-module=open3d

SCR-20260724-eirv.png

おわりに

SMPL / SMPL-X の勉強は、研究テーマ・プロジェクト「ダンス動画から 3DCG / モーションデータの AI 検出」に含まれる一つの領域として始めました。

その最初のステップとして、Apple Silicon Mac 上で SMPL-X のコア機能が動くところまでを確認し、そして smplx のデモによる可視化も試してみました。

smplx は PyPI から導入でき、PyTorch GPU サポートも macOS on Apple Silicon Mac で普通に使えるので、SMPL / SMPL-X の勉強・研究は Mac でも十分にできることが判りました。

次のステップとして、この環境をベースにして、SMPL / SMPL-H / SMPL-X パラメータを .npz に保存し、再読込して中身を解析する 、さらに 実用的な可視化をツールを作る 方向へ進めていきたいと思っています。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?