本文是第一次在Ubuntu 16.04上安装Caffe(CPU Only)的过程。主要参考了以下链接:https://blog.csdn.net/nwsuaf_uestc/article/details/80182976
https://blog.csdn.net/muzilinxi90/article/details/53673184
https://blog.csdn.net/hemancute/article/details/80206853
一、安装依赖库
首先执行以下命令
sudo apt-get update
安装caffe之前需要安装一些依赖库:
注意:输入下面的每一条代码时,不要急着回车,否则,会出现“中止”的问题。
解决方法:不要直接复制粘贴后回车,等几秒之后再回车。
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
sudo apt-get install --no-install-recommends libboost-all-dev
二、下载caffe
可直接使用Git下载caffe,如果没有Git,请先安装Git,作者新装的Ubuntu16.04没有Git,所以先安装Git,执行如下语句:
sudo apt-get install git
安装结束后下载caffe,执行以下命令:
git clone git://github.com/BVLC/caffe.git
这样你就可以在根目录下看到有个caffe目录了
三、编译caffe(均在caffe目录下运行)
1.进入caffe目录
cd caffe/
2.生成Makefile.config文件,这里是将caffe目录下自带的Makefile.config.example文件复制一份并更名为Makefile.config,命令如下:
cp Makefile.config.example Makefile.config
此时目录下就会有Makefile.config文件
3.修改配置Makefile.config 文件
1)编辑Makefile.config文件:
sudo gedit Makefile.config
或者直接进入文件内打开文件进行修改。
2) 去掉CPU_ONLY前面的#号
使得CPU_ONLY := 1
3)配置引用文件路径(主要是HDF5的路径问题)
原来的路径配置如下图:
修改为如下图:
新增的内容为:
/usr/include/hdf5/serial
/usr/lib/x86_64-linux-gnu/hdf5/serial
4.在Makefile文件的第181行,把 hdf5_hl 和hdf5修改为hdf5_serial_hl 和 hdf5_serial,也就是把下面第一行代码改为第二行代码。
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m
变成
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial
5.执行编译
make all 若出现错误,要用make clean之后再编译
make test
make runtest
编译完成之后出现如下界面:
四 、编译Python接口
1.安装pip以及numpy:
sudo apt-get install python-pip
sudo apt-get install python-numpy
2.安装python接口依赖库:
1)在安装依赖库前,需要先安装gfortran编辑器:
sudo apt-get install gfortran
然后安装依赖库,首先进入caffe目录下的python文件中:
cd caffe/python
最好先升级一下pip
pip install --upgrade pip
安装依赖库(时间较长):
for req in $(cat requirements.txt); do sudo pip install $req; done
可能会出现:
问题一
之后,这一步可能会出现问题:
解决的方法是(若无此问题,则跳过):
pip install --upgrade pip
问题二
可能还会出现另一个错误(若无,则忽略)
升级了pip,再次使用pip 安装相关的python包的时候就出现以下错误:
ImportError: cannot import name main
解决:pip文件在usr/bin目录下,cd进去。
cd /usr/bin
sudo gedit 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
可能会出现:
问题三
Could not install packages due to an EnvironmentError: [Errno 13] 权限不够: '/usr/local/lib/python2.7/dist-packages/cloudpickle-0.6.1.dist-info'
Consider using the `--user` option or check the permissions.
在caffe目录下的python文件中,打开requirements.txt
权限不足,在安装时要在install后加上 “ –user”
发现需要重新安装scikit-image
因此,使用pip命令来进行权限安装
pip install --user scikit-image
之后还有类似的权限不足情况,又重新安装了
pip install --user ipython
pip install --user python-dateutil
再执行一次:
for req in $(cat requirements.txt); do sudo pip install $req; done
问题四
pandas 0.23.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已经安装为2.7.3版本。
仍在caffe目录下的python文件中,打开requirements.txt
sudo gedit requirements.txt
将该句
python-dateutil>=1.4,<2
版本号掉,不加版本号默认为最新的版本
python-dateutil
然后
:/home/xxx/caffe/python#
sudo pip install -r requirements.txt
搞定。
2)指定iPython版本
sudo pip install ipython==5.3.0
安装完后,执行下面一条语句,该语句的作用是检查依赖库是否都已经安装成功,如果成功会显示requirement already saitisfied,如果未成功会继续安装:
sudo pip install -r requirements.txt
3.添加环境变量:
打开配置文件bashrc:
sudo gedit ~/.bashrc
或者直接打开该文件也可以,在文件的最后面添加:
export PYTHONPATH=/home/xxx/caffe/python:$PYTHONPATH
XXX为Username
结果如下:
保存文件后关闭,然后输入下面语句,使环境变量生效:
source ~/.bashrc
4.编译python接口:(在caffe目录下)
make pycaffe
编译完后,若无错误提示,则说明编译成功。
5.验证python接口:
进入python环境:
python
引入caffe包:
import caffe
若出现问题:
>>>import caffe
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named caffe
原因在于环境变量的添加出错。
如果引入caffe包无其他显示,如下图所示:
说明python接口编译成功,至此整个caffe安装编译的过程就全部结束了。
五 、测试
运行MNIST:
1.按照官网先准备数据集:
cd caffe/ #将终端定位到Caffe根目录
./data/mnist/get_mnist.sh #下载MNIST数据库并解压缩
./examples/mnist/create_mnist.sh #将其转换成Lmdb数据库格式
2.编辑lenet_solver的solver_mode模式从GPU改为CPU:
vim ./examples/mnist/lenet_solver.prototxt
#改为solver_mode: CPU
3.训练模型
cd $CAFFE_ROOT
./examples/mnist/train_lenet.sh
能训练了,打印训练参数网络结束后却提示:已放弃,核心已转存
这时候只需要在./example/mnist/train_lenet.sh前加个sudo就解决问题了
4.训练结果