2020 经历 ubuntu16.04下的 caffe install
前言
公园2020,caffe比较成熟(老去),但仍然在一些经典(老旧)的嵌入式平台焕发这生命力,据说在17以后的Ubuntu版本安装很容易,然而目前还在16.04苦苦挣扎的人,没有勇气直接upgrade到18,所以只能再次趟一下别人走过的河,古希腊哲学家赫拉克利特说"人不能两次踏进同一条河流",引用一下类自嘲我掉坑的经历和别人大同小异,各有各的酸爽,记录一下,已备后用。
引用参考
Caffe Tutorial
caffe install
caffe_compile prerequisites compile
github caffe
前提
我实在16.04下,挂载python3.6来使用pycaffe,那么需要安装python3.6,并且配置conda环境。在安装前仔细阅读caffe install 和caffe_compile prerequisites compile,决定用CMAKE的方法编译安装caffe。
因为需要python调用,所以按照提示,在caffe目录下,进入python子目录,运行
for req in $(cat requirements.txt); do pip install $req; done
把依赖的pip安装好。
第一阶段的错误
Could NOT find LMDB (missing: LMDB_INCLUDE_DIR LMDB_LIBRARIES)
这个通过下列的库安装得到解决。
sudo apt install libgflags-dev libgoogle-glog-dev liblmdb-dev -y
Could NOT find Atlas (missing: Atlas_CBLAS_LIBRARY Atlas_BLAS_LIBRARY Atlas_LAPACK_LIBRARY)
这个需要修改文件,我本机有openblas,修改如下
caffe_root/cmake/Dependencies.cmake BLAS = Open
ubuntu opencv 编译失败 relocation R_X86_64_32 against `.rodata.str1.1’
这个错误很折腾,我先是在csdn的一篇blog指导下,重装了ffmpeg,编译过去了,但是之后重新编译的时候又报错误。
于是我又重新编译了python3.6.2 --enable-shared,之后这个问题到是没有再都出现,不知道是不是因为这个动作解决的
python调用caffe时,出现ImportError: No module named _caffe
等到安装成功了,进入python import caffe的时候,就出现这个了,怎么设置环境变量都没有用,于是我怀疑自己默写安装步骤除了问题,再次重装系统。
第二阶段的错误
第二阶段主要目标是,import caffe不出错,但是重新编译就再次碰到relocation R_X86_64_32 问题,虽然解决了这个,但是有发现boost有异常,以及再次重装python3.6时候一些warning,error.
_ssl.cpython-36m-x86_64-linux-gnu.so 缺失
重装open ssl
libboost找不到
反复折腾了几次,也没有搞定,反而caffe报的错误更早了,搜索了各种“cmake中boost库找不到问题”的参考文章,在python 3.6编译libboost_python3.so并编译cpu-caffe启发下,手动安装了最新的libboost,./b2 include="/usr/include/python3.6m/" 这句换了自己的python3.6m的路径,就这样,boost的问题解决了。重新编译,最后python import caffe成功。
CMAKE编译的简单方便
其实网络上很多是老的confiure方式编译指导,用cmake的不多,但是cmake确实方便,而且默认就是支持pycaffe的编译的。不过有的提示编译器错误,需要在Cmakelist.txt里加“+SET( CMAKE_CXX_FLAGS “-std=c++11 -O3”)”编译标志。然后,按照官方指导,加好环境变量,就ok了。
在python中引用caffe模块
# caffe模块要在Python的路径下;
# 这里我们将把caffe 模块添加到Python路径下.
import sys
caffe_root = '/home/***/caffe/' # 该文件要从路径{caffe_root}/examples下运行,否则要调整这一行。
sys.path.insert(0, caffe_root + 'python')