一、 准备数据
https://pan.baidu.com/s/1i4Rn4hf 在这个地址下载图片和txt文件。
注:txt文件内容有误,请将标签改成0-3,而不是原来的4-7!
二、转换为lmdb格式
https://pan.baidu.com/s/1hrG0ccc 在这个地址下载两个bat文件,右键编辑生成lmdb文件夹.bat
D:\caffe\Build\x64\Release\convert_imageset.exe --resize_height=256 --resize_width=256 --shuffle --backend=leveldb E:\caffe\caffe\data\re\train\ E:\caffe\caffe\data\re\train.txt E:\caffe\caffe\examples\myfile\ilsvrc12_train_lmdb
根据你自己的实际地址修改, E:\caffe\caffe\data\re\train\ 是代表你放图片的文件夹,E:\caffe\caffe\examples\myfile\ilsvrc12_train_lmdb代表的是你要生成的文件夹的名字及存放的位置。
--backend=leveldb 千万不能删,在windows下,必须要转换成leveldb格式的,否则无法运行。
双击bat,生成文件夹。
三、计算均值并保存
编辑生成均值.bat同理,根据每个人存放的地址不同修改它。
四、创建模型并编写配置文件
模型用程序自带的caffenet模型,位置在 models/bvlc_reference_caffenet/文件夹下,caffe的模型一般有3个文件,train,solver,deploy。
solver是用来快速配置网络的,train里面是详细的网络架构。deploy用来推理的,所谓推理就是用训练完毕的caffemodel去预测(比如一张图片是否属于a)。
修改其中的solver.prototxt,最好改成绝对地址。
net: "examples/myfile/train_val.prototxt" test_iter: 2 test_interval: 50 base_lr: 0.001 lr_policy: "step" gamma: 0.1 stepsize: 100 display: 20 max_iter: 500 momentum: 0.9 weight_decay: 0.005 solver_mode: CPU修改train_val.protxt
name: "CaffeNet" layer { name: "data" type: "Data" top: "data" top: "label" include { phase: TRAIN } transform_param { mirror: true crop_size: 227 mean_file: "examples/myfile/mean.binaryproto" } data_param { source: "examples/myfile/img_train_lmdb" batch_size: 256 backend: LEVELDB } } layer { name: "data" type: "Data" top: "data" top: "label" include { phase: TEST } transform_param { mirror: false crop_size: 227 mean_file: "examples/myfile/mean.binaryproto" } data_param { source: "examples/myfile/img_test_lmdb" batch_size: 50 backend: LEVELDB } }
train下的meanfile 用train的均值文件,sourse即我们之前生成的lmdb文件夹。2个backend必须改为LEVELDB。
batch size *iter必须>=图片的数量。例如train的batch size*max iter(在solver中)最好大于等于图片的数量,test也是如此(solver中是test_iter)。
train和test最后的num_output改成4(即代表4个类别)。
新建bat文件,输入如下指令,就可以进行训练了
D:/caffe.exe train -solver examples/myfile/solver.prototxt
运行时间和最后的精确度,会根据机器配置,参数设置的不同而不同。用cpu运行500次,半天时间,精度为90多%。
测试:随便拿张图来验证。
新建一个list.txt ,里面包含4个数字,每个数字一行(对应的是网络的最后一个num_output),每一行对应一个标签,例如第一行的标签为巴士,则list里面可以写“巴士”,即list是将标签转化为你想看到的名字。
新建一个bat文件,输入
D:\caffe\Build\x64\Release\classification.exe D:\caffe\models\bvlc_reference_caffenet\deploy.prototxt E:\caffe\caffe\_iter_500.caffemodel E:\caffe\caffe\examples\myfile\mean.binaryproto E:\caffe\caffe\examples\myfile\list.txt E:\caffe\caffe\data\re\test\301.jpg
pause
caffemodel就是你之前训练完之后得到的文件,均值文件用训练是的均值文件。
双击运行,就可以得到这张图片的结果了。