finetuning :是一种 迁移学习(Transfer Learning)方法 , 在别人训练好的网络模型基础上进行训练。
步骤 :
1 准备数据,
2 生成lmdb/leveldb格式 ,最好打乱顺序(shuffing),也可以用原始bmp、jpg格式
命令行示例:
SET GLOG_logtostderr=1
convert_imageset.exe -backend=leveldb -shuffle -resize_height=256 -resize_width=256 ./ DATA\test\Sample_Info.txt DATA\test\test_leveldb 0convert_imageset.exe -backend=leveldb -shuffle -resize_height=256 -resize_width=256 ./ DATA\train\Sample_Info.txt DATA\train\train_leveldb 0
pause
3 计算均值
命令行示例:
compute_image_mean -backend=leveldb DATA/train/train_leveldb DATA/train/mean.binaryproto
pause
4 修改_solver.prototxt、_train_val.prototxt 、deploy.prototxt。
_train_val.prototxt ,修改全连接层的名字,已达到重新学习该层的目的,并且deploy.prototxt的全连接层也对应修改;
适当提高全连接层的学习率;
5 开始 finetuing
命令行示例:
caffe train --solver=MODEL\fine_tuing_solver.prototxt --weights=MODEL\bvlc_reference_caffenet.caffemodel
pause
NOTE:
1 在caffe中固定某些网络参数,只训练某些层可以将具体层的lr_mult设置为0;
2 如果将propagate_down 设置为 0 ,该层不会向前传播,因此前面层参数将不会更新;