一、引言
一直以来就很纠结finetune,其意思就是已知别人已经训练好的的模型和网络结构,自己的数据较小,而任务基本相同,想在其基础之上进行训练成自己的模型,这样,弥补了自己数据量小的缺点,也即是微调。这样,要应用已训练好的模型进行初始化进行训练,并且应用其网络结构。
二、步骤
1.准备数据,我们还用上面博客所提提供的五类数据,不过,要将32×32,修改成256×256以满足我们下面要使用的网络结构。
2.下载model参数
可以直接在浏览器里输入地址下载,也可以运行脚本文件下载。下载地址为:http://dl.caffe.berkeleyvision.org/bvlc_reference_caffenet.caffemodel
文件名称为:bvlc_reference_caffenet.caffemodel,文件大小为230M左右
将该模型保存于caffe/examples/下面新建立一目录testFinetune
,为了代码的统一,将这个caffemodel文件
3.下载均值文件
在终端执行下面脚本:
./data/ilsvrc12/get_ilsvrc_aux.sh
获得到均值文件:imagenet_mean.binaryproto
将其文件COPY至caffe/examples/下面新建立一目录testFinetune
4.COPY和修改网络配置文件和超参数文件,还有预测所使用文件
将caffe/models/bvlc_reference_caffenet下面的deploy.prototxt、solver.prototxt和train_val.prototxt三个文件COPY至caffe/examples/下面新建立一目录testFinetune,并修改
这个 和前面博客基本思想是一致的
这里就不再详述了。
5.训练,微调finetune,
这一步重要
在caffe目录下执行:
./build/tools/caffe train -solver examples/testFinetune/solver.prototxt -weights examples/testFinetune/bvlc_reference_caffenet.caffemodel -gpu 0
关键是-weights参数,是训练好的模型作参数进行初始化
训练效果非常好
6.预测
a.终端测试
在终端的caffe目录下执行:
python python/classify.py --print_results --model_def examples/testFinetune/deploy.prototxt --pretrained_model examples/testFinetune/my_mode_iter_5000.caffemodel.h5 --labels_file examples/testFinetune/mylabel.txt --center_only examples/testFinetune/329.jpg foo
b.python代码测试
小结:
finetune效果确实极好!