赞
踩
创建一个新的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。
由于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
# 需要有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())'
# @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
重新编译,通过!!!
# @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里的math和threadpool两个文件夹及其下所有文件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
成功!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。