这次虚拟机下在ubuntu16.04下配caffe真是走了许多弯路,里面布满了坑,索性最后终于装好了,记下来让后面的人少入坑,并且在这里不得不吐槽下下载依赖项的速度,真是令人抓急。
首先,在VM下装好ubuntu16.04。
如果不是对VM太了解的话,按照推荐的安装吧,简单方便,下一步下一步即可,然后,我在装ubuntu时时用中文的,也是最简单的装法,也没有分盘,惭愧惭愧! 英语还需要 多进步进步!
废话不多说,开始配caffe。
一、安装依赖项,这个是根据caffe官网的要求配的,打开caffe官网,在说明里有installing ···for···ubuntu,里面有装caffe的步骤,结果里面都是英文···
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
sudo apt-get install --no-install-recommends libboost-all-dev
sudo apt-get install libatlas-base-dev libopenblas-dev
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
这里格外注意:由于服务器网速慢等原因,一般上在安装这些依赖的过程中(特别是第一个),第一次安装都不会全部安装成功,有几个会安装失败,解决方 法是:在失败后,输入sudo apt-get update之后,再重新输入之前的这四条(特别是第一条)继续安装。这里是个坑,装了很多次,在make all时总会出 现什么缺少文件或找不到文件的莫名其妙的错误就是来自于有些依赖项装失败了,少装了·····夹在成功安装的提示里面不容易发现,坑!
二、下载caffe源码
git clone https://github.com/BVLC/caffe.git
没有安装git的话,在终端输入sudo apt-get install git
三、编译caffe
1)进入caffe目录:cd caffe/
2)生成Makefile.config文件:cp Makefile.config.example Makefile.config
3)修改Makefile.config文件中的配置
a) 编辑Makefile.config文件: gedit Makefile.config或者 vi Makefile.config(系统带的vi不好用,最好用sudo apt-get remove vim- common指令卸载了,再sudo apt-get install vim重装一个就好用了。)
b) 去掉CPU_ONLY前面的#号
c) 配置引用文件路径(主要是HDF5的路径问题:hdf5.h、 libhdf5.so的路径)按照这个样子把原来的改了。
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
注意:可以利用sudo find / -name 文件名来查找某个文件的具体位置
如果是32位的Ubuntu,那么库路径应该是/usr/lib/i386-linux-gnu/hdf5/serial,若不确定,可以find 下libhdf5.a
注:如果caffe ---找不到lhdf5_hl和lhdf5的错误
//重要的一项
来源于 http://blog.csdn.net/autocyz/article/details/51783857
将# Whatever else you find you need goes here.下面的
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 /usr/lib/x86_64-linux-gnu/hdf5/serial
//这是因为ubuntu16.04的文件包含位置发生了变化,尤其是需要用到的hdf5的位置,所以需要更改这一路径
cd /usr/lib/x86_64-linux-gnu
\\然后根据情况执行下面两句:
sudo ln -s libhdf5_serial.so.10.1.0 libhdf5.so
sudo ln -s libhdf5_serial_hl.so.10.0.2 libhdf5_hl.so
d) 执行编译
随后进行编译:
make all
make test
make runtest
如果make all成功,是下图的样子:
注意:如果执行结果失败,则需要执行语句sudo make clean后,解决掉问题,重新编译。这里我的问题倒是不大,下面的问题也挺大,也是坑多。
四、编译Python接口
1) 安装pip
Ubuntu16.04默认安装的是python2.7,没有pip,所以需要先安装pip,命令如下:sudo apt-get install python-pip
当然可能会出现需要更新版本pip,按照终端给出的提示命令更新。好像是apt-get update
2) 安装Python接口依赖库
在caffe根目录下,有个python文件夹,该文件夹有requirements.txt,里面有需要的依赖库和版本信息,按照其安装即可:
cd ~/caffe/python
for req in $(cat requirements.txt); do pip install $req; done
安装结束后,可以执行如下语句验证:sudo pip install -r requirements.txt,如果显示Requirement already satisfied,则安装成功,否则会 继续进行安装。
不得不说一下这垃圾的下载速度,经常下载一点就跳出,显示红字无响应了。在这里浪费了很多功夫和时间搞明白。
而且如果用的是for req in $(cat requirements.txt); do pip install $req; done这个指令,尽管浪费了许多时间下载好依赖项但到后面,会发现 尼玛的权限会不够,坑啊!!
我也试过直接make pycaffe,缺什么然后装什么的方法,但也遇到上述问题,比如缺少no named of skimage.io,然后pip install skimage来引 出这个包真正的名字(终端有提示)。不过这种不sudo,最后会发现没权限,坑!下载慢!白装!白浪费好多时间!sudo的,每一次下载失败就是 重新开始下载每一个,心累,很慢的而且基本会是失败。
那就只能用for req in $(cat requirements.txt); do sudo pip install $req; done加个sudo才行,而且这样子哪怕其中有一个没下载成功,可以 Ctrl+c 终端,再输入for req in $(cat requirements.txt); do sudo pip install $req,这个会继续安装以前没安装好的,知道最后装好。如图:
没下载成功的,重复试,直到全部下载成功。
3) 将caffe根目录下的python文件夹加入到环境变量中
a) 打开配置文件bashrc:sudo gedit ~/.bashrc,还要不忘记来个 source ~/.brash.c,激活一下环境变量。
b) 在文件的最后面添加:export PYTHONPATH=/home/shine/caffe/python:$PYTHONPATH
注意:进入caffe文件夹里的python目录下,输入pwd就可以查看路径
4)编译python接口
cd ~/caffe/
make pycaffe
注意:如果出现找不到numpy/arrayobject.h这种问题,则检查Makefile.config文件中的PYTHON路径(Python.h、numpy/arrayobject.h的 路径):
PYTHON_INCLUDE := /usr/include/python2.7 /usr/lib/python2.7/dist-packages/numpy/core/include
5) 验证python接口
进行python环境,引入caffe包,如果没有报错,则安装成功!如下图:再可以exit()终结跳出。