在Windows下安装caffe遇到好多奇奇怪怪的问题,于是转战Ubuntu,比windows下要简单很多。
本篇博文主要讲解快速搭建caffe环境:
电脑系统:ubuntu 16.04
1、安装caffe所需要的依赖库
Caffe的所有依赖包都可以使用apt-get大发搞定。
#在Ubuntu下如果没有使用root账号,则每个命令前需要加sudo。
$ sudo apt-get install git
$ 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
$ sudo apt-get install python-dev
$ sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
2、下载caffe源码
我的caffe源码下载到home目录下
$ cd ~
$ sudo git clone https://github.com/bvlc/caffe.git
$ cd caffe
下载完成后可以看到caffe的源码包如下:
3、配置Make.config文件
caffe文件解压后,文件夹下面有一个Makefile.config.example文件,我们需要将这个文件复制一份并重命名:Make.config 。
$ sudo cp Makefile.config.example Makefile.config
然后我们打开这个文件,可以看到如下内容:
4、编译
方案一:
(1)在完成Make.config配置后,我们输入命令:
$ make -j
进行caffe源码编译.这一步有可能遇到如下错误:
- 错误1 caffe/proto/caffe.pb.h: No such file or directory
如果出现这个错误,那么输入命令:
然后在进行make -j就可以了
- 错误2 hdf5.h: No such file or directory
① 在Makefile.config的95行添加/usr/include/hdf5/serial/ 到INCLUDE_DIRS也就是把下面第一行代码改为第二行代码
- 1
- 1
② 在Makefile文件的第173行,把 hdf5_hl 和hdf5修改为hdf5_serial_hl 和 hdf5_serial,也就是把下面第一行代码改为第二行代码。
- 1
然后在进行make -j就可以了
(2)编译成功后编译python接口,输入命令
- make pycaffe
这个文件夹下面的工具可是个好东西啊,以后我们会经常用到这些可执行文件,最常用的就是可执行文件:caffe,我们只要调用这个工具,就可以进行训练。
- 错误1 numpy/arrayobject.h No such file or directory
如果出现这个错误,那么输入命令:
sudo apt-get install python-numpy
方案二:直接采用cmake:
5、训练
安装完了,自然要测试一下能不能用咯。首先cd到caffe目录,然后输入命令:
把lenet_solver.prototxt里面的solver_mode 改为 CPU。因为我们还没装GPU,暂时只使用CPU就好了。
./data/mnist/get_mnist.sh下载MNIST数据集,下载完成后,在data/mnist下会出现四个文件:
t10k-images-idx3-ubyte 测试图片数据
t10k-labels-idx1-ubyte 测试标签
train-images-idx3-ubyte 训练图片数据
train-labels-idx1-ubyte 训练标签
因为下载完的数据为二进制文件,需要转换为LEVELDB或LMDB才能被caffe识别,因此执行./examples/mnist/create_mnist.sh 生成
可以通过修改create_mnist.sh中的BACKEND="lmdb"或者BACKEND="leveldb"来选择生成数据格式。
执行完create_mnist.sh以后,在examples/mnist下生成两个文件夹mnist_train_lmdb和mnist_test_lmdb两个目录,每个目录下都有两个文件data.mdb和lock.mdb,顾名思义,mnist_train_lmdb就是生成的LMDB格式的MNIST数据集,mnist_test_lmdb则为LMDB格式的测试集。
然后我们运行脚本:
这个时候,如果成功的话,就会开始跑起来
训练完成以后,会在mnist文件夹下生成lenet_iter_10000.caffemodel
7、测试
利用训练好的模型权值文件(examples/mnist/lenet_iter_10000.caffemodel)可以对测试数据集(或外部测试集)进行预测,运行如下命令:
$ ./build/tools/caffe test \
-model examples/mnist/lenet_train_test.prototxt \
-weights examples/mnist/lenet_iter_10000.caffemodel \
-iterations 100
命令行解释:
- ./build/tools/caffe test, 表示只做预测(前向传播计算),不进行参数更新(后向传播计算)
- -model examples/mnist/lenet_train_test.prototxt, 指定模型描述文件文件
- -weights examples/mnist/lenet_iter_10000.caffemodel, 指定模型预先训练好的权值文件。
- -iterations 100,指定测试迭代次数。参与测试的样例数目为(iterations * batch_size),batch_size在model prototxt中设定,为100时正好覆盖全部10000个测试样本。