SOMA 入门教程(一)统一的参数化人体模型
系列文章目录
目录
前言
参数化人体模型是人体重建、动画制作和模拟的基础,但它们之间仍存在互不兼容的问题:SMPL、SMPL-X、MHR、Anny及相关模型在网格拓扑、骨骼结构、形状参数化和单位约定方面各不相同,这使得在单一工作流中利用它们互补的优势变得难以实现。我们提出 SOMA,这是一个通过三个抽象层弥合这些异构表示的统一人体层。网格拓扑抽象层能够以每个顶点恒定时间将任何源模型的身份映射到共享的规范网格上。骨骼抽象层能够从任何人体形状(无论是静止姿势还是任意摆姿配置)中,通过单次闭式运算恢复一整套适配身份的关节变换,无需迭代优化或针对每个模型的训练。姿态抽象层通过逆向皮肤映射管道,直接从任何支持模型的带姿态顶点中恢复统一的骨骼旋转,从而无需自定义重定位即可利用异构运动数据集。这些层共同将“每对适配器”的 级计算问题简化为
级单后端连接器,使从业者在推理时能够自由混合身份源和姿态数据。整个管道端到端完全可微分,并通过 NVIDIA-Warp 实现 GPU 加速。
关键词:参数化人体模型、骨骼拟合、网格拓扑抽象、姿态反演、身份-姿态解耦、线性混合蒙皮
一、引言
参数化人体模型是计算机视觉、计算机图形学和物理人工智能的基石,能够实现大规模的人体动作重建、动画制作和模拟。其中应用最广泛的SMPL系列(SMPL:2015; SMPL-X:2019)定义了具有紧凑线性形状空间的网格,已成为姿态估计、动作生成和虚拟人合成 (shen2024gvhmr; wang2026duomo; zhang2024large; li2025genmo)。MHR(MHR:2025)引入了显式的骨骼长度参数化方案,能够更真实地捕捉不同人群间的骨骼多样性,从而解决了仅基于PCA的形状模型所面临的众所周知的局限性。Anny(bregier2025anny)基于人体测量数据而非3D扫描构建其形状空间,可对年龄、身高、体重及体成分进行语义控制,覆盖从婴儿到老年人的完整人类生命周期,旨在消除扫描采集数据中固有的群体偏见。GarmentMeasurements(GarmentCode2023)通过人体测量数据编码服装感知型身体比例,从而将形状表示扩展至服装领域。
尽管现有模型种类繁多,但具体的碎片化问题依然存在。每个模型都定义了自己的网格拓扑、关节层次结构、单位约定和参数空间。如果从业者希望将 Anny 的可解释表型控制与兼容 SMPL 的动作捕捉数据集相结合,就必须针对每对模型分别实现拓扑转换管道、独立的骨架拟合例程以及定制的坐标系转换。若采用简单粗暴的方式支持 M 个模型,则每对模型需 个适配器;实际上,这迫使研究人员过早锁定模型,从而牺牲了不同方案的互补优势。目前尚无统一接口,能够让研究人员自由混合身份源与姿态参数化方案。
我们提出 SOMA,这是一种标准化的身体拓扑结构和骨骼系统,可作为异构参数化身体模型的通用枢纽(见图 2)。SOMA 并非取代现有模型,而是将它们的静止形状输出映射到单一的共享表示形式,此后任何身份模型均可通过统一的基于位置的动画(LBS)管道进行动画处理。这将 个适配器问题简化为
个单一后端连接器,每个连接器仅需实现一次,并在推理时自由组合。
我们的贡献主要体现在四个方面:
- 通过规范拓扑实现身份-姿态解耦(SOMALayer)。我们提出了一个框架,该框架将任何受支持的参数化模型的静止形状输出映射到规范的SOMA网格和骨骼系统,从而明确地将身份表示与运动学参数化分离。单一姿态接口可在运行时驱动任何身份源模型,无需特定模型的适配代码;而统一的姿态依赖校正模型可推广至所有后端。
- 网格拓扑抽象。我们引入了一个拓扑抽象模块,该模块在初始化时预先计算每个源模型中性网格与SOMA规范网格之间的固定三维质心对应关系。运行时,身份转换无需神经网络前向传播,也无需迭代求解器。
- 骨骼抽象。我们提出了一种后端无关的骨骼拟合算法,该算法利用共享的网格对应关系,将任何模板骨骼精确拟合到新的身体形状中。给定已转换的静止形状,该算法通过单次解析前向传播即可恢复适应身份的世界空间关节变换,无需迭代优化或针对特定模型的训练。
- 姿态抽象。我们引入了一个姿态抽象模块,该模块通过结合牛顿-舒尔茨正交化算法的解析逆LBS,从任何受支持模型的姿态顶点中恢复SOMA骨骼旋转,从而能够将SMPL、MHR及其他模型的运动数据直接转换为SOMA的统一骨骼规范。
整个 SOMA 正向处理过程具有端到端的可微分性,因此可直接作为可微分层应用于大规模优化和机器学习训练管道中。
二、相关工作
2.1 参数化人体模型
在参数化人体建模领域,研究取得了显著进展(anguelov2005scape;SMPL:2015;pishchulin17pr;osman2020star;ghum;MHR:2025;bregier2025anny)。SMPL(SMPL:2015)提出了一种基于顶点的线性混合蒙皮模型,其中包含通过学习获得的校正混合形状,该模型凭借6,890个网格顶点和紧凑的PCA形状空间,已成为事实上的行业标准。STAR(osman2020star)提出了更稀疏的蒙皮权重,以减少不希望出现的跨关节耦合。SMPL-H (MANO:SIGGRAPHASIA:2017) 和 SMPL-X (SMPL-X:2019) 分别通过 MANO (MANO:SIGGRAPHASIA:2017) 实现全关节手部,以及通过表现力丰富的面部,扩展了 SMPL 家族。MHR (MHR:2025) 通过显式建模骨骼长度来解决骨骼模糊性问题,从而提高不同身体比例下的拟合精度。Anny (bregier2025anny) 基于人体测量数据而非3D扫描构建其形状空间,从而实现了从婴儿到老年人的表型控制(年龄、身高、体重)。这些模型各自定义了其网面拓扑、关节层次结构和参数空间。SOMA 并非旨在取代其中任何一个模型,而是提供了一套标准化的网格拓扑结构和骨骼绑定,任何受支持的后端系统均可通过单一统一的管道对其进行驱动。
2.2 人体运动估计与生成
大量研究致力于从单目图像(hmr;iqbal2021kama;spin;pare;hmr2;yuan2022glamr;camerahmr;kocabas2024pace;nlf;wang2025prompthmr)、视频(vibe;tcmr; goel2023humans; wham; shen2024gvhmr; wang2026duomo),并能根据文本、音乐及场景上下文等多种条件信号生成动作(tevet2023human; yuan2023physdiff; zhang2022motiondiffuse; zhang2024large; petrovich24stmc; li2025genmo)。其中绝大多数系统都以SMPL或SMPL-X作为目标表示;最近,诸如MultiHMR(multihmr)、Sam-3D-Body(yang2026sam3dbody)和DuoMo(wang2026duomo)等方法开始采用MHR和Anny,以更好地捕捉骨骼长度和年龄范围的多样性。然而,无论是估计还是生成,所有这些系统均经过训练以输出针对特定身体模型的参数,且每当目标表示发生变化时,都必须重新训练。SOMA 将身份模型的选择与估计流程解耦:在推理阶段,输出 SOMA 兼容关节参数的姿态估计器或生成模型无需重新训练即可驱动任何受支持的身份模型、SMPL、MHR、Anny 或其他模型,并可同时利用所有后端提供的身体形状标签进行监督学习。
三、方法
SOMA 是一个用于统一参数化实体建模的模块化框架。其核心运行时组件 SOMALayer 能够从任何受支持的身份后端接收形状参数和姿态参数,并生成以米为单位的带姿态网格顶点和关节位置。图 2 展示了完整的处理流程。
四、支持的身份模型
SOMA 目前支持五种不同的身份模型,每种模型都具备独特的功能:
- MHR:SOMA 的默认身份模型,可提供高保真的身体形状表示。
- Anny:特别适合建模儿童,将适用范围扩展至更年轻的受试者。
- SMPL-Family:同时支持 SMPL 和 SMPL-X 模型,可与该领域现有的标准实现互操作。
- SOMA-shape:作为本项目的一部分开发的专有PCA模型,旨在通过128个PCA系数提供类似SMPL的功能来表示身份。
- GarmentMeasurement:基于PCA的身份模型,在CAESARS数据集上进行训练,适用于涉及服装试穿和测量的特殊用例。
我们欢迎社区贡献,以扩展对更多身份模型的支持。
五、统一姿势校正(测试版)
得益于 SOMA 的统一框架,所有受支持的身份识别模型均可无缝使用基于姿势的校正变形,以缓解基于位置的(LBS)伪影,包括那些本身不提供校正功能的模型(例如 Anny 和 GarmentMeasurement)。

六、已支持 SOMA 的相关项目
SOMA 是旨在推动人类动画、机器人技术、物理人工智能及其他应用发展的更广泛计划的一部分。我们还提供以下支持 SOMA 的项目:
- GEM - 基于 SOMA 的视频姿态估计。
- Kimodo - 基于 SOMA 的可控人形(类人)文本到动作生成方法。
- BONES-SEED 数据集 - 采用 SOMA 格式的大规模人类(类人机器人)动作捕捉数据集。同时提供重定位后的 G1 数据。
- SOMA Retargeter - 用于 SOMA 到 G1 的重定位。
- ProtoMotion - 用于训练物理模拟数字人类(类人机器人)的仿真与学习框架
- GEAR SONIC - 类人机器人行为基础模型。(即将推出)
七、安装
7.1 从 PyPI 安装
pip install py-soma-x
可选配置:
pip install "py-soma-x[smpl]" # SMPL/SMPL-X support
pip install "py-soma-x[anny]" # Anny support
首次使用时,资源会自动从 HuggingFace 下载(缓存于 ~/.cache/huggingface/hub/)。
注意:SMPL/SMPL-X 需要 chumpy,必须单独安装:
pip install --no-build-isolation chumpy如果上述方法无效,请从源代码安装:
pip install --no-build-isolation git+https://github.com/mattloper/chumpy@580566eafc9ac68b2614b64d6f7aaa8SMPL/SMPL-X 模型文件(SMPL_NEUTRAL.pkl、SMPLX_NEUTRAL.npz)需要单独的许可证,且必须从 SMPL / SMPL-X 下载。请显式指定模型路径:
soma = SOMALayer( identity_model_type="smpl", identity_model_kwargs={"model_path": "/path/to/SMPL_NEUTRAL.pkl"}, )
7.2 用法
import torch
from soma import SOMALayer
# Initialize the layer — assets are auto-downloaded from HuggingFace
soma = SOMALayer(
identity_model_type="mhr", # or "soma" "smpl", "smplx", "anny", "garment"
device="cuda"
)
# Or use a local assets directory
# soma = SOMALayer(data_root="./assets", identity_model_type="mhr", device="cuda")
# Forward pass
# poses: (B, num_joints, 3)
# identity: (B, num_coeffs)
# scale_params: (B, num_scales) - Optional, depending on model type (required for MHR)
output = soma(poses, identity, scale_params=scale_params)
vertices = output["vertices"]
7.3 运行演示程序
安装演示环境(包括 pyrender、tqdm 以及用于视频输出的带 ffmpeg 的 imageio):
uv pip install ".[demo]"
如果你想运行所有身份识别模型(soma、mhr、anny、smpl、smplx、garment),请安装完整套件,并按照与测试相同的构建步骤操作:
uv pip install -e ".[all,demo]"
pip install --no-build-isolation chumpy
然后运行演示脚本:
# Run all models (default: soma, mhr, anny, smpl, smplx, garment)
python tools/demo_soma_vis.py --data-root ./assets --output-dir ./out
# Run specific models only
python tools/demo_soma_vis.py --data-root ./assets --output-dir ./out --identity-model-type soma, mhr, smplx
# Run a single model
python tools/demo_soma_vis.py --data-root ./assets --output-dir ./out --identity-model-type anny
# Run MHR with random shapes
python tools/demo_soma_vis.py --data-root ./assets --output-dir ./out --identity-model-type mhr --random-shape
这将在 out/ 目录中为所选模型生成示例动画视频。
演示选项:
- --identity-model-type:要使用的模型列表(以逗号分隔)(选项:soma, mhr, anny, smplx, smpl, garment;默认:soma,mhr,anny,smpl,smplx,garment)
- --random-shape:生成随机身体形状,而非使用中性形状
- --motion-file:自定义动作文件的路径(默认:assets/ROM5.npy)
- --image-size:渲染分辨率(默认:1920)
- --device:要使用的设备(默认:cuda:0)
八、将其他模型的姿态参数转换为 SOMA
我们提供了将 SMPL 和 MHR 姿态参数转换为 SOMA 的工具。这两个工具均使用 PoseInversion.fit(),该函数支持两种互补的求解器——两者均通过单次骨骼转换拟合进行初始化,以实现快速收敛:
- 解析法(默认):带牛顿-舒尔茨(Newton-Schulz)精化的迭代逆 LBS。速度极快(约1200 FPS),精度相当。
- Autograd FK:通过反向传播FK + LBS进行6D旋转优化。速度较慢但可控(例如对四肢施加额外权重)。
二者可结合使用:解析求解为Autograd精化提供预热——兼顾两者的优势。
8.1 SMPL 到 SOMA

# Convert SMPL animation to SOMA (renders comparison video)
python -m tools.smpl2soma
# Export SOMA poses as .npz
python -m tools.smpl2soma --output-npz out/smpl_soma.npz
# Tune analytical iterations (defaults: --body-iters 2 --full-iters 1)
python -m tools.smpl2soma --body-iters 3 --full-iters 1 --batch-size 64
# Analytical + autograd FK refinement (best accuracy)
python -m tools.smpl2soma --body-iters 2 --full-iters 1 --autograd-iters 10
基准测试(402帧 SMPL,RTX 5000 Ada):
| Method | Speed | Mean | Median | Max |
|---|---|---|---|---|
| Analytical (body=2, full=1) — default | 1279 FPS | 0.65 cm | 0.52 cm | 17.8 cm |
| Autograd FK (10 iters, lr=5e-3) | 199 FPS | 1.04 cm | 0.97 cm | 18.1 cm |
| Autograd FK (100 iters) | 18 FPS | 0.49 cm | 0.39 cm | 16.8 cm |
8.2 MHR to SOMA

适用于 SAM 3D Body 或类似的 MHR 格式数据。
# Convert a directory of SAM 3D Body parquet files
python -m tools.mhr2soma --input path/to/sam_3d_body/data/coco_train
# Convert and export as .npz
python -m tools.mhr2soma --input path/to/parquet_dir --output-npz out/mhr_soma.npz
# Tune analytical iterations (defaults: --body-iters 2 --full-iters 1)
python -m tools.mhr2soma --input path/to/parquet_dir --max-samples 100 --body-iters 3
# Analytical + autograd FK refinement (best accuracy)
python -m tools.mhr2soma --input path/to/parquet_dir --autograd-iters 10
基准测试(200 个 SAM 3D Body 样本,RTX 5000 Ada):
| Method | Speed | Mean | Median | Max |
|---|---|---|---|---|
| Analytical (body=2, full=1) — default | 342 FPS | 0.61 cm | 0.34 cm | 14.8 cm |
| Autograd FK (10 iters, lr=5e-3) | 161 FPS | 1.05 cm | 0.76 cm | 13.5 cm |
| Autograd FK (100 iters) | 16 FPS | 0.48 cm | 0.22 cm | 13.3 cm |
注:mhr2soma 工具的端到端吞吐量(约 50 帧/秒)主要取决于 MHR 身份模型的评估,而非 SOMA 反演。每个样本会调用两次 MHR TorchScript 模型(一次用于生成静止姿态,一次用于处理姿态顶点)。SOMA 反演本身的运行帧率为 342 FPS。
8.3 将 AMASS 数据集转换为 SOMA
将 AMASS 动作序列(SMPL 格式的 .npz 文件)转换为 SOMA。
先决条件:从 amass.is.tue.mpg.de 下载 AMASS 数据集,并将 SMPL_NEUTRAL.pkl 放置在 assets/SMPL/ 目录下(参见上文的 SMPL 安装说明)。
# Single file — converts and renders a comparison video
python -m tools.convert_amass_to_soma --input path/to/amass_sequence.npz
# Single file — export .npz only (skip rendering)
python -m tools.convert_amass_to_soma --input path/to/amass_sequence.npz --output-npz out/soma.npz --no-render
# Batch convert entire dataset (mirrors folder structure)
python -m tools.convert_amass_to_soma --input-dir /data/amass/ --output-dir out/amass_soma/
# Shuffle file order (useful when running multiple workers in parallel)
python -m tools.convert_amass_to_soma --input-dir /data/amass/ --output-dir out/amass_soma/ --shuffle
# Tune analytical iterations
python -m tools.convert_amass_to_soma --input path/to/seq.npz --body-iters 3 --full-iters 1
# Analytical + autograd FK refinement (best accuracy)
python -m tools.convert_amass_to_soma --input path/to/seq.npz --autograd-iters 10
生成的 .npz 文件包含:
- 姿势:(N, J, 3) 每个关节的旋转向量;
- 根点平移:(N, 3) 根点位置(单位:米);
- 关节名称:SOMA 关节名称列表;
- 顶点误差:(N, V) 每个顶点的重建误差;
- 单位矩阵系数 / 缩放参数:使用的单位矩阵参数;
基准测试 (A100):
| Method | Speed | Mean | Median | Max |
|---|---|---|---|---|
| Analytical (body=2, full=1) — default | 17393 FPS | 0.53 cm | 0.32 cm | 8.8 cm |
| Autograd FK (10 iters, lr=5e-3) | 435 FPS | 0.78 cm | 0.64 cm | 8.8 cm |
@article{soma2026,
title={SOMA: Unifying Parametric Human Body Models},
author={Jun Saito, Jiefeng Li, Michael de Ruyter, Miguel Guerrero, Edy Lim, Ehsan Hassani, Roger Blanco Ribera, Hyejin Moon, Magdalena Dadela, Marco Di Lucca, Qiao Wang, Xueting Li, Jan Kautz, Simon Yuen, Umar Iqbal},
eprint={2603.16858},
archivePrefix={arXiv},
year={2026},
url={https://arxiv.org/abs/2603.16858},
}
九、致谢
- SMPL-Body 用于创建 SMPL 与 SOMA 网格拓扑之间的插值器,由马克斯·普朗克智能系统研究所提供。
- MHR 用于学习姿态校正模型。
- Anny 用于基于 WARP 的稀疏线性混合蒙皮。
- GarmentMeasurement 用于扩充我们形状模型中的数据。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)