1.微调原因
数据不够,容易过拟。也可以是需要添加新数据源。
2.如何微调:
- 修改train_val.prototxt文件(网络文件),solver.prototxt(训练文件)
- cmd中运行
caffe % ./build/tools/caffe train -solver models/finetune_flickr_style/solver.prototxt -weights models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel -gpu 0
3.以GoogLeNet为例
1.下载GoogLeNet的caffemodel,地址:GoogLeNet,请自行下载。如果想用其他的Model,去Model Zoo里自行下载。
2.修改train_val。必须要改的是net的地址以及base_lr,其他都随意。base_lr我把他改成了0.0005.
3.修改train_val.prototxt。
(1)改source
(2)FC层(type: “InnerProduct”)的name,以及将num_output,改成你需要的类别数量,(因为这层的结构有变化,修改名字等于权值全部重置),同时将此层的lr_mult,增加10倍(不增加也行,增加了快点)。
4.修改deploy.prototxt
测试的时候网络每层的名字要一样,因为上面我们改了train_val.prototxt中FC层的名字及输出个数,这里的全都要改。
5.caffe train -solver $root/solver.prototxt -weights $root/bvlc_googlenet.caffemodel -gpu 0
坐等微调结束。
3.1可能出现的问题
- loss:87.3365。
降低train_val的base_lr。 - loss不下降停在一个loss。
可能原因(1)迭代次数不够。(2)base_lr过大,降低base_lr即可。 - 训练模型loss下降的很好,Val中测试精度也很高,但是用图片分类时,结果不行。
depoly最后一层fc名字要和train_val中你改的最后一层名字一样