Configuring-Caffe

概述

  因为毕设需要跑一个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
3
export 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
2
error: #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
2
import 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代码中进行编译,才可以正常使用.