caffe训练自己的数据分为四步:
1、图片数据集准备
2、网络训练所需数据格式 lmdb / leveldb 转换
3、图像均值文件计算
4、网络训练
具体过程如下:
一、图片数据集准备
图片数据收集一般是十分耗时的,为简便说明,此处使用两类数据进行训练过程介绍。一类是background,一类是object。对于样本图片需要说一点,就是一定要归一到同一尺寸,一般是网络输入尺寸。
二、网络训练所需数据格式lmdb / leveldb转换
数据格式转换需要以下几个条件:1、由caffe windows编译出的convert_imageset.exe;2、样本图片数据集准备;3、样本图片对应的标签文件;4、确定所要转换的数据格式是leveldb还是lmdb
caffe windows编译convert_imageset.exe方法此处不做赘述,配置caffe windows时即已完成。<<<PS:需要注意的是在编译convert_imageset.exe时,要将参数shuffle设定为true!!!>>>
样本图片数据集准备需要注意:可以将所有类别样本图片直接放置于同一文件夹下,也可以按类别放置在不同的子文件夹下,为避免麻烦,建议新建文件夹,命名为train,若样本数据数量较少,则可直接将所有样本图片放置于train文件夹内,若样本数据集数量较多,则可按类型在train文件夹内新建子文件夹,按样本类型分别放置于子文件夹内<<<PS:在图片数据集较大时,设置子文件夹存储不同类型图片会在数据转换阶段节省大量时间,所以在此建议应优先考虑将不同类型样本集分子文件夹存储>>>。
样本图片对应的标签文件一般为train.txt,若所有类别样本图片均在同一文件夹train内,则train.txt内数据保存格式为:文件名+空格+标签(background0.jpg 0),如下:
若样本数据按类别放置于不同子文件下,则在train.txt内数据格式中,文件名应包含文件的相对路径,一般为:子文件夹名/文件名+空格+标签(background/background0.jpg 0)。如文章:http://blog.youkuaiyun.com/u012878523/article/details/41698209中介绍train.txt数据格式为:
转换数据格式的方法为:convert_imageset.exe RootFolder/ ListFile DB_Folder [FLAGS]
RootFolder为数据集所在根目录,ListFile即为上述train.txt,DB_Folder为生成数据文件路径
如上图,此步结束后,会在数据集根目录下生成mt文件夹,内包含data.mdb以及lock.mdb两个文件,即为转换所得lmdb格式数据文件。
三、图像均值文件计算
图像均值文件计算需要以下内容:1、由caffe windows编译出的compute_image_mean.exe;2、上一步得到的lmdb格式数据文件
方法为:compute_image_mean.exe DB_Data binaryprotoFile。DB_Data即为上一步所得数据文件,binaryprotoFile即为即将得到的均值文件<<<PS:图像均值文件的尺寸需与lmdb数据中的尺寸一致>>>
此步完成后,会在图像数据集根目录生成myself_mean.binaryproto文件,这就是caffe所需要的图像均值文件
四、训练网络
我用了caffeNet,所以需要把caffeNet里相关的三个文件拷贝过来,即:deploy.prototxt、solver.prototxt以及train_val.prototxt
修改train_val.prototxt文件中的训练数据源路径source至自己的数据源、均值文件mean_file为自己的均值文件以及测试数据源路径source与均值文件mean_file,另需将网络最后一层输出个数改为2,因为此处训练两类数据。
修改solver.prototxt文件中的net 值,保证根据其路径能找到train_val.prototxt文件,同理修改snapshot_prefix值。其他参数按需调整。
训练网络:.\bin\caffe.exe train --solver=../train_val.prototxt
最终得到caffemodel文件