Ubuntu 20.04 + RTX 3070 显卡下 OpenPose 环境搭建全攻略(含 Conda 虚拟环境避坑指南)
Ubuntu 20.04 RTX 3070 显卡下 OpenPose 环境搭建全攻略含 Conda 虚拟环境避坑指南在计算机视觉领域OpenPose 作为一款强大的实时多人姿态估计工具被广泛应用于动作识别、运动分析等场景。对于拥有 NVIDIA RTX 3070 显卡的开发者来说在 Ubuntu 20.04 系统下搭建 OpenPose 环境可能会遇到一些特有的挑战尤其是当你想在 Conda 虚拟环境中运行它时。本文将带你一步步完成整个搭建过程并重点解决那些可能让你头疼的问题。1. 环境准备与依赖安装在开始之前确保你的系统已经安装了 NVIDIA 驱动和 CUDA 11.1。RTX 3070 显卡需要至少 CUDA 11.1 版本才能正常工作。你可以通过以下命令检查nvidia-smi nvcc --version接下来我们需要安装一些基础依赖。虽然 OpenPose 官方文档建议不使用 Conda但实践证明在 Conda 虚拟环境中也是可行的。首先创建一个新的 Conda 环境conda create -n openpose python3.6.13 conda activate openpose安装必要的系统依赖sudo apt-get update sudo apt-get install -y build-essential cmake-qt-gui libopencv-dev对于 Caffe 相关的依赖我们可以选择性安装sudo apt-get install -y libatlas-base-dev libprotobuf-dev libleveldb-dev \ libsnappy-dev libhdf5-serial-dev protobuf-compiler libboost-all-dev \ libgflags-dev libgoogle-glog-dev liblmdb-dev注意如果你只打算使用 OpenPose 进行推理而不训练模型可以跳过安装 liblmdb-dev。2. 获取 OpenPose 源代码与 CMake 配置克隆 OpenPose 官方仓库git clone https://github.com/CMU-Perceptual-Computing-Lab/openpose.git cd openpose创建构建目录并启动 CMake GUImkdir build cd build cmake-gui ..在 CMake GUI 中我们需要进行以下关键配置设置源目录为 OpenPose 根目录设置构建目录为刚创建的 build 目录点击 Configure 按钮在配置选项中启用BUILD_PYTHON设置GPU_MODE为CUDA对于 RTX 3070你可能需要禁用USE_CUDNN提示禁用 CUDNN 是因为 Caffe 对 CUDA 11 的支持不完善这会导致编译错误。配置完成后点击 Generate 生成 Makefile。3. 编译 OpenPose 与常见问题解决开始编译过程make -j$(nproc)编译过程可能需要较长时间30分钟到1小时不等取决于你的硬件配置。在这个过程中你可能会遇到以下问题问题1CUDNN 不兼容错误error: #error CUDNN version 7.0 is required解决方案在 CMake 配置中禁用USE_CUDNN选项。虽然这会降低一些性能但能保证编译通过。问题2显存不足错误CUDA out of memory这是由于禁用 CUDNN 后模型加载时会临时占用约 8GB 显存。对于 RTX 30708GB 显存来说这可能导致问题。解决方法有使用更小的模型如--model_pose BODY_25降低输入分辨率如--net_resolution 320x176在加载模型前关闭其他占用显存的程序4. Python 接口安装与测试编译完成后我们需要将 Python 接口安装到 Conda 环境中。首先找到编译生成的 .so 文件ls build/python/openpose/你应该能看到类似pyopenpose.cpython-36m-x86_64-linux-gnu.so的文件。将其复制到 Conda 环境的 site-packages 目录cp build/python/openpose/pyopenpose.cpython-36m-x86_64-linux-gnu.so \ ~/anaconda3/envs/openpose/lib/python3.6/site-packages/创建符号链接并重命名cd ~/anaconda3/envs/openpose/lib/python3.6/site-packages/ ln -s pyopenpose.cpython-36m-x86_64-linux-gnu.so pyopenpose现在你可以在 Python 中导入 OpenPose 了import pyopenpose as op测试 OpenPose 是否正常工作./build/examples/openpose/openpose.bin --video examples/media/video.avi5. 性能优化与实用技巧为了让 OpenPose 在 RTX 3070 上运行得更高效这里有一些实用技巧分辨率选择对于实时应用建议使用--net_resolution 656x368对于精度要求高的场景可以使用--net_resolution 1280x720模型选择--model_pose COCO # 轻量级模型18个关键点 --model_pose BODY_25 # 更详细的模型25个关键点多线程处理--num_gpu 1 --num_gpu_start 0 # 使用单个GPU --number_people_max 1 # 限制检测人数提高速度内存管理定期重启 OpenPose 进程以避免内存泄漏使用--disable_blending减少显存使用对于 Python 开发者这里有一个简单的使用示例import cv2 import pyopenpose as op params { model_folder: models/, net_resolution: 320x176, model_pose: BODY_25 } opWrapper op.WrapperPython() opWrapper.configure(params) opWrapper.start() datum op.Datum() imageToProcess cv2.imread(input.jpg) datum.cvInputData imageToProcess opWrapper.emplaceAndPop([datum]) print(Body keypoints: \n str(datum.poseKeypoints)) cv2.imshow(Output, datum.cvOutputData) cv2.waitKey(0)6. 高级配置与自定义模型如果你需要更高级的功能OpenPose 支持多种自定义配置手部和面部检测--hand --hand_net_resolution 320x320 --face --face_net_resolution 320x3203D 姿态估计--3d --number_people_max 1使用自定义模型将训练好的模型放在models/pose/[model_type]/目录下通过--model_pose指定模型类型对于想要在 Conda 环境中长期使用 OpenPose 的开发者建议将以下内容添加到环境变量中export OPENPOSE_ROOT/path/to/your/openpose export PYTHONPATH$PYTHONPATH:$OPENPOSE_ROOT/build/python这样你就可以在任何位置导入 pyopenpose 模块了。