Linux配置DensePose环境全记录

1.新建conda环境-densepose

创建一个新的conda虚拟环境,方便管理。

# 如果没有添加镜像源可能下载速度会比较慢,添加中科大镜像源
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/free/
conda config --set show_channel_urls yes

# 创建densepose环境
conda create -n densepose python=2.7

densepose是环境名,pyhton版本2.7。

2.安装CUDA9和 CuDNN 7

由于Caffe2需要CUDA支持,因此需要先安装CUDA和CuDNN

# 安装CUDA9
conda install cudatoolkit=9.0 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/linux-64/

# 安装CuDNN7.1.2
conda install cudnn=7.1.2

3.安装Caffe2

# 需要有GPU,这一步下载会稍微慢一些。
conda install pytorch-nightly -c pytorch

# 检查Caffe2是否成功安装
python2 -c 'from caffe2.python import core' 2>/dev/null && echo "Success" || echo "Failure"

如果返回"Failure",大概率是缺少依赖包,按照下面的步骤排除错误:

# 进入python脚本模式
$ python

# 引入包,查看报什么错误
>>> from caffe2.python import core

# 大概率是以下错误,缺少什么就安装什么即可
ImportError: No module named ****

如 No module named past.builtins -> conda install future

# ctrl+D退出脚本模式

注意:如果是缺少protobuf,一定要安装3.6.1版本的,否则之后不兼容还要重装!

conda install protobuf=3.6.1
# 检查Caffe2 GPU是否成功安装,返回GPU数量
python2 -c 'from caffe2.python import workspace; print(workspace.NumCudaDevices())'

4.安装COCOAPI

# @PATH指的是你用来clone cocoapi的路径
# clone cocoapi到指定目录下
git clone https://github.com/cocodataset/cocoapi.git @PATH 

# 进入目录
cd @PATH/PythonAPI

# 编译
make install
# 上面的不行试一下下面的
python2 setup.py install --user

编译时遇到错误:

gcc: error: pycocotools/_mask.c: No such file or directory
gcc: fatal error: no input files

原因是在编译 COCOAPI 时需要依赖库Cython,所以应先安装 Cython 库再编译:

conda install Cython

重新编译,出现新的错误:

error: Setup script exited with 
Beginning with Matplotlib 3.4, Python 3.7 or above is required.
You are using Python 2.7.13.

这是由于自动编译时安装的依赖都是比较新的版本,Matplotlib对于python2.7的支持仅到2.2.5版本,查看makefile的要求matplotlib>=2.1.0,因此用conda安装对应版本的即可:

conda install matplotlib=2.1.0

重新编译,通过!!!

5.安装Densepose

# @PATH 同样是自己创建的存储目录
git clone https://github.com/facebookresearch/densepose @PATH

检查依赖库

pyyaml>=3.12
opencv-python>=3.2
mock
scipy
h5py
memory_profiler

如果缺少那个依赖库就用conda安装

之后进行编译和检查

# @PATH是clone DensePose的本地路径
cd @PATH && make

# 检查 Deterctron
python @PATH/detectron/tests/test_spatial_narrow_as_op.py

报错

AssertionError: Detectron ops lib not found; make sure that your Caffe2 version includes Detectron module

解决方案:

# 查找文件
find / -name libcaffe2_detectron_ops_gpu.so
# 找到其路径为:
/home/cz/miniconda3/envs/densepose/lib/python2.7/site-packages/torch/lib/libcaffe2_detectron_ops_gpu.so
#修改env.py第54行
vim @PATH/detectron/utils/env.py
prefixes = [_CMAKE_INSTALL_PREFIX, sys.prefix, sys.exec_prefix] + sys.path + ['/home/mychocer/anaconda2/lib/python2.7/site-packages/torch/']

再次测试通过!!

下一步,make ops建立custom operators library:

cd @PATH && make ops

错误1:

CMake Error at /home/anaconda3/envs/densepose/lib/python2.7/site-packages/torch/share/cmake/Caffe2/Modules_CUDA_fix/upstream/FindCUDA.cmake:1463 (string):string does not recognize sub-command APPEND

解决方法:
这个错误是由于cmake的版本过低,升级cmake

错误2:

error :This file was generated by an older/newer version of protoc which is error incompatible with your Protocol Buffer headers.

这是protobuf版本与代码要求版本不一致导致的,所需要的protobuf版本只能为3.6.1!!!卸载之前的protobuf再重新安装。

conda install protobuf==3.6.1

错误1:

CMake Error at CMakeLists.txt:8 (find_package):
  By not providing "FindCaffe2.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "Caffe2", but
  CMake did not find one.

  Could not find a package configuration file provided by "Caffe2" with any
  of the following names:

    Caffe2Config.cmake
    caffe2-config.cmake

  Add the installation prefix of "Caffe2" to CMAKE_PREFIX_PATH or set
  "Caffe2_DIR" to a directory containing one of the above files.  If "Caffe2"
  provides a separate development package or SDK, be sure it has been
  installed.

解决方案:

# 查找caffe2的cmake
find / -name Caffe2 | grep cmak
# 找到路径为:
/home/cz/miniconda3/envs/densepose/lib/python2.7/site-packages/torch/share/cmake/Caffe2
# 加入到环境变量CMAKE_PREFIX_PATH
export CMAKE_PREFIX_PATH=/home/cz/miniconda3/envs/densepose/lib/python2.7/site-packages/torch/share/cmake/Caffe2

但环境变量仅当次有效,重启终端会失效,需要重新添加。

错误4:

 fatal error: mkl_cblas.h: No such file or directory

解决方案:

# 安装mkl-include
conda install mkl-include
# 查找mkl-include录几个
find /home -name mkl-include
# 找到路径为:
/home/lingfeimo/anaconda3/pkgs/mkl-include-2021.2.0-h726a3e6_389
# 后面加上 /include 加入到环境变量CPATH
export CPATH=/home/lingfeimo/anaconda3/pkgs/mkl-include-2021.2.0-h726a3e6_389/include$CPATH

错误5:

fatal error: google/protobuf/stubs/common.h: No such file or directory

解决方案:

# 查找common.h文件
find /home -name libprotobuf-3.6.1
# 得到路径
/home/*/anaconda3/pkgs/libprotobuf-3.6.1-hdbcaa40_1001
#  后面加上 /include 加入到环境变量CPATH
export CPATH=/home/*/anaconda3/pkgs/libprotobuf-3.6.1-hdbcaa40_1001/include$CPATH

问题6:

重头戏来了,也是导致我推倒重来数次的大BUG。

fatal error: caffe2/utils/math/broadcast.h: No such file or directory

出现这个错误,网上的教程都是下载Pytorch源代码,把缺失的文件copy到指定路径,但是!!!新版本的Pytorch源码和conda下载的Caffe2不兼容,因此copy过去只会引起更多的bug!!!
解决方案:
下载链接里的版本Pytorch1.4.0源代码-gitee
然后把caffe2/utils里的maththreadpool两个文件夹及其下所有文件copy到报错的路径下caffe2/utils

再make ops,大功告成!!!
在这里插入图片描述
检查是否make成功

python /home/cz/densepose/detectron/tests/test_zero_even_op.py

出现问题:

OSError: /home/cz/densepose/build/libcaffe2_detectron_custom_ops_gpu.so: undefined symbol: _ZN6caffe219CPUOperatorRegistryB5cxx11Ev

原因是cmake的版本太高,与老版本的symbol不一致。
解决方案:
1、按照以下博客进行cmake的降级:改变cmake版本

2、重新make ops

执行

python /home/cz/densepose/detectron/tests/test_zero_even_op.py

在这里插入图片描述

成功!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值