斯坦福公开课-深度学习计算机视觉说到caffe用来训练一个基本的深度网络模型,改几个配置文件就好了,不用写代码!当时,我就震惊了!赶紧试试。
caffe训练深度网络模型
caffe训练深度神经网络不需要写代码,听上去是挺好的,但只是一个噱头。如果不写代码,caffe里面很多东西就不能自己更改,而且为了符合caffe的程序,达到训练深度网络模型的效果,caffe对输入输出会有严格要求,比如,想要定义自己网络层layer结构,使用自己的求解算法,这时候不自己写代码,基本不可能实现;caffe训练网络时,会要求你的样本有训练集和测试集,而且分类和标签都有严格规定,否则直接报错,不让你训练模型。
当然如果你只是想要用caffe做做简单实验,你可以用本文的方法试试,我不保证测试的正确率会高哦。
下面以 训练AlexNet模型用于图片二分类 为例,具体讲解不写代码的整个caffe训练(train)、测试(test)过程。
caffe训练深度神经网络的前期准备
前面说到,caffe训练深度神经网络如果不写代码,需要修改几个配置文件,所以一些前期工作还是要做的。
- 准备样本,也就是train样本(训练样本)。样本主要用来训练和测试,需要该样本有标记。需要注意的是,如果是对图片进行多分类,则每一类样本的数量比例最好1:1。
- 准备caffe源码,这里提供的是windows版本。
- 编译好caffe,如果还没有配置成功的,请移步这里。
- 当然还得有深度学习的基本知识,要不然几个配置文件还是看不懂的。
caffe训练的大致流程
- 将整个train样本分为train数据集和test数据集两个数据集。这里的train样本必须是有标记的,如果你已经有了train样本和test样本(test样本也必须有标记),可以直接将其作为train数据集和test数据集。
- 将train数据集和test数据集分别转化为对应的lmdb数据集(或者leveldb数据集,这两种数据库的区别是lmdb读取快,但是占用空间大)。
- 分别计算train数据集的均值,另存为.binaryproto均值文件。(AlexNet需要这个,有一些其他模型似乎不需要,如GoogLeNet)
- 修改模型的网络结构文件train_val.prototxt文件,添加lmdb数据集和均值文件的路径。(这个文件后面会说的)
- 修改模型的solver.prototxt,该文件包含一些超参数的设置,如迭代次数、学习率设置,以及网络结构文件的路径设置和是否使用GPU加速等。
- 使用编译好的caffe.exe进行模型训练和测试。
- 附加:使用classification.exe对未知标签的样本进行分类。
以上是基本流程,数值计算和模型训练基本上都要在cmd命令行下操作。下面是详细的过程
准备样本
很多人都有一些标注好的样本,而且已经分好了,但你如果不写代码就想用caffe来训练模型,那你的样本说不定得重新分,因为官方的caffe对样本的划分有自己的要求;如果不想重新划分样本,那还是写代码吧!
学过机器学习的人都知道,样本的重要性,这里我就只想强调一下:真的非常重要!
其实样本严格划分的作用在后面的配置文件修改中会有体现,本来应该先看看配置文件的,但为了一套流程的完整,还是先从样本准备开始说起。(再次提醒:这里的任务是对图片进行二分类,多分类是类似的)
- caffe训练时,需要有两个图片数据集分别用于训练和测试,这里就简称为train集(训练集)和test集(测试集),分别对应于train文件夹和test文件夹。
- train文件夹里面必须包含有所有类别的图片,且每一类的图片数量比例最好保持或者接近1:1,test文件夹也一样。train文件夹的图片应该要比test文件夹的多一些,我设置的比例一般为4:1,这个可以自己设置,但是train集至少应该比test集大几倍,而且这两个数据集不应该有重叠,test文件夹的图片不能在train文件夹出现,对train文件夹也是如此。
- 这两个数据集里的每一张图片必须要有标签,而且train集和test集分别对应一个标签文件,所以,还得有两个标签文件train.txt、test.txt。标签文件放在与train、test文件夹同目录下,就是为了好看、直观,如下所示:
- 标签文件test.txt和train.txt里面的标签定义,也有要求。图片和标签之前以空格分开,必须是空格哦,本人试过tab间隔符,不行!这跟头栽的。每个图片只占一行,空格前面是图片名,图片名必须顶格,空格后面是标签(一般的标准数据集会提供标签,如果没有,那你就手动标注吧,研一都干过这事:),如下图,我的命名:
train文件夹里面的图片必须和train.txt里面的图片对应好,test文件夹也一样。
图片和标签文件都弄好后,就可以进行下一步了。(推荐大家使用NotePad编辑标签文件,不要使用window自带的记事本)
转换图片格式
很多人就要问了:caffe不能读取原始的.jpg和.png格式图片吗?答案是可以的,但是这种格式的图片不能作为caffe训练神经网络的输入,输入只能使用固定的格式:lmdb、leveldb(这其实是两种数据库)。于是我们就要转换图片格式。以train文件夹里的图片为例.
- caffe提供转换图片为指定格式的命令,在windows系统下,就是一个.exe文件,名字是convert_imageset.exe,这个文件在编译好的caffe目录下,具体路径为D:\caffe\tools\Release\目录下(这个目录是用我前一篇博客的方法编译出来的,如果不是按照我之前的方法,可能这个exe文件不在该目录下)
- 打开cmd命令行窗口(程序员不会用cmd?赶紧改行,OK?),跳转到D:\caffe\tools\Release\目录下,也就是convert_imageset.exe所在的目录,然后敲下命令
convert_imageset.exe -backend leveldb -resize_height 227 -resize_width 227 D:\image\train\ D:\image\train.txt D:\output_lmdb\train_lmdb
上面是将图片转换为leveldb格式,但我常用的是lmdb格式,如果不加上“-backend leveldb”,默认就是转换为lmdb格式。所以命令改为:
convert_imageset.exe -resize_height 227 -resize_width 227 D:\image\train\ D:\image\train.txt D:\output_lmdb\train_lmdb
后面的”-resize_height 227 -resize_width 227”是将图片大小重新设置为227x277ÿ