1、caffe配置
环境:caffe+win10+VS2013+cuda7.5+cudnn5.0
caffe:https://github.com/Microsoft/caffe
cuda:https://developer.nvidia.com/cuda-toolkit-archive
吸取了之前装matconvnet的经验,将cudnn的文件复制到了cuda7.5相应的文件夹里面
上面的工具都安装好之后,用VS2013打开caffe-master\windows\Caffe.sln
编译的时候VS会自动下载各种依赖库,需要一些时间,网上有网友提供了百度云盘链接
虽然碰到了一些问题,但是网上都有网友提供了解决方案,配置花了大半天的时间
参考:
http://m.blog.youkuaiyun.com/article/details?id=52438612
2、向caffe导入数据
期末考试的作业是训练mnist数据,提高识别率,老师给的数据,已经将各类图像路径与label放在一个txt文件里面分好了。
convert_imageset的作用是将原始数据转换为caffe的lmdb或者leveldb格式的文件,(我这里所有的操作都不是运行脚本文件,而是直接修改相关的cpp文件)convert_imageset.cpp文件里面main的argv路径
compute_image_mean的作用是生成mean.binaryproto文件,修改compute_image_mean里面main函数的argv路径,特别奇怪db->Open(argv[1], db::READ);会报错,没有在网上找到有效的解决方法,想到既然是lmdb打开出错,那我直接在生成lmdb的时候生成mean.binaryproto不就可以了,然后将生成mean.binaryproto的代码拷贝到convert_imageset.cpp的后面,成功生成mean.binaryproto文件。
用来训练的网络用的是caffe-master\examples\mnist\里面的lenet
caffe的作用是训练网络,给solver添加网络lenet_solver.prototxt的路径,注意修改lenet_solver.prototxt文件里面net和snapnet的路径,修改lenet_train_test.prototxt文件里面训练数据和测试数据的路径,训练完网络,可以在log文件里面看到识别率。
classification的作用是利用训练好的网络对图像进行分类,训练好网络之后,修改classification.cpp的main函数的argv路径,就可以对指定的图像进行分类。需要注意一下,classification用的网络得是deploy的,也就是caffe-master\examples\mnist\lenet.prototxt,特别需要注意的是shape: { dim: 64 dim: 1 dim: 28 dim: 28 }里面的参数,我按照默认的,loaf网络网络的时候失败,调试才发现刚好差三倍,把shape的第二个参数从1改成3之后就通过了,可是看原始图像明明是8位灰度的,想不通。。。
deploy和solver可以具体参考这个http://blog.youkuaiyun.com/lanxuecc/article/details/52474476
整个过程描述起来很简单,but实际调试又花费了大半天的时间。
老师给的数据识别率用现成的网络能够达到0.992,but只能给及格分。。。嗯,先就酱紫,寒假的时候再集中时间具体研究一下caffe,看一些相关论文,看能不能再提高一些。