在计算机视觉领域,人体姿态估计一直是研究热点,而Facebook Research开源的DensePose作为将2D图像映射到3D人体表面的创新工具,为这一领域带来了新的可能性。然而,对于许多开发者和研究者来说,DensePose的安装过程却成为了一道难以逾越的技术门槛。本文将基于Ubuntu 18.04系统,详细剖析DensePose安装过程中的每一个技术细节,提供一套经过实战验证的完整解决方案。
在开始安装DensePose之前,确保系统环境满足基本要求是成功的第一步。不同于常规软件的直接安装,DensePose对系统环境有着严格的要求,任何细微的版本差异都可能导致后续安装失败。
基础环境要求:
注意:虽然Ubuntu 16.04和20.04理论上也可运行,但CUDA和cuDNN的版本兼容性问题可能导致额外困难,强烈建议使用Ubuntu 18.04以避免不必要的麻烦。
Anaconda环境配置:
bash复制# 下载Anaconda3安装脚本
wget https://repo.anaconda.com/archive/Anaconda3-2020.02-Linux-x86_64.sh
# 运行安装脚本
bash Anaconda3-2020.02-Linux-x86_64.sh
# 初始化conda
source ~/.bashrc
创建专用的Python虚拟环境是管理项目依赖的最佳实践,可以有效避免不同项目间的包冲突问题:
bash复制# 创建名为densepose的虚拟环境,指定Python 3.6
conda create -y -n densepose python=3.6
# 激活虚拟环境
conda activate densepose
# 设置环境变量(替换为实际路径)
export CONDA_ENV_PATH=/path/to/anaconda3/envs/densepose
export CONDA_PKGS_PATH=$CONDA_ENV_PATH/lib/python3.6/site-packages
DensePose的成功运行依赖于多个关键组件,这些组件之间存在复杂的版本依赖关系。盲目安装最新版本往往会导致兼容性问题,因此精确控制每个组件的版本至关重要。
基础Python包安装:
bash复制conda install -y numpy setuptools cffi typing pyyaml=3.13 mkl=2019.1 mkl-include=2019.1
conda install -y cython matplotlib pydot future networkx
conda install -y opencv mock scipy h5py
pip install chumpy
COCO API安装步骤:
bash复制git clone https://github.com/cocodataset/cocoapi.git
bash复制cd cocoapi/PythonAPI
make install
PyTorch与Caffe2安装:
bash复制# 安装特定版本的PyTorch(包含Caffe2)
conda install pytorch torchvision cudatoolkit=9.0 -c pytorch
# 设置关键环境变量
export TORCH_PATH=$CONDA_PKGS_PATH/torch
export CAFFE2_INCLUDE_PATH=$TORCH_PATH/include/caffe2
# 安装特定版本的protobuf
conda install protobuf=3.6.1
验证Caffe2安装是否成功:
bash复制python -c 'from caffe2.python import core' 2>/dev/null && echo "Success" || echo "Failure"
python -c 'from caffe2.python import workspace; print(workspace.NumCudaDevices())'
现代Linux发行版默认安装的GCC版本通常较高,而DensePose需要GCC 4.9.2版本才能成功编译。这一环节是安装过程中最具挑战性的部分之一,需要手动编译特定版本的GCC并修正源代码中的兼容性问题。
GCC 4.9.2源码编译流程:
下载源码包:
bash复制wget http://ftp.gnu.org/gnu/gcc/gcc-4.9.2/gcc-4.9.2.tar.gz
tar -zxvf gcc-4.9.2.tar.gz
cd gcc-4.9.2
下载依赖项:
bash复制./contrib/download_prerequisites
创建编译目录并配置:
bash复制mkdir ../gcc-build && cd ../gcc-build
../gcc-4.9.2/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
关键源码修正:
在编译过程中,GCC 4.9.2源码与现代系统存在多处不兼容,需要进行以下修改:
| 文件路径 | 修改位置 | 原始代码 | 修改后代码 |
|---|---|---|---|
| md-unwind-support.h | 第61行 | struct ucontext * uc_ |
struct ucontext_t * uc_ |
| sanitizer_linux.h | 多处 | struct sigaltstack |
stack_t |
| tsan_platform_linux.cc | 相关行 | res_state statp |
struct __res_state *statp |
修正后执行编译和安装:
bash复制make -j$(nproc) # 使用所有CPU核心加速编译
make install
系统链接更新:
bash复制cd /usr/bin
sudo rm -rf gcc g++
sudo ln -s /usr/local/bin/gcc-4.9.2 /usr/bin/gcc
sudo ln -s /usr/local/bin/g++-4.9.2 /usr/bin/g++
验证GCC版本:
bash复制gcc -v # 应显示4.9.2版本
完成环境准备后,DensePose本体的安装同样充满挑战,需要处理路径配置、文件替换等细节问题,任何疏忽都可能导致编译失败。
源码获取与初步安装:
bash复制git clone https://github.com/facebookresearch/DensePose.git
cd DensePose
python setup.py develop
CMakeLists.txt关键修改:
cmake复制# 示例路径修改(实际需替换为你的路径)
set(Caffe2_DIR "/path/to/anaconda3/envs/densepose/lib/python3.6/site-packages/torch/share/cmake/Caffe2")
set(pybind11_DIR "/path/to/anaconda3/envs/densepose/lib/python3.6/site-packages/pybind11/share/cmake/pybind11")
PyTorch历史版本文件替换:
由于API变更,必须使用特定版本的PyTorch源码文件:
bash复制cp -r pytorch-v0.4.1/caffe2/utils/threadpool $CAFFE2_INCLUDE_PATH/utils/
cp -r pytorch-v0.4.1/caffe2/utils/math $CAFFE2_INCLUDE_PATH/utils/
编译与验证:
bash复制mkdir build && cd build
cmake .. && make
# 运行测试脚本验证安装
cd ..
python detectron/tests/test_zero_even_op.py # 应输出"OK"
安装完成后,使用预训练模型进行测试是验证安装成功与否的直接方式。这一阶段同样会遇到权重文件下载、依赖脚本缺失等问题。
权重文件准备:
创建权重目录并下载预训练模型:
bash复制mkdir -p weights
# 下载DensePose_ResNet101_FPN_s1x-e2e.pkl到weights目录
下载必要的UV数据文件:
bash复制cd DensePoseData
sh get_densepose_uv.sh
运行测试示例:
bash复制python tools/infer_simple.py \
--cfg configs/DensePose_ResNet101_FPN_s1x-e2e.yaml \
--output-dir DensePoseData/infer_out/ \
--image-ext jpg \
--wts weights/DensePose_ResNet101_FPN_s1x-e2e.pkl \
DensePoseData/demo_data/demo_img.jpg
常见问题解决方案:
问题1:ImportError: libcudart.so.9.0: cannot open shared object file
解决:确保CUDA 9.0运行时库在LD_LIBRARY_PATH中
bash复制export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64:$LD_LIBRARY_PATH
问题2:编译时出现undefined reference to错误
解决:检查PyTorch版本是否匹配,确保使用了正确的源码文件替换
问题3:测试时缺少get_densepose_uv.sh脚本
解决:从DensePose官方GitHub仓库获取最新脚本
在实际项目部署中,建议将所有这些安装步骤脚本化,并配合Docker容器技术,可以大幅提高环境配置的效率和可重复性。对于团队协作场景,可以考虑构建自定义Docker镜像,封装所有依赖项和配置,实现一键部署。