前言
最近想自己学习学习caffe架构,毕竟这个架构使用的很广泛,所以准备在我的虚拟机上安装caffe搞搞。网上的教程已经很多,我还要写这篇文章是因为每个人安装出现的错误总是各种各样,希望我安装过程中遇到的问题可以提供一些参考,也便于自己总结出现的问题。
提示:虚拟机下不可以安装caffe 的gpu版(我自己安装过,安装GPU驱动时会报错,说找不到GPU的),所以只能安装caffe 的cpu版。
依赖库的安装
sudo apt-get install libprotobuf-dev
sudo apt-get install libleveldb-dev
sudo apt-get install libsnappy-dev
sudo apt-get install libopencv-dev
sudo apt-get install libhdf5-serial-dev
sudo apt-get install protobuf-compiler
sudo apt-get install libgflags-dev
sudo apt-get install libgoogle-glog-dev
sudo apt-get install liblmdb-dev
sudo apt-get install libatlas-base-dev
依赖库这一块基本都一样,一步一步安装一般也不会出现什么问题,不要漏装了某个就行。
下载caffe
如果你的ubuntu里没有git工具,就先安装个git。
sudo apt-get install git
接着下载caffe源码
git clone git://github.com/BVLC/caffe.git
不过我在这一步出错了,报错:error: RPC failed; curl 18 transfer closed with outstanding read data remaining。
网上说执行以下命令,把缓存设置大一点,500M(命令如下:),我设置了,不过下载还是出错,没什么鸟用的。
git config --global http.postBuffer 524288000
接着尝试少clone一些,加入–depth 1 。这次下载成功了。
–depth 1的含义是复制深度为1,就是每个文件只取最近一次提交,不是整个历史版本。
git clone https://github.com/flutter/flutter.git --depth 1
编译caffe
进入到caffe目录,cd caffe/目录下。
接着把caffe目录下自带的Makefile.config.example文件复制一份并更名为Makefile.config,如下:
cp Makefile.config.example Makefile.config
接着修改 Makefile.config文件
vim Makefile.config
删除CPU_ONLY前面的#号,表示只是用CPU,如下图:
接着修改配置选择项中include的路径和lib的路径,把HDF5的路径加进去。
原配置选项为:
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
增加HDF5路径后:
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/
配置文件里面的python设置并没有改,用的还是默认的python2.7, 网上有的说用python3.5,这个版本的我还没有尝试。
然后开始编译
sudo make all -j2
sudo make test -j2
sudo make runtest
如下图,证明caffe编译通过了。
注意:如果执行结果失败,则需要执行语句sudo make clean,然后解决掉问题重新编译
一般到这一步不会有啥问题,下面python接口的编译到时出来不少问题。
python接口的编译
caffe具有Python和C++接口,我们较为常用Python接口,这里开始编译python接口。
(1)安装pip
sudo apt-get install python-pip
(2)在caffe根目录下,有个python文件夹,文件夹里面有个requirements.txt,里面有需要的依赖库和版本信息,按照其安装即可,在安装前,需要先安装fortran编辑器(gfrotran),因为安装scipy库时需要它,命令如下
sudo apt-get install gfortran
cd ~/caffe/python
for req in $(cat requirements.txt); do pip install $req; done
注意执行这个for req in $(cat requirements.txt); do pip install $req; done命令安装时,一定要保证网速比较好,我安装的过程中就把网换了,用手机建了个热点安装,之前的网不太好。
在执行for req in $(cat requirements.txt); do pip install $req; done这个安装时,出现了问题。
提示pip的版本是8.1.1的,推荐升级,故使用下面的指令对pip 进行升级:
pip install --upgrade pip
升级后,使用pip -V 查看版本,结果又报错:ImportError: cannot import name main。
查网上资料,解决方法是:
pip文件在usr/bin目录下,cd进去,修改pip文件。
cd /usr/bin
vim pip
进行以下修改,把下面的三行
from pip import main
if __name__ == '__main__':
sys.exit(main())
换成下面的三行
from pip import __main__
if __name__ == '__main__':
sys.exit(__main__._main())
接着从新执行下面命令:
for req in $(cat requirements.txt); do sudo pip install $req; done
可是,又报错了。错误如下,提示python-dateutil的版本不对
pandas 0.24.4 has requirement python-dateutil>=2.5.0, but you'll have
python-dateutil 1.5 which is incompatible.
matplotlib 2.2.3 has requirement python-dateutil>=2.1, but you'll have
python-dateutil 1.5 which is incompatible.
查看已经安装的python-dateutil
root@ubuntu:~/caffe# apt list python-dateutil
Listing... Done
python-dateutil/xenial,xenial,now 2.4.2-1 all [installed,automatic]
直接把原文件里的版本限制给删掉
vim requirements.txt
把python-dateutil>=1.4,<2 改为python-dateutil
再次执行for req in $(cat requirements.txt); do sudo pip install $req; done,这次终于安装过了。
(3)接下来,修改python的环境变量
vim ~/.bashrc
在文件的最后面添加
export PYTHONPATH=/home/moqi/caffe/python:$PYTHONPATH
启用环境变量:
source ~/.bashrc
编译python接口
cd ~/caffe/
make pycaffe
报错:python/caffe/_caffe.cpp:10:31: fatal error: numpy/arrayobject.h: No such file or directory,没找到numpy/arrayobject.h这个文件。
在Makefile.config找到PYTHON_INCLUDE,
PYTHON_INCLUDE := /usr/include/python2.7 \
/usr/lib/python2.7/dist-packages/numpy/core/include
要加一个local,变成:
PYTHON_INCLUDE := /usr/include/python2.7 \
/usr/local/lib/python2.7/dist-packages/numpy/core/include
再make pycaffe就ok了
最后
验证python接口是否安装成功,如下,表示安装成功了。
至此,虚拟机ubuntu16.04下caffe (cpu 版)安装完成。下一篇文章将开始研究caffe的具体例程。
参考:
https://blog.csdn.net/qq_38784979/article/details/82811907