Ubuntu16.04安装caffe

环境

Ubuntu16.04
miniconda3
python3.6
CPU

安装依赖项

# apt-get install libprotobuf-dev 
# apt-get install protobuf-compiler
apt-get install libleveldb-dev
apt-get install libsnappy-dev 
apt-get install libopencv-dev
apt-get install libhdf5-serial-dev
apt-get install libgflags-dev
apt-get install libgoogle-glog-dev
apt-get install liblmdb-dev
apt-get install aptitude
aptitude install libboost-all-dev

此处不建议使用apt安装protobuf,后续会有很多错误。caffe对应的protobuf版本为2.6.1.建议自己下载编译protobuf2.6.1.

安装protobuf2.6.1

安装过程参考:安装protobuf2.6.1

protobuf下载地址:https://github.com/protocolbuffers/protobuf/releases
在tag中找到protobuf2.6.1并下载,得到protobuf-2.6.1.tar.gz。

安装依赖项

apt-get install autoconf
apt-get install automake 
apt-get install libtool

解压缩

tar -xvf protobuf-2.6.1.tar.gz

安装

./autogen.sh

此处会遇到以下信息,从网站下载gtest-1.5.0

Google Test not present.  Fetching gtest-1.5.0 from the web...
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:--  0:01:03 --:--:--     0

可以从github下载安装包:https://github.com/google/googletest/tree/release-1.5.0,下载后解压得到googletest-release-1.5.0,把这个文件夹拷贝到protobuf-2.6.1文件夹里边,然后重命名为gtest。

然后再执行./autogen.sh这个命令,命令执行生成configure文件。

编译

./configure
make
make check
make install

切换protobuf版本

由于我的环境中本来就安装了protobuf3.5.1,所以编译安装后仍然不能调用新安装的2.6.1版本的protobuf,所以需要更改环境变量。新安装的protobuf位置可以通过find命令查找。

find / -name libprotobuf*

结果如下,其中/usr/local/lib/下的protobuf为新安装的。

/home/hi3559a/protobuf/lib/x86_64-linux-gnu/libprotobuf-lite.so
/home/hi3559a/protobuf/lib/x86_64-linux-gnu/libprotobuf.so
/root/miniconda3/lib/python3.6/site-packages/onnx/.libs/libprotobuf-487875fe.so.9.0.1
/usr/lib/x86_64-linux-gnu/libprotobuf-lite.so.8
/usr/lib/x86_64-linux-gnu/libprotobuf-lite.so
/usr/lib/x86_64-linux-gnu/libprotobuf.so
/usr/lib/x86_64-linux-gnu/libprotobuf.so.8.0.0
/usr/lib/x86_64-linux-gnu/libprotobuf.so.8
/usr/lib/x86_64-linux-gnu/libprotobuf-lite.so.8.0.0
/usr/lib/x86_64-linux-gnu/libprotobuf-lite.a
/usr/lib/x86_64-linux-gnu/libprotobuf.a
/usr/local/lib/libprotobuf-lite.so
/usr/local/lib/libprotobuf.so
/usr/local/lib/libprotobuf-lite.so.9.0.1
/usr/local/lib/libprotobuf-lite.la
/usr/local/lib/libprotobuf.la
/usr/local/lib/libprotobuf.so.9.0.1
/usr/local/lib/libprotobuf-lite.so.9
/usr/local/lib/libprotobuf.so.9
/usr/local/lib/libprotobuf-lite.a
/usr/local/lib/libprotobuf.a
/protobuf-2.6.1/vsprojects/libprotobuf.vcproj
/protobuf-2.6.1/vsprojects/libprotobuf-lite.vcproj
/protobuf-2.6.1/src/libprotobuf-lite.la
/protobuf-2.6.1/src/libprotobuf.la
/protobuf-2.6.1/src/.libs/libprotobuf.lai
/protobuf-2.6.1/src/.libs/libprotobuf-lite.lai
/protobuf-2.6.1/src/.libs/libprotobuf-lite.so
/protobuf-2.6.1/src/.libs/libprotobuf.so
/protobuf-2.6.1/src/.libs/libprotobuf-lite.so.9.0.1
/protobuf-2.6.1/src/.libs/libprotobuf-lite.la
/protobuf-2.6.1/src/.libs/libprotobuf.la
/protobuf-2.6.1/src/.libs/libprotobuf.so.9.0.1
/protobuf-2.6.1/src/.libs/libprotobuf-lite.so.9
/protobuf-2.6.1/src/.libs/libprotobuf.so.9
/protobuf-2.6.1/src/.libs/libprotobuf-lite.a
/protobuf-2.6.1/src/.libs/libprotobuf.a

更改环境变量:

vim ~/.bashrc

在~/.bashrc中添加环境变量:

export PATH=/usr/local/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
source ~/.bashrc

可以通过查看protoc版本和位置确认。

protoc --version  #查看protobuf版本
which protoc  #查看protoc位置

下载caffe-ssd

建议使用weiliu89caffe-ssd:https://github.com/weiliu89/caffe

git clone https://github.com/weiliu89/caffe.git
cd caffe

编辑Makefile.config

使用vim或者gedit编辑

mv Makefile.config.example  Makefile.config
vim Makefile.config

使用CPU

# CPU_ONLY := 1
改为
CPU_ONLY := 1

注释掉python2.7的内容

PYTHON_INCLUDE := /usr/include/python2.7 \
                /usr/lib/python2.7/dist-packages/numpy/core/include
改为                
#PYTHON_INCLUDE := /usr/include/python2.7 \
                #/usr/lib/python2.7/dist-packages/numpy/core/include

使用miniconda中的python3.6

# ANACONDA_HOME := $(HOME)/anaconda
# PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
                # $(ANACONDA_HOME)/include/python2.7 \
                # $(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include
改为                
ANACONDA_HOME := /root/miniconda3  #更改路径为自己环境中的conda路径
PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
                  $(ANACONDA_HOME)/include/python3.6m \
                  $(ANACONDA_HOME)/lib/python3.6/site-packages/numpy/core/include

使用python3.6

#PYTHON_LIBRARIES := boost_python3 python3.5m
改为
PYTHON_LIBRARIES := boost_python3 python3.6m

添加一些库(?)

INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib

INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu/hdf5/serial:q

编译安装

make all
make runtest -j8
make pycaffe -j8

编译成功后可以在python测试。

错误总结

protobuf版本

make all过程中遇到如下错误,为protobuf版本不对应,需要自行安装protobuf2.6.1

- #error This file was generated by a newer version of protoc which is

libboost_python3

找不到lboost_python3,解决方法参考:https://www.cnblogs.com/skymiao/p/10825223.html

import错误

- ImportError: /caffe/python/caffe/_caffe.so: undefined symbol: _ZN5boost6python6detail11init_moduleER11PyModuleDefPFvvE

原因: libboost_python.so的版本不匹配,默认python版本为3.5,而boost_python为2.7。
解决方法:修改make.config文件, 将PYTHON_LIBRARIES := boost_python3 python3.5m注释去掉,并修改为PYTHON_LIBRARIES := boost_python-py35 python3.5m. 重新编译即可。
原文链接:https://blog.csdn.net/zjchenchujie/article/details/89976153

参考文章:
https://www.cnblogs.com/skymiao/p/10825223.html
https://blog.csdn.net/outloookcom/article/details/81005490
https://blog.csdn.net/zjchenchujie/article/details/89976153

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值