一.caffe安装流程:
1、下载并安装依赖项。
2、将anaconda/cuda等路径加入你自己用户的bash信息:
执行vim ~/.bashrc.
修改如下:
# User specific aliases and functions
exportPATH=/usr/local/cuda/bin:/usr/bin/anaconda2/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64${LD_LIBRARY_PATH:+:
${LD_LIBRARY_PATH}}:/usr/bin/anaconda2/lib
exportPKG_CONFIG_PATH=/usr/bin/anaconda2/lib/pkgcondig:$PKG_CONFIG_PATH
exportCUDA_HOME=/usr/local/cuda
保存修改后source ~/.bashrc
3. 下载caffe(https://github.com/BVLC/caffe)并解压(也可在服务器已有的目录下拷贝)
4、进入caffe目录(cd caffe)
执行 cp Makefile.config.example Makefile.config
vim Makefile.config
进入文档后执行如下操作:
1)开放USE_CUDNN
2)注释CUDA_ARCH后三行,新版不支持
3)修改BLAS为mkl
4)将所有Python依赖项的默认引用库注释掉,去掉ANACONDA依赖项前的注释,引用Anaconda,修改ANACONDA_HOME为/usr/bin/anaconda2(此处为自己的anaconda路径),并将PYTHON_LIB进行如下修改。
5、编译make all,等待安装完成
二.执行手写数字示例流程:(在caffe目录下执行)
1、下载mnist数据集:
执行cd data/mnist
./get_mnist.sh
2、转换mnist数据集格式为LMDB格式(先返回caffe目录下)
执行 ./examples/mnist/create_mnist.sh
3、训练模型
执行
./build/tools/caffetrain --solver=examples/mnist/lenet_solver.prototxt
4、测试(识别手写数字)
执行./build/examples/cpp_classification/classification.bin
得:
为方便看,改写为如下格式:
$./build/examples/cpp_classification/classification.bin
Usage:./build/examples/cpp_classification/classification.bin
deploy.prototxt // 模型描述文件
network.caffemodel // 模型权值文件
mean.binaryproto //图像均值文件
labels.txt // 图像类别标签信息
img.jpg // 输入待分类图像
接下来准备这几个文件:
1)模型描述文件(将lenet_train_test.prototxt复制一份修改如下)
cp./examples/mnist/lenet_train_test.prototxt ./examples/mnist/classificat_net.prototxt
vim./examples/mnist/classificat_net.prototxt
// 将训练和测试用的mnist层删除,添加以下层
name: "LeNet"
layer {
name: "data"
type: "Input"
top: "data"
input_param { shape: { dim: 1 dim: 1 dim: 28 dim: 28 } }
}
......
// 中间的模型不改动,省略
......
// 将accuracy层和loss层删除,添加以下层
layer {
name: "prob"
type: "Softmax"
bottom: "ip2"
top: "prob"
}
2)权值描述文件
训练好网络后examples/mnist/目录下就会会有lenet_iter_10000.caffemodel这个文件。
3)图像均值文件
Caffe框架为我们提供了一个计算均值的文件compute_image_mean.cpp,放在caffe根目录下的tools文件夹里面。编译后的可执行体放在 build/tools/ 下面,我们直接调用就可以了。
执行build/tools/compute_image_meanexamples/mnist/mnist_train_lmdb examples/mnist/mean.binaryproto
带两个参数:第一个参数:examples/mnist/mnist_train_lmdb,表示需要计算均值的数据,格式为lmdb的训练数据;第二个参数:examples/mnist/mean.
binaryproto,计算出来的结果保存文件。
4)标签文件(新建label.txt,每行一个数字,0到9)
执行 cd ./examples/mnist
vim label.txt
5)输入待分类图像(此处我是用画图工具画的并导caffe/examples/mnist/目录下)
6)开始测试(cd到caffe目录下)
./build/examples/cpp_classification/classification.bin \
examples/mnist/classificat_net.prototxt \
examples/mnist/lenet_iter_10000.caffemodel \
examples/mnist/mean.binaryproto examples/mnist/label.txt \
examples/mnist/3.png
测试结果如下(结果显示图片中数字为5,此处识别错误):