Pose2Mesh_RELEASE
Pose2Mesh 是一款基于 PyTorch 开发的开源算法,专注于从二维人体姿态精准重建三维人体姿态与网格模型。它主要解决了仅凭单张图片或二维关节点坐标难以还原真实、连贯的三维人体形状这一技术难题,能够输出包含详细几何信息的 SMPL 网格数据。
该工具的核心亮点在于引入了图卷积网络(GCN),将人体结构视为图数据进行建模,从而更有效地捕捉关节间的空间依赖关系,显著提升了重建的准确度与平滑度。项目不仅支持单人处理,还具备多人场景下的检测与重建能力,并提供了将生成的三维网格直接叠加渲染到原图上的演示功能。在 Human3.6M 和 3DPW 等权威基准测试中,Pose2Mesh 均取得了优异的性能表现。
Pose2Mesh 非常适合计算机视觉领域的研究人员、AI 开发者以及从事动作捕捉、虚拟数字人制作的专业人士使用。对于希望深入理解三维重建原理或需要在项目中集成高质量人体建模功能的用户来说,这是一个经过学术验证且文档完善的可靠选择。普通用户若具备一定的编程基础,也可通过其提供的预训练模型快速体验从平面姿态到立体模型的转换效果。
使用场景
某影视特效团队正在处理一段单目摄像头拍摄的演员试镜视频,需要快速生成可用于后期合成的 3D 人体模型数据。
没有 Pose2Mesh_RELEASE 时
- 流程繁琐断裂:团队需先运行独立的 2D 姿态检测算法,再手动编写脚本将关键点坐标转换为 3D 网格,中间环节极易出错且耗时。
- 形体细节缺失:传统方法仅能输出稀疏的骨骼关节点,无法还原演员真实的身体体积、肌肉轮廓及衣物褶皱,导致预览效果像“火柴人”。
- 多角色处理困难:当画面中出现多人互动时,现有管线难以自动区分个体并分别重建网格,往往需要人工逐帧干预。
- 动态抖动严重:直接从 2D 推演 3D 时缺乏时序平滑处理,生成的模型在视频中会出现明显的闪烁和肢体扭曲,无法直接用于动画绑定。
使用 Pose2Mesh_RELEASE 后
- 端到端自动化:利用 Pose2Mesh_RELEASE 的图卷积网络架构,输入 2D 关节坐标即可一键直接输出高质量的 3D SMPL 网格模型,大幅简化了技术管线。
- 高保真体型还原:工具不仅能恢复姿态,还能精准推断人体的三维形状参数,生成的网格紧密贴合演员真实体态,满足视觉预览需求。
- 原生支持多人场景:Pose2Mesh_RELEASE 内置多人体演示功能,可自动识别画面中的多个目标并分别渲染叠加网格,无需额外开发分割逻辑。
- 动作流畅自然:借助其集成的时间平滑代码(temporal smoothing),输出的连续帧网格运动稳定,有效消除了单帧预测带来的抖动噪声。
Pose2Mesh_RELEASE 通过将 2D 姿态到 3D 网格的复杂推理过程标准化与自动化,让中小团队也能以低成本实现电影级的动态人体捕捉效果。
运行环境要求
- Linux
需要 NVIDIA GPU (运行命令中包含 --gpu 参数),具体型号和显存未说明,需安装与驱动匹配的 PyTorch CUDA 版本
未说明

快速开始
Pose2Mesh:基于图卷积网络的从2D人体姿态恢复3D人体姿态与网格模型

最新动态
- 2021年4月27日更新:更新了PoseFix代码和AMASS数据加载器。在3DPW数据集上的PA-MPJPE和MPVPE指标有所降低!
- 2021年4月9日更新:更新了3DPW评估代码。新增了时间平滑代码和PA-MPVPE计算代码。这些代码目前被注释掉以加快评估速度,但你可以在
${ROOT}/data/PW3D/dataset.py文件中的evaluate函数里取消注释。 - 2021年4月9日更新:增加了多人场景的演示,并将渲染出的网格模型叠加到输入图像上。
- 2020年11月16日更新:使用DarkPose生成的2D人体姿态输出,在3DPW数据集上的精度有所提升。
简介
本仓库是Pose2Mesh:基于图卷积网络的从2D人体姿态恢复3D人体姿态与网格模型(ECCV 2020)的官方PyTorch实现。以下是Pose2Mesh的整体流程。

安装指南
- 我们建议使用Anaconda虚拟环境。根据你的GPU驱动和Python版本(>=3.7.2),安装PyTorch >= 1.2,并运行
sh requirements.sh。
快速演示
- 根据此处下载预训练的Pose2Mesh模型。
- 根据此处准备SMPL和MANO层。
- 准备一个姿态输入,例如
input.npy。input.npy应包含2D人体关节的坐标,其拓扑结构遵循此处定义的关节集合。关节顺序可在每个${ROOT}/data/*/dataset.py文件中找到。
单人场景演示
- 运行
python demo/run.py --gpu 0 --input_pose demo/h36m_joint_input.npy --joint_set human36。 - 你可以将
demo/h36m_joint_input.npy和human36替换为你自己的输入Numpy文件以及{human36,coco,smpl,mano}中的任一选项。 - 如果希望将渲染的网格模型叠加到输入图像上,可在命令中添加
--input_img {img_path}。 - 输出文件
demo_pose2d.png、demo_mesh.png和demo_mesh_.obj将保存在${ROOT}/demo/result/目录下。
多人场景演示
- 从这里下载演示输入文件,并将其放置在
${ROOT}/demo/目录下。 - 运行
python demo/run.py --gpu 0。 - 对来自CrowdPose数据集的一张示例图像的输出将保存在
${ROOT}/demo/result/目录下。 - 你可以更改输入图像以及
${ROOT}/demo/run.py文件第264至278行中的部分细节。
结果
以下报告了Pose2Mesh的性能表现。
:muscle: 更新: 我们利用从NeuralAnnot(https://arxiv.org/abs/2011.11232)获取的COCO和AMASS数据集上的GT网格模型,在3DPW数据集上的性能得到了提升。NeuralAnnot的标注数据尚未公开。 :muscle: 更新: 使用DarkPose的2D检测结果后,3DPW数据集上的性能进一步提升,这得益于HRNet(https://github.com/leoxiaobin/deep-high-resolution-net.pytorch)的改进。

下表展示了当输入为真实标注的2D人体姿态时的结果。 对于Human3.6M基准测试,Pose2Mesh是在Human3.6M数据集上进行训练的。 对于3DPW基准测试,Pose2Mesh则是在Human3.6M和COCO数据集上进行训练的。
| MPJPE | PA-MPJPE | |
|---|---|---|
| Human36M | 51.28 mm | 35.61 mm |
| 3DPW | 63.10 mm | 35.37 mm |
我们还在SURREAL数据集上提供了定性结果,以展示Pose2Mesh能够在一定程度上恢复3D形状。 更多讨论请参阅论文。

目录结构
根目录
${ROOT}的目录结构如下所示:
${ROOT}
|-- data
|-- demo
|-- lib
|-- experiment
|-- main
|-- manopth
|-- smplpytorch
data目录包含数据加载代码以及指向图像和标注目录的软链接。demo目录包含演示代码。lib目录包含Pose2Mesh的核心代码。main目录包含用于训练或测试网络的高层代码。experiment目录存储系统的输出,包括训练日志、训练好的模型权重以及可视化结果。
数据
data 目录的结构应遵循以下层次:
${ROOT}
|-- data
| |-- Human36M
| | |-- images
| | |-- annotations
| | |-- J_regressor_h36m_correct.npy
| | |-- absnet_output_on_testset.json
| |-- MuCo
| | |-- data
| | | |-- augmented_set
| | | |-- unaugmented_set
| | | |-- MuCo-3DHP.json
| | | |-- smpl_param.json
| |-- COCO
| | |-- images
| | | |-- train2017
| | | |-- val2017
| | |-- annotations
| | |-- J_regressor_coco.npy
| | |-- hrnet_output_on_valset.json
| |-- PW3D
| | |-- data
| | | |-- 3DPW_latest_train.json
| | | |-- 3DPW_latest_validation.json
| | | |-- darkpose_3dpw_testset_output.json
| | | |-- darkpose_3dpw_validationset_output.json
| | |-- imageFiles
| |-- AMASS
| | |-- data
| | | |-- cmu
| |-- SURREAL
| | |-- data
| | | |-- train.json
| | | |-- val.json
| | | |-- hrnet_output_on_testset.json
| | | |-- simple_output_on_testset.json
| | |-- images
| | | |-- train
| | | |-- test
| | | |-- val
| |-- FreiHAND
| | |-- data
| | | |-- training
| | | |-- evaluation
| | | |-- freihand_train_coco.json
| | | |-- freihand_train_data.json
| | | |-- freihand_eval_coco.json
| | | |-- freihand_eval_data.json
| | | |-- hrnet_output_on_testset.json
| | | |-- simple_output_on_testset.json
- 下载 Human3.6M 解析数据和 SMPL 参数 [数据][SMPL 参数来自 SMPLify-X]
- 下载 MuCo 解析/合成数据和 SMPL 参数 [数据][SMPL 参数来自 SMPLify-X]
- 下载 COCO 的 SMPL 参数 [SMPL 参数来自 SMPLify]
- 下载 AMASS 的 SMPL 参数 [官方网站]
- 下载 SURREAL 的解析数据 [数据]
- 下载 3DPW 的解析数据 [数据]
- 下载 FreiHAND 的解析数据 [数据](
freihand_eval_coco.json中的bbox来自 Detectron2) - 所有标注文件均遵循 MS COCO 格式。
- 如果您想添加自己的数据集,必须将其转换为 MS COCO 格式。
- 图像需要下载,但如果需要,也可以从其官方网站下载。
- 2D 姿势检测输出可在此下载:Human36M、COCO、3DPW、SURREAL、FreiHAND
如果您在尝试从 Google Drive 链接下载数据集时遇到“下载限制”问题,请尝试以下方法:
- 进入包含您想要复制到自己驱动器的文件的共享文件夹
- 选择所有您想要复制的文件
- 在右上角点击三个竖直点,然后选择“制作副本”
- 此后,文件将被复制到您的个人 Google Drive 账户。您可以从个人账户下载它。
Pytorch SMPL 和 MANO 层
- 对于 SMPL 层,我使用了 smplpytorch。该仓库已包含在
${ROOT}/smplpytorch中。 - 从 这里(女性和男性)以及 这里(中性)下载
basicModel_f_lbs_10_207_0_v1.0.0.pkl、basicModel_m_lbs_10_207_0_v1.0.0.pkl和basicModel_neutral_lbs_10_207_0_v1.0.0.pkl,并将其放置在${ROOT}/smplpytorch/smplpytorch/native/models中。 对于 MANO 层,我使用了 manopth。该仓库已包含在${ROOT}/manopth中。 从 这里 下载MANO_RIGHT.pkl,并将其放置在${ROOT}/manopth/mano/models中。
实验
experiment 目录将按如下方式创建:
${ROOT}
|-- experiment
| |-- exp_*
| | |-- checkpoint
| | |-- graph
| | |-- vis
experiment包含 Pose2Mesh 在各种基准数据集上的训练/测试结果。 我们建议您将该文件夹创建为指向具有大存储容量目录的软链接。exp_*是为每个训练/测试命令创建的。 通配符表示实验训练/测试开始的时间。 默认时区为 UTC+9,但您可以设置为您当地的时区。checkpoint包含每个 epoch 的模型检查点。graph包含误差和损失的可视化训练日志。vis包含网格的*.obj文件以及带有 2D 人体姿态或人体网格的图像。
预训练模型权重
从 这里 下载预训练模型权重,并将其放置在相应的目录中。
${ROOT}
|-- experiment
| |-- posenet_human36J_train_human36
| |-- posenet_cocoJ_train_human36_coco_muco
| |-- posenet_smplJ_train_surreal
| |-- posenet_manoJ_train_freihand
| |-- pose2mesh_human36J_train_human36
| |-- pose2mesh_cocoJ_train_human36_coco_muco
| |-- pose2mesh_smplJ_train_surreal
| |-- pose2mesh_manoJ_train_freihand
| |-- posenet_human36J_gt_train_human36
| |-- posenet_cocoJ_gt_train_human36_coco
| |-- pose2mesh_human36J_gt_train_human36
| |-- pose2mesh_cocoJ_gt_train_human36_coco
运行 Pose2Mesh

开始
- Pose2Mesh 分别为 Human3.6M、3DPW、SURREAL 和 FreiHAND 基准使用了与 Human3.6M、COCO、SMPL 和 MANO 不同的关节点集。对于 COCO 关节点集,我们通过计算 'L_Hip' 和 'R_Hip' 的中点以及 'L_Shoulder' 和 'R_Shoulder' 的中点,手动添加了 'Pelvis' 和 'Neck' 关节。
- 在
lib/core/config.py中,您可以更改系统的各项设置,包括要使用的训练/测试数据集、预定义的关节点集、预训练的 PoseNet 模型、学习率调度策略、是否使用真值标注等。 - 请注意,
DATASET.{train/test}_list中的第一个数据集应调用build_coarse_graphs函数以进行图卷积设置。请参考${ROOT}/data/Human36M/dataset.py文件中__init__函数的最后一行。
训练
在 ${ROOT}/asset/yaml/ 目录下选择配置文件并开始训练。您也可以通过自定义的 *.yml 文件来更改训练数据集和预训练的 PoseNet 模型。
1. 预训练 PoseNet
如果从零开始训练,您需要先预训练 PoseNet。
运行以下命令:
python main/train.py --gpu 0,1,2,3 --cfg ./asset/yaml/posenet_{输入关节点集}_train_{数据集列表}.yml
2. 训练 Pose2Mesh
将 ${ROOT}/experiment/exp_*/checkpoint/ 目录下的 best.pth.tar 文件复制到 ${ROOT}/experiment/posenet_{输入关节点集}_train_{数据集列表}/ 目录下。或者按照 此处 的说明下载预训练权重。
运行以下命令:
python main/train.py --gpu 0,1,2,3 --cfg ./asset/yaml/pose2mesh_{输入关节点集}_train_{数据集列表}.yml
测试
在 ${ROOT}/asset/yaml/ 目录下选择配置文件并进行测试。您可以更改预训练模型的权重。若要将采样输出保存为 obj 文件,请在配置文件中将 TEST.vis 的值改为 True。
运行以下命令:
python main/test.py --gpu 0,1,2,3 --cfg ./asset/yaml/{模型名称}_{输入关节点集}_test_{数据集名称}.yml
参考文献
@InProceedings{Choi_2020_ECCV_Pose2Mesh,
author = {Choi, Hongsuk and Moon, Gyeongsik and Lee, Kyoung Mu},
title = {Pose2Mesh: Graph Convolutional Network for 3D Human Pose and Mesh Recovery from a 2D Human Pose},
booktitle = {欧洲计算机视觉大会 (ECCV)},
year = {2020}
}
相关项目
I2L-MeshNet_RELEASE
3DCrowdNet_RELEASE
TCMR_RELEASE
Hand4Whole_RELEASE
HandOccNet
NeuralAnnot_RELEASE
常见问题
相似工具推荐
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
ML-For-Beginners
ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。
ragflow
RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。
PaddleOCR
PaddleOCR 是一款基于百度飞桨框架开发的高性能开源光学字符识别工具包。它的核心能力是将图片、PDF 等文档中的文字提取出来,转换成计算机可读取的结构化数据,让机器真正“看懂”图文内容。 面对海量纸质或电子文档,PaddleOCR 解决了人工录入效率低、数字化成本高的问题。尤其在人工智能领域,它扮演着连接图像与大型语言模型(LLM)的桥梁角色,能将视觉信息直接转化为文本输入,助力智能问答、文档分析等应用场景落地。 PaddleOCR 适合开发者、算法研究人员以及有文档自动化需求的普通用户。其技术优势十分明显:不仅支持全球 100 多种语言的识别,还能在 Windows、Linux、macOS 等多个系统上运行,并灵活适配 CPU、GPU、NPU 等各类硬件。作为一个轻量级且社区活跃的开源项目,PaddleOCR 既能满足快速集成的需求,也能支撑前沿的视觉语言研究,是处理文字识别任务的理想选择。
tesseract
Tesseract 是一款历史悠久且备受推崇的开源光学字符识别(OCR)引擎,最初由惠普实验室开发,后由 Google 维护,目前由全球社区共同贡献。它的核心功能是将图片中的文字转化为可编辑、可搜索的文本数据,有效解决了从扫描件、照片或 PDF 文档中提取文字信息的难题,是数字化归档和信息自动化的重要基础工具。 在技术层面,Tesseract 展现了强大的适应能力。从版本 4 开始,它引入了基于长短期记忆网络(LSTM)的神经网络 OCR 引擎,显著提升了行识别的准确率;同时,为了兼顾旧有需求,它依然支持传统的字符模式识别引擎。Tesseract 原生支持 UTF-8 编码,开箱即用即可识别超过 100 种语言,并兼容 PNG、JPEG、TIFF 等多种常见图像格式。输出方面,它灵活支持纯文本、hOCR、PDF、TSV 等多种格式,方便后续数据处理。 Tesseract 主要面向开发者、研究人员以及需要构建文档处理流程的企业用户。由于它本身是一个命令行工具和库(libtesseract),不包含图形用户界面(GUI),因此最适合具备一定编程能力的技术人员集成到自动化脚本或应用程序中