概述
因为毕设需要跑一个text_detecetion的模型提一下text_proposal,在github上找了几个比较新的模型跑下看下效果.其中一个是沈春华老师团队的textspotter.但是这份代码是caffe写的.并且不是caffe2,所以配环境花费了一些时间,也遇到了一些问题,在次做下记录.
过程
本机环境
使用的是实验室的服务器,情况如下:
- ubuntu 16.04
- 1080Ti
- cuda 8.0 & cuda 9.0
安装过程
因为我需要使用的caffe有项目作者修改的部分,所以无法使用原版本的caffe,只能使用编译安装的方法进行安装,参考caffe官方安装,安装的步骤其实是比较简单的,如果你的机子环境配置正确的话,其实问题不大.步骤如下
- 新建conda环境,python版本为2.7
- 下载你需要的caffe源码,若为未修改版本.则是caffe
- cp Makefile.config.example Makefile.config
- 按照你的电脑的路径配置Makefile.config文件
- make clean
- make -j8
- make pycaffe
若完成这些之后没有报错,则进入python,尝试import一下caffe,若正常,则说明caffe安装完成.
遇到的问题
安装的过程看起来比较简单,但是我在安装的过程中遇到不少问题,在此按我遇到问题的顺序做一下汇总.
CUDA版本问题
我成功安装caffe的环境是CUDA8.0,一开始想先尝试使用CUDA9.0安装,但是报错,在配置文件中修改CUDA路径至CUDA8.0之后问题解决.bashrc文件CUDA路径配置方法如下:1
2
3export PATH="/home/wangyan/anaconda3/bin:$PATH"
export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64${LD_LIBRARY_PATH:+${LD_LIBRARY_PATH}}
之后在caffe的Makefile.config文件中,同样需要修改CUDA_DIR至CUDA正确的位置.
protobuf版本冲突问题
在make过程中由于protobuf版本的问题报错如下1
2error: #error This file was generated by a newer version of protoc which is
#error This file was generated by a newer version of protoc which is
原因是因为conda中的protobuf版本不合适,此处应该需要2.6版本的protobuf,检查后发现电脑上conda外的protobuf的版本符合要求,因此先删除conda内的protobuf,再安装,最后再安回来,删除参考以后以后的博客.1
conda uninstall libprotobuf
如果你想查看你的protobuf版本及默认路径的话,可以参考Felix-sky的博客.需要注意的是.卸载后需要重新nake clean一下再开始编译.
hdf5的路径问题
由于Makefile中hdf5路径配置的原因,导致报错如下:1
fatal error: hdf5.h: No such file or directory
方法参考西北有高楼的博客,查找hdf5地址,修改MAkefile中的LIBRARY_DIRS和INCLUDE_DIRS地址即可.
numpy的路径问题
由于Makefile文件中python路径不正确的问题,但是编译过程中无法使用numpy的相关文件,报错如下:1
fatal error: numpy/arrayobject.h
参考wuzuyu365的博客中的第二种方法查询需要添加的位置:1
2import numpy as np
np.get_include()
之后修改Makefile中PYTHON_INCLUDE的地址即可.
libcudart.so.8.找不到的问题
由于找不到libcudart.so.8的位置导致报错:1
libcudart.so.8.0: cannot open shared object file: No such file or directory
在确定你使用的是CUDA.0版本的情况下,方法参考volcano_Lin的博客,我使用第一种方法解决此问题:1
sudo ldconfig /usr/local/cuda-8.0/lib64
protobuf装回
因为之前为了正常编译,在conda下删除了protobuf,所以在进入python后import caffe时引起报错:1
No module named google.protobuf.internal
这时在conda下重新安装protobuf即可,参考Wonder233d的博客:1
conda install protobuf
编译时c++标准的问题
由于编译时不兼容C++11导致报错:1
‘auto’ changes meaning in C++11; please remove it [-Wc++0x-compat]
参考凡QGZ的方法,在bashrc文件中添加CXXFLAGS参数解决问题:1
export CXXFLAGS="${CXXFLAGS} -std=c++11"
至此textspotter已经可以正常跑通.
小结
不得不说,caffe安装过程中还是学到了很多编译安装python库的知识,因为有pip和conda的原因,之前使用编译安装的库还是比较少的.需要注意的是caffe有许多魔改版本,因此你在编译安装的时候需要清楚项目需要的caffe版本.我在这次配置的过程中就犯了一个傻傻的错误.一开始是按官方的caffe安装的,在跑项目的时候就报错说有的方法无法识别,在实验室学长的提醒下才发现项目中提供了caffe的代码,在对应项目的caffe代码中进行编译,才可以正常使用.