ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

VideoPose3D环境搭建完全指南:从PyTorch安装到2D关键点检测对接

2026/10/5 10:06:03 拓冰建站 浏览量
VideoPose3D环境搭建完全指南:从PyTorch安装到2D关键点检测对接 做 3D 姿态估计的人应该都听过 VideoPose3D。这个 Facebook Research 开源的项目核心思路是把 2D 关键点序列“提升”到 3D 空间用时间卷积网络替代复杂的图结构既保留了准确率又让工程落地变得相对友好。我第一次接触它的时候以为环境搭建跟普通 PyTorch 项目差不多结果真上手发现PyTorch 版本、CUDA 版本、模型权重下载、2D 检测器对接每一步都可能让新手卡住。尤其是如果你只是想先跑通一个 Demo很容易在环境问题上耗掉一整天。这篇文章我想把自己搭 VideoPose3D 环境的全过程拆开讲清楚。不是照着 README 念一遍而是从虚拟环境开始到 PyTorch 安装、项目依赖、预训练模型下载、推理命令执行再到常见报错排查全部用我实际踩过的坑来串。适合刚接触这个项目、想在本地或服务器上复现 3D 姿态估计效果的同学也适合准备基于它做二次开发的人参考。1. VideoPose3D 是什么环境搭建前需要想清楚的三件事1.1 这个项目不是“视频直接出 3D”的傻瓜模型很多人一开始会误以为 VideoPose3D 是输入一段视频直接吐出一段 3D 骨骼动画。实际不是这样。它的主链路是先用一个 2D 关键点检测器比如 Detectron2、OpenPose 或者 HRNet从视频帧里提取每个人的 2D 关键点坐标然后把连续帧的关键点序列作为输入用时间卷积网络去回归 3D 姿态序列。这个设计带来的直接影响是项目本身并不包含 2D 检测器所以完整的环境搭建必须包含“2D 关键点检测环境”和“VideoPose3D 推理环境”两部分。你能不能用它跑自己的视频一半取决于 VideoPose3D 装得好不好另一半取决于你能不能把 2D 关键点送进模型。这个认知理清楚之后再去搭环境就不会觉得“怎么这么多依赖”了。1.2 环境搭建的核心思路围绕 PyTorch 和 2D 关键点展开VideoPose3D 的官方实现基于 PyTorch所以环境搭建的主线非常清晰装 Python、装虚拟环境、装 PyTorch、装 numpy 和 matplotlib。但难点在于版本匹配。PyTorch 要和 CUDA 匹配CUDA 要和显卡驱动匹配显卡驱动又要和操作系统匹配。这个链条里任何一环对不上都能让你在import torch或者跑训练时看到各种奇奇怪怪的报错。另外因为项目依赖 2D 关键点数据如果你要用自己的视频做端到端推理就得再装一个 2D 关键点检测器。最常见的是 Detectron2它本身又是一个独立的 PyTorch 项目安装时经常跟 VideoPose3D 的依赖“打架”。所以我的建议是先把 VideoPose3D 本身跑通用官方提供的 2D 关键点数据文件做验证成功之后再考虑接 Detectron2 或者其他检测器。1.3 我用的推荐方案系统 Python CUDA我前后在 Ubuntu 20.04 和 Windows WSL2 上都搭成功过整体感受是Linux 环境更省心尤其是编译和 CUDA 支持更顺畅。如果你只是想在本地试一下WSL2 也完全可以但要注意 Windows 原生环境容易在torchvision和detectron2的编译环节翻车。Python 版本我推荐 3.8 或者 3.9。VideoPose3D 本身对 Python 版本不算挑剔但 Detectron2 对 Python 和 PyTorch 版本有明确限制选择 3.8 可以兼顾两边。PyTorch 我建议装 1.12 或 1.13 这个区间因为官方模型权重是在较老的 PyTorch API 下训练的太新的版本比如 2.x也能跑但偶尔会遇到torch.load的 key 映射小坑不值得为了体验新特性去折腾。CUDA 用 11.3 到 11.7 都可以关键是跟 PyTorch 的编译版本对应上。提示如果你机器上已经装了别的大项目尽量不要在同一个 Python 环境里硬塞 VideoPose3D。单独建一个 conda 环境后面能省掉大量“这个库版本冲突”的烦心事。2. 基础环境搭建虚拟环境、PyTorch、系统依赖2.1 先用 conda 还是 venv我更推荐 conda尤其是要接 Detectron2 时Python 虚拟环境无非 conda 和 venv 两个主流选择。单独跑 VideoPose3D 的话venv 就够了但只要你想后续接 2D 检测器强烈建议直接用 conda。原因是 Detectron2 的安装依赖一些 C 编译库和特定版本的fvcoreconda 管理这些依赖比 pip 干净得多。创建环境的命令很简单conda create -n videopose python3.8 -y conda activate videopose进入环境后顺手把 pip 升级一下避免后面安装时出现旧版本 pip 的依赖解析问题pip install --upgrade pip如果你是 Ubuntu 系统建议顺手把编译工具链装上后面安装 Detectron2 或其他需要编译的包时会用到sudo apt update sudo apt install build-essential2.2 安装 PyTorch版本匹配是重中之重PyTorch 的安装是整个环境搭建里最容易被卡住的一步。我见过太多人直接pip install torch装了一个带 CPU 的版本结果后面跑模型发现慢得离谱也有人显卡驱动跟不上却强行装了一个要 CUDA 12 的 PyTorch结果启动直接报driver version is too old。正确做法是先去官网的 PyTorch Get Started 页面选择你对应的系统、安装方式和 CUDA 版本拿到对应的安装命令。举个例子如果你用的是 CUDA 11.6conda 安装命令类似这样conda install pytorch1.12.1 torchvision0.13.1 torchaudio0.12.1 cudatoolkit11.6 -c pytorch -c conda-forge装完之后一定要验证 PyTorch 能否识别 GPUpython -c import torch; print(torch.__version__); print(torch.cuda.is_available()); print(torch.cuda.get_device_name(0))如果torch.cuda.is_available()输出True说明 PyTorch 和 CUDA 基本没问题了。如果输出False先别急着重装用nvidia-smi看下驱动支持的 CUDA 版本再回头看 PyTorch 是不是装了 CPU 版本。2.3 项目依赖和系统级工具ffmpeg、libgl 等VideoPose3D 的官方仓库没有特别统一的requirements.txt但核心依赖很清楚numpy、matplotlib、torch、torchvision以及用于读取视频的opencv-python和用于处理视频文件的ffmpeg。我的安装顺序是这样的pip install numpy matplotlib opencv-python sudo apt install ffmpeg为什么强调ffmpeg因为如果你最终要跑视频推理VideoPose3D 的推理脚本底层依赖 OpenCV 的VideoCapture读取视频帧而 OpenCV 读取很多视频格式时需要一个正常的 ffmpeg 后端。Ubuntu 上如果不装系统级的 ffmpeg你可能会遇到Unable to get frame from camera或者视频读取出来全是黑帧的诡异问题。另外如果你在服务器上装的是精简版系统可能还需要补一下 OpenGL 相关的库因为 matplotlib 和 OpenCV 在渲染窗口时会依赖它们sudo apt install libgl1-mesa-glx libglib2.0-0这一行看起来无关紧要实际能救很多人。3. 拉取仓库、下载预训练模型、整理数据目录3.1 clone 仓库后先把目录结构看清基础环境装好之后就可以拉项目代码了git clone https://github.com/facebookresearch/VideoPose3D.git cd VideoPose3D第一次 clone 下来别急者跑命令先看一眼目录结构。里面有几个关键目录common放模型定义和训练工具data放 2D 关键点检测结果和 3D 标签inference放推理脚本checkpoint一般是自己创建用来放预训练权重。理解了这几个目录的关系后面出问题才知道去哪里找原因。官方仓库里通常不会把checkpoint目录直接放好需要自己创建mkdir checkpoint3.2 预训练模型下载与放置位置VideoPose3D 的预训练模型是以压缩包形式分发的不同数据集和不同设置对应不同权重文件。常见的是在 Human3.6M 数据集上预训练的模型它接受 2D 关键点序列输出 3D 关键点序列。下载地址一般写在仓库 README 或者配置文件的注释里。我实际用的方式是这样的先从官方提供的链接把模型包下载到本地然后解压到checkpoint目录下。解压后目录里会有一个.tar或.pt文件后续推理时用--checkpoint output/checkpoint/model_name这样的参数指定。这里有个特别容易踩的坑很多人下载模型后不确定该放在哪个路径导致推理时反复提示找不到文件。解决办法很简单在inference相关脚本里搜一下checkpoint默认前缀或者看配置文件里写的是哪条路径按那个路径放。一般来说相对路径都是基于项目根目录的。3.3 2D 关键点数据从哪里来官方 demo 为了方便用户会提供一组在 Human3.6M 数据集上预先提取好的 2D 关键点文件。如果你只是想验证环境是否通直接用这些 2D 关键点数据是最稳的完全不需要自己准备 2D 检测器。但如果你想用自己拍摄的视频就必须先跑一遍 2D 关键点检测把结果保存成项目约定的 JSON 格式。这个 JSON 里通常包含每个视频帧的多人关键点坐标、置信度以及骨骼连接顺序等信息。VideoPose3D 的推理脚本会读取这个 JSON把 2D 关键点序列转成模型需要的输入张量。这一步是数据链路的“咽喉”。我见过不少朋友把环境搭好、模型也下载好了最后却卡在自定义视频的 2D 关键点格式上。我的建议是第一次不要碰自定义视频先用官方给的 2D 关键点数据跑通全流程后面再去折腾检测器。4. 实操演示从 2D 关键点推理出 3D 姿态4.1 准备输入我建议先用官方 demo 数据试当环境、模型、数据都齐了就可以跑推理了。官方仓库里通常会有推理脚本比如inference/infer_video.py它会读取一段视频对应的 2D 关键点 JSON调用训练好的模型输出一段可视化后的 3D 姿态视频和相关的npz文件。我建议第一次跑的时候严格按官方 README 里的 demo 命令来不要自己改参数。原因很简单官方 demo 的参数组合是验证过的如果你改动了某个参数比如--architecture或者--fine-tune很可能因为配置不匹配导致模型加载失败这时候你根本分不清到底是环境问题还是参数问题。一个常见的形式是python inference/infer_video.py \ --cfg configs/human3.6m/mvn/pretrained_h36m_demo.yaml \ --videoFile /path/to/demo.mp4 \ --pose2dJson /path/to/detected_2d_poses.json \ --outputDir /path/to/output具体参数名以你 clone 的仓库版本为准但思路是一致的指定配置文件、输入视频、2D 关键点 JSON 和输出目录。4.2 跑通推理命令并理解关键参数命令行参数看起来多其实核心就几个--cfg指定模型架构和超参数配置--videoFile指定原始视频--pose2dJson指定 2D 关键点检测结果--outputDir指定输出目录。有些版本还会支持--checkpoint直接指定权重文件路径。我个人的体会是不要照抄命令就完事要理解每个参数背后的作用。比如--architecture参数控制的是时间卷积网络的层数设置比如 3、9、27 层它必须和模型权重训练时的结构完全一致否则 PyTorch 加载时会报形状不匹配的错误。官方 demo 的配置文件里已经写好了默认结构但你如果换了预训练模型就要检查配置文件是否对应。跑推理时机器会先读取 2D 关键点 JSON经过归一化、切片等预处理然后进入时间卷积网络逐帧生成 3D 关键点最后再把 3D 关键点映射回图像坐标系。整个过程如果在 GPU 上跑几秒钟到几十秒钟就能处理完一个短视频但如果只有 CPU可能需要几分钟。第一次跑如果看到进度条走得很慢不一定是你环境坏了很可能是没有使用 GPU。4.3 看输出结果视频和 npy 文件怎么用推理完成后输出目录里会生成几个文件一个渲染好的 3D 姿态视频通常是把 2D 姿态和 3D 姿态同时可视化、一个保存了原始 3D 关键点坐标的.npz或.npy文件有些版本还会生成一个data_2d的备份文件。第一次跑成功后我建议你直接打开视频看一眼。你会发现每一帧里原本的 2D 骨架旁边会出现一个旋转视角的 3D 骨架看起来就像在“跳舞”。这个可视化效果能直观验证整个链路是否打通。如果视频能正常生成但 3D 骨架乱跳或者跑到画面外那多半不是环境问题而是 2D 关键点质量差或者输入的视频帧率和训练数据不一致。至于.npz文件里面存的是每个人的 3D 关键点坐标序列形状一般是(帧数, 关节数, 3)。如果你是做数据分析或者接后续应用直接读这个文件就可以了。比如你想计算某个关节的运动幅度、做动作对比都可以基于这个输出结果来做。5. 环境搭建高频问题与排查记录5.1 CUDA、cuDNN、PyTorch 三者版本“打架”这是最高频的问题没有之一。症状通常是import torch正常但一旦跑模型或者调用torch.cuda.FloatTensor就报错错误信息里可能出现CUDA driver version is insufficient for CUDA runtime version或者no kernel image is available for execution on the device。排查思路是先把版本链捋一遍。运行nvidia-smi看驱动支持的最高 CUDA 版本运行python -c import torch; print(torch.version.cuda)看 PyTorch 内置的 CUDA 版本。如果驱动的最高版本小于 PyTorch 所需版本你需要更换驱动或者改用更低 CUDA 版本的 PyTorch。大多数情况下大家机器上不是驱动太老而是 PyTorch 装成了 CPU 版本导致 GPU 根本用不上所以第一步永远是先确认torch.cuda.is_available()是否为True。5.2 显存不足和内存不足VideoPose3D 本身不太吃显存官方预训练模型大部分时间卷积网络只有几十 MB 到几百 MB 的参数量显存占用并不高。但如果你输入的视频分辨率很高、人数很多或者你一次性处理了过长的时间窗口显存也可能被打满。训练模式或微调模式下显存占用会显著上升因为反向传播需要保存中间激活值。内存不足的问题更容易被忽略。当你加载一个很长的视频对应的 2D 关键点 JSON 时如果 JSON 里包含几千帧、每帧好几个人程序会一次性把关键点序列载入内存。小内存机器很容易直接 OOM。解决办法有两个方向一是把视频长度切短分片段处理二是调整推理脚本里padding或batch size相关参数减少同时处理的数据量。5.3 预训练模型下载慢或者失败这个问题的典型场景是代码环境和依赖都通了但模型权重一直下载不下来或者下载到一半中断。服务器在墙外下载不稳定是很正常的事但我不想在这篇环境搭建里展开太多网络话题。我只说实际方案优先用浏览器或者带断点续传的下载工具把权重文件下到本地然后再拷贝到服务器的checkpoint目录。下载完成后一定要校验文件完整性。最简单的方法是用官方提供的 MD5 值或者直接看一眼解压后文件大小是否和 README 里标注的一致。我遇到过文件只下载了 80%解压时报错我以为是环境问题排查了半天才发现是压缩包损坏。先校验文件再排查代码顺序不要搞反。5.4 2D 关键点检测器环境冲突前面说过如果你用自定义视频就得接一个 2D 关键点检测器。Detectron2 是目前和 VideoPose3D 搭配比较多的一种选择但它的安装过程很容易把环境搞乱。Detectron2 对 PyTorch 版本有严格限制比如某个版本只支持 PyTorch 1.10 到 1.12如果你为了 VideoPose3D 装了 PyTorch 2.0再回头装 Detectron2 就会编译失败。我实际推荐的做法是如果你需要接 Detectron2新建一个独立的 conda 环境给检测器用让它先输出 2D 关键点 JSON 文件再切换到 VideoPose3D 环境做后续推理。两边通过文件对接而不是硬塞进同一个 Python 环境。这样看起来多了一步实际上比解决依赖冲突省心得多。6. 从 Demo 到自己的项目扩展建议与心得6.1 处理自定义视频的完整流程参考当你已经用官方 demo 数据跑通之后就可以处理自己的视频了。完整流程大概是先用 2D 关键点检测器对输入视频逐帧检测输出包含所有人物关键点坐标的 JSON 文件然后用一个简单的脚本把视频剪辑成和 JSON 帧数对应的片段最后调用 VideoPose3D 的推理脚本输出 3D 关键点结果和可视化视频。这里有三个细节值得注意。第一视频的帧率和 2D 检测器处理时的帧率必须一致否则关键点序列的时间关系会错位3D 姿态会“发抖”。第二多人场景下2D 检测器的物体跟踪 ID 如果跳变同一个 ID 的轨迹会被打断导致 3D 姿态断裂最好先用一个不依赖短时跟踪的批量检测器做离线关键点提取。第三输入视频的编码格式尽量用 H.264不要用一些小众格式否则 OpenCV 读取可能抽帧异常。6.2 想训练自己的模型还要补哪些环境如果你不满足于用预训练模型推理想在自己的数据集上训练环境就要再补两样东西一是 3D 标注数据二是训练脚本的额外依赖。VideoPose3D 的训练脚本依赖h5py、tensorboard等库安装方法并不复杂pip install h5py tensorboard但训练时真正麻烦的是数据预处理。官方训练一般采用 Human3.6M 数据集这个数据集需要注册才能下载并且原始数据格式需要转换成项目要求的.npz格式。这一步虽然不涉及复杂的编译但很容易在数据路径配置上踩坑。我自己的经验是先把一个小规模数据集跑通训练确认模型能正常收敛再切换到完整数据集节省调试时间。另外训练时的显存占用会比推理高不少建议至少准备一块 8GB 显存的显卡作为起点。如果你只有 CPU训练一个 27 层的模型可能要跑几天那不如先用预训练模型做更实际的事情。6.3 我在多次搭建环境后的几条实操心得第一永远先跑通最小链路。不管目标多复杂先让模型在官方 demo 数据上跑出结果再一步步加自定义数据、2D 检测器、可视化扩展。很多人一上来就想接 Detectron2最后环境崩了都不知道是哪个环节出问题。第二环境对了就不要乱动。VideoPose3D 作为两三年之前很成熟的项目它的依赖体系并不追求“新”。我用得很顺的一套组合是 Python 3.8 PyTorch 1.12 CUDA 11.6中间试过升级到 PyTorch 2.0虽然也能跑但遇到过一次老权重加载的兼容性警告让我白折腾了一下午。不是说新版本不行而是如果你只是为了跑这个项目稳定优先。第三项目自带的配置文件和权重是宝贵资产。很多人喜欢随便改参数改完发现结果不对然后怀疑环境有问题。实际上 VideoPose3D 对配置非常敏感尤其是输入关键点的归一化方式、时间窗口长度和模型层数任何一个不一致都会导致输出不可用。建议在完全理解配置之前先照搬官方配置。最后给你一个操作上的小技巧每次修改环境或者安装新包之前用pip freeze requirements_backup.txt把当前环境快照存一份。这样哪怕后面装挂了也可以在几分钟内恢复到可用状态。我靠这个备份避免了好几次重装环境的重活。希望这篇环境搭建的记录能帮你少走几步弯路。