learnable-triangulation-pytorch
learnable-triangulation-pytorch 是一个基于 PyTorch 的开源项目,旨在解决多视角下的 3D 人体姿态估计难题。它复现了 ICCV 2019 口头报告论文《Learnable Triangulation of Human Pose》中的核心算法,通过在多个摄像头视图间进行智能三角测量,将 2D 关键点检测提升至高精度的 3D 空间坐标重建。
该工具主要攻克了传统几何三角测量方法在噪声干扰下精度不足的痛点。其独特技术亮点在于提出了两种创新的“可学习三角测量”方法:代数法(Algebraic)和体积法(Volumetric)。这两种方法能够将三角测量过程融入神经网络进行端到端训练,从而在 Human3.6M 等基准数据集上取得了超越以往最先进水平的效果。
该项目非常适合计算机视觉领域的研究人员、算法工程师以及高校开发者使用。对于希望深入探索多视角几何深度学习、复现顶会论文成果或构建高精度动作捕捉系统的团队来说,这是一个极具价值的参考实现。项目依赖简单,提供了完整的预训练模型、配置文件及数据预处理指南,支持用户快速上手实验与二次开发。虽然目前主要支持 Human3.6M 数据集,但其架构设计为后续扩展其他多视角场景奠定了坚实基础。
使用场景
某智能体育分析团队正在开发一套基于多机位视频的职业运动员动作捕捉系统,旨在从多个摄像机视角重建高精度的 3D 人体骨骼数据以辅助训练。
没有 learnable-triangulation-pytorch 时
- 重建精度受限:传统几何三角测量法对相机标定误差极其敏感,导致生成的 3D 关节点在快速运动中出现明显抖动或漂移。
- 遮挡处理乏力:当运动员身体部分被遮挡时,旧算法难以利用多视图间的上下文信息进行合理推断,常造成骨骼断裂或关键点丢失。
- 调优成本高昂:为了提升效果,工程师需手动设计复杂的滤波规则和启发式权重,耗费大量时间却难以突破精度瓶颈。
- 无法达到业界标杆:在 Human3.6M 等标准数据集上的测试结果显示,现有方案误差较大,无法满足专业级生物力学分析的需求。
使用 learnable-triangulation-pytorch 后
- 精度显著提升:利用其提出的“代数”与“体积”可学习三角测量方法,自动优化多视图融合权重,将平均关节位置误差(MPJPE)降至行业领先水平。
- 鲁棒性大幅增强:模型能端到端地学习如何处理遮挡和噪声,即使在部分摄像头视野受阻时,也能输出平滑、连贯的 3D 动作序列。
- 开发流程简化:直接加载预训练的 ResNet 骨干网络权重即可在 Human3.6M 数据集上复现 SOTA 结果,无需手动编写繁琐的后处理逻辑。
- 学术成果落地:轻松复用 ICCV 2019 口头报告论文中的先进架构,让团队迅速具备国际一流的 3D 姿态估计能力。
learnable-triangulation-pytorch 通过将传统的几何三角测量转化为可学习的神经网络模块,彻底解决了多视角 3D 人体姿态估计中精度与鲁棒性难以兼得的核心难题。
运行环境要求
- 未说明
训练和评估支持单卡或多卡(Multi-GPU),具体型号和显存大小未说明,需支持 PyTorch DistributedDataParallel
未说明

快速开始
可学习的人体姿态三角测量
本仓库是论文《可学习的人体姿态三角测量》(ICCV 2019,口头报告)的官方 PyTorch 实现。我们在此解决从多摄像头进行三维人体姿态估计的问题。我们提出了两种新颖的方法——代数式和体积式可学习三角测量——它们优于现有的最先进方法。
如果您发现任何错误、有疑问或知道如何改进代码,请随时提交 issue!
:arrow_forward: ICCV 2019 演讲
使用方法
该项目没有任何特殊或难以安装的依赖。只需运行以下命令即可完成所有安装:
pip install -r requirements.txt
数据
抱歉,目前仅支持 Human3.6M 数据集的训练和评估。我们暂时无法添加 CMU Panoptic 数据集,敬请谅解。
Human3.6M
- 按照 mvn/datasets/human36m_preprocessing/README.md 中的说明下载并预处理数据集。
- 从 这里 下载预训练主干网络的权重,并将其放置到
./data/pretrained/human36m/pose_resnet_4.5_pixels_human36m.pth(在 COCO 数据集上训练并在 MPII 和 Human3.6M 上联合微调的 ResNet-152)。 - 如果您想训练体积模型,需要为训练集和验证集提供骨盆的粗略三维位置估计。在论文中,我们使用代数模型来估计这些位置。您可以使用 预训练的 代数模型生成预测结果,或者直接使用 预先计算好的三维骨架。
模型库
本节收集了预训练模型和配置文件。所有 预训练权重 和 预先计算的三维骨架 都可以一次性从 这里 下载,并放置到 ./data/pretrained 目录下,这样评估配置就可以开箱即用,无需额外设置路径。当然,您也可以通过下方表格中的单独链接获取这些文件。
Human3.6M:
| 模型 | 训练配置 | 评估配置 | 权重 | 预先计算的结果 | MPJPE(相对于骨盆),mm |
|---|---|---|---|---|---|
| 代数式 | train/human36m_alg.yaml | eval/human36m_alg.yaml | 链接 | 训练, 验证 | 22.5 |
| 体积式(softmax) | train/human36m_vol_softmax.yaml | eval/human36m_vol_softmax.yaml | 链接 | — | 20.4 |
训练
每个实验都由 .config 文件定义。论文中实验的配置文件位于 ./experiments 目录下(参见 模型库)。
单 GPU
要使用 1 个 GPU 训练带有 softmax 聚合的体积模型,请运行:
python3 train.py \
--config experiments/human36m/train/human36m_vol_softmax.yaml \
--logdir ./logs
训练将按照 --config 指定的配置文件开始,日志(包括 TensorBoard 文件)将存储在 --logdir 目录中。
多 GPU(测试中)
多 GPU 训练是通过 PyTorch 的 DistributedDataParallel 实现的。它既可用于单机训练,也可用于多机(集群)训练。要启动这些进程,请使用 PyTorch 的 launch 工具。
要在 单机上使用 2 个 GPU 训练带有 softmax 聚合的体积模型,请运行:
python3 -m torch.distributed.launch --nproc_per_node=2 --master_port=2345 \
train.py \
--config experiments/human36m/train/human36m_vol_softmax.yaml \
--logdir ./logs
TensorBoard
要查看实验进度,请运行 TensorBoard:
tensorboard --logdir ./logs
评估
训练完成后,您可以对模型进行评估。在相同的配置文件中,添加已学习权重的路径(这些权重会在训练过程中保存到 logs 目录):
model:
init_weights: true
checkpoint: {PATH_TO_WEIGHTS}
此外,您还可以调整其他配置参数,例如 retain_every_n_frames_test。
运行:
python3 train.py \
--eval --eval_dataset val \
--config experiments/human36m/eval/human36m_vol_softmax.yaml \
--logdir ./logs
--eval_dataset 参数可以设置为 val 或 train。评估结果可以在 logs 目录或 TensorBoard 中查看。
结果
Human3.6M
- 我们显著超越了之前的最先进水平(误差以骨盆为参考,未进行对齐)。
- 我们的最佳模型在绝对坐标下的误差达到了 17.7 mm,这是此前无法达到的。
- 我们的体积模型能够使用 任意数量的摄像头 来估计 3D 人体姿态,甚至仅使用 1 台摄像头 也能实现。在单视角设置下,我们的结果与当前最先进的方法 [6] 相当(49.9 mm vs. 49.6 mm)。
以骨盆为参考的 MPJPE:
| | MPJPE(所有动作平均),mm | |----------------------------- |:--------: | | 多视角 Martinez [4] | 57.0 | | Pavlakos 等人 [8] | 56.9 | | Tome 等人 [4] | 52.8 | | Kadkhodamohammadi & Padoy [5] | 49.1 | | Qiu 等人 [9] | 26.2 | | RANSAC(我们的实现) | 27.4 | | 我们,代数法 | 22.4 | | 我们,体积法 | 20.5 |
绝对坐标下的 MPJPE(排除了地面真值标注无效的场景):
| | MPJPE(所有动作平均),mm | |----------------------------- |:--------: | | RANSAC(我们的实现) | 22.8 | | 我们,代数法 | 19.2 | | 我们,体积法 | 17.7 |
以骨盆为参考的 MPJPE(单视角方法):
| | MPJPE(所有动作平均),mm | |----------------------------- |:-----------------------------------: | | Martinez 等人 [7] | 62.9 | | Sun 等人 [6] | 49.6 | | 我们,体积法单视角 | 49.9 |
CMU Panoptic
- 我们的最佳模型在 4 台摄像机的情况下,绝对坐标的误差达到了 13.7 mm。
- 与数据集原版标注相比,我们成功获得了更加平滑和精确的 3D 姿态标注(详见 视频演示)。
以骨盆为参考的 MPJPE [4 台摄像机]:
| | MPJPE,mm | |----------------------------- |:--------: | | RANSAC(我们的实现) | 39.5 | | 我们,代数法 | 21.3 | | 我们,体积法 | 13.7 |
方法概述
我们提出了两种新颖的可学习三角测量方法:代数法和体积法。
代数法
我们的第一种方法基于代数三角测量。它与先前的方法类似,但在两个关键方面有所不同:
- 它是 完全可微分的。为此,我们使用软最大聚合,并通过可微分的奇异值分解来三角测量关键点。
- 神经网络还会额外预测 每个关节的标量置信度,并将其传递给三角测量模块,从而有效处理异常值和被遮挡的关节。
对于最流行的 Human3.6M 数据集,这种方法已经将误差大幅降低了 2.2 倍(!),相比之前的技术有了显著提升。
体积法
在体积三角测量模型中,中间的 2D 特征图会被密集地反投影到体积立方体中,然后由 3D 卷积神经网络进行处理。反投影操作允许 来自多个视角的密集聚合,而 3D 卷积神经网络则能够建模 隐式的 3D 人体姿态先验。
体积三角测量进一步提升了精度,将之前的最先进误差大幅降低了 2.4 倍! 即使与 MSRA 团队同期开发的最佳方法 [6] 相比,我们的方法仍然提供了显著更低的误差,仅为 21 mm。
引用我们!
@inproceedings{iskakov2019learnable,
title={Learnable Triangulation of Human Pose},
author={Iskakov, Karim and Burkov, Egor and Lempitsky, Victor and Malkov, Yury},
booktitle = {International Conference on Computer Vision (ICCV)},
year={2019}
}
贡献者
新闻
参考文献
- [1] R. Hartley 和 A. Zisserman. 计算机视觉中的多视图几何。
- [2] C. Ionescu、D. Papava、V. Olaru 和 C. Sminchisescu. Human3.6m:用于自然环境中 3D 人体感知的大规模数据集及预测方法。
- [3] H. Joo、T. Simon、X. Li、H. Liu、L. Tan、L. Gui、S. Banerjee、T. S. Godisart、B. Nabbe、I. Matthews、T. Kanade、S. Nobuhara 和 Y. Sheikh. Panoptic 工作室:用于社交互动捕捉的超大规模多视角系统。
- [4] D. Tome、M. Toso、L. Agapito 和 C. Russell. 重新思考 3D 姿态:无标记运动捕捉的多阶段细化与恢复。
- [5] A. Kadkhodamohammadi 和 N. Padoy. 一种可推广的多视角 3D 人体姿态回归方法。
- [6] X. Sun、B. Xiao、S. Liang 和 Y. Wei. 整体人体姿态回归。
- [7] J. Martinez、R. Hossain、J. Romero 和 J. J. Little. 一种简单而有效的 3D 人体姿态估计基线。
- [8] G. Pavlakos、X. Zhou、K. G. Derpanis 和 K. Daniilidis. 利用多视角获取无标记 3D 人体姿态标注。
- [9] H. Qiu、C. Wang、J. Wang、N. Wang 和 W. Zeng. (2019)。跨视角融合用于 3D 人体姿态估计,GitHub
版本历史
v1.12019/10/18v1.02019/10/08常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
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 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
gemini-cli
gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。
LLMs-from-scratch
LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目,旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型(LLM)。它不仅是同名技术著作的官方代码库,更提供了一套完整的实践方案,涵盖模型开发、预训练及微调的全过程。 该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型,却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码,用户能够透彻掌握 Transformer 架构、注意力机制等关键原理,从而真正理解大模型是如何“思考”的。此外,项目还包含了加载大型预训练权重进行微调的代码,帮助用户将理论知识延伸至实际应用。 LLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API,而是渴望探究模型构建细节的技术人员而言,这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计:将复杂的系统工程拆解为清晰的步骤,配合详细的图表与示例,让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础,还是为未来研发更大规模的模型做准备
Deep-Live-Cam
Deep-Live-Cam 是一款专注于实时换脸与视频生成的开源工具,用户仅需一张静态照片,即可通过“一键操作”实现摄像头画面的即时变脸或制作深度伪造视频。它有效解决了传统换脸技术流程繁琐、对硬件配置要求极高以及难以实时预览的痛点,让高质量的数字内容创作变得触手可及。 这款工具不仅适合开发者和技术研究人员探索算法边界,更因其极简的操作逻辑(仅需三步:选脸、选摄像头、启动),广泛适用于普通用户、内容创作者、设计师及直播主播。无论是为了动画角色定制、服装展示模特替换,还是制作趣味短视频和直播互动,Deep-Live-Cam 都能提供流畅的支持。 其核心技术亮点在于强大的实时处理能力,支持口型遮罩(Mouth Mask)以保留使用者原始的嘴部动作,确保表情自然精准;同时具备“人脸映射”功能,可同时对画面中的多个主体应用不同面孔。此外,项目内置了严格的内容安全过滤机制,自动拦截涉及裸露、暴力等不当素材,并倡导用户在获得授权及明确标注的前提下合规使用,体现了技术发展与伦理责任的平衡。