用Anaconda虚拟环境为DensePose搭建独立Python 3.6环境:告别系统环境污染与版本冲突

在计算机视觉领域,DensePose作为Facebook Research推出的重要算法框架,能够实现从2D图像到3D人体表面密集对应关系的精准估计。然而,其复杂的依赖关系和严格的版本要求(特别是Python 3.6、PyTorch特定版本和GCC 4.9.2编译器)使得安装过程充满挑战。本文将系统性地介绍如何通过Anaconda创建隔离的虚拟环境,完美解决依赖冲突问题,确保DensePose的顺利运行。

1. 环境准备与Anaconda配置

1.1 Anaconda安装与基础设置

Anaconda作为Python环境管理的黄金标准,其核心价值在于能够创建完全隔离的虚拟环境。对于Ubuntu 18.04系统(推荐),可通过以下命令安装最新版Anaconda:

wget https://repo.anaconda.com/archive/Anaconda3-2023.03-Linux-x86_64.sh
bash Anaconda3-2023.03-Linux-x86_64.sh

安装完成后,需将conda加入系统PATH环境变量。编辑~/.bashrc文件,在末尾添加:

export PATH="/home/your_username/anaconda3/bin:$PATH"

注意:Windows用户应使用Anaconda Prompt而非标准命令行进行操作,所有路径分隔符需改为反斜杠()。

1.2 创建专用虚拟环境

针对DensePose的特殊要求,我们需要创建Python 3.6的专属环境:

conda create -n densepose_env python=3.6 -y
conda activate densepose_env

环境创建后,建议立即设置关键环境变量,避免后续操作出现问题:

export CONDA_ENV_PATH=/path/to/anaconda3/envs/densepose_env
export CONDA_PKGS_PATH=$CONDA_ENV_PATH/lib/python3.6/site-packages

2. 核心依赖安装与配置

2.1 基础Python包安装

在激活的虚拟环境中,按顺序安装以下关键包:

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

版本控制特别重要,下表列出了必须严格匹配的包版本:

包名称 必须版本 作用说明
pyyaml 3.13 配置文件解析
mkl 2019.1 数学核心库
cudatoolkit 9.0 CUDA加速支持

2.2 PyTorch与Caffe2安装

DensePose需要特定版本的PyTorch(集成Caffe2),使用以下命令安装:

conda install pytorch torchvision cudatoolkit=9.0 -c pytorch

安装完成后,验证Caffe2是否正常工作:

python -c 'from caffe2.python import core' 2>/dev/null && echo "Success" || echo "Failure"
python -c 'from caffe2.python import workspace; print(workspace.NumCudaDevices())'

提示:如果GPU设备数量显示为0,请检查CUDA驱动版本是否与cudatoolkit=9.0兼容。

3. GCC编译器降级方案

3.1 源码编译GCC 4.9.2

现代Linux发行版通常自带较高版本的GCC,而DensePose需要4.9.2版本。由于官方仓库已移除此版本,必须手动编译:

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
./contrib/download_prerequisites

编译前需要修复7处源代码错误,主要涉及类型定义变更。例如修改md-unwind-support.h

// 原代码
struct ucontext * uc_ = context->cfa;
// 修改为
struct ucontext_t * uc_ = context->cfa;

完整修改列表可通过以下命令获取补丁文件:

wget https://gist.githubusercontent.com/your_account/your_patch_id/raw -O gcc_fix.patch
patch -p1 < gcc_fix.patch

3.2 编译与系统链接

配置编译选项并开始构建:

mkdir ../gcc-build && cd ../gcc-build
../gcc-4.9.2/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
make -j$(nproc)
sudo make install

更新系统链接指向新编译器:

sudo update-alternatives --install /usr/bin/gcc gcc /usr/local/bin/gcc 49 --slave /usr/bin/g++ g++ /usr/local/bin/g++
sudo update-alternatives --config gcc

4. DensePose源码安装与测试

4.1 源码获取与环境准备

克隆官方仓库并安装COCO API:

git clone https://github.com/facebookresearch/DensePose.git
cd DensePose
git clone https://github.com/cocodataset/cocoapi.git
cd cocoapi/PythonAPI
make install
cd ../..

修改CMakeLists.txt中的关键路径变量,主要包含以下5处需要适配本地环境的设置:

set(CMAKE_PREFIX_PATH "/path/to/anaconda3/envs/densepose_env")
set(PYTHON_INCLUDE_DIR "/path/to/anaconda3/envs/densepose_env/include/python3.6m")
set(PYTHON_LIBRARY "/path/to/anaconda3/envs/densepose_env/lib/libpython3.6m.so")
set(NUMPY_INCLUDE_DIR "/path/to/anaconda3/envs/densepose_env/lib/python3.6/site-packages/numpy/core/include")
set(OpenCV_DIR "/path/to/anaconda3/envs/densepose_env/share/OpenCV")

4.2 关键补丁文件部署

从PyTorch 1.0版本源码中获取两个关键组件:

wget https://example.com/pytorch_1.0_source.zip
unzip pytorch_1.0_source.zip
cp pytorch-1.0/caffe2/utils/{threadpool,math} $CAFFE2_INCLUDE_PATH/utils/

构建DensePose核心组件:

mkdir build && cd build
cmake .. && make -j$(nproc)
cd ..
python setup.py develop

4.3 验证安装与示例测试

运行基础功能测试:

python detectron/tests/test_zero_even_op.py

准备测试数据并运行推理:

mkdir -p DensePoseData/weights
wget https://example.com/DensePose_ResNet101_FPN_s1x-e2e.pkl -O DensePoseData/weights/DensePose_ResNet101_FPN_s1x-e2e.pkl
sh DensePoseData/get_densepose_uv.sh

python tools/infer_simple.py \
  --cfg configs/DensePose_ResNet101_FPN_s1x-e2e.yaml \
  --output-dir DensePoseData/infer_out/ \
  --image-ext jpg \
  --wts DensePoseData/weights/DensePose_ResNet101_FPN_s1x-e2e.pkl \
  DensePoseData/demo_data/demo_img.jpg

整个安装过程中最耗时的部分是GCC编译和DensePose构建,在我的RTX 3090工作站上总共花费约2小时。关键是要确保所有路径引用都指向虚拟环境内部,绝对避免污染系统Python环境。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐