caffe 学习之 Fine-tune

来源:互联网 发布:台风战斗机知乎 编辑:程序博客网 时间:2024/06/05 22:32

主要参考caffe官网教程:http://caffe.berkeleyvision.org/gathered/examples/finetune_flickr_style.html 以下对整个实验进行介绍:

Fine-tuning原理:所谓fine-tuning就是用别人训练好的模型,加上自己的数据,来训练新的模型。由于在自己的分类任务中很难拿到大量的训练数据,会导致所训练模型的准确率较低,同时还会导致过拟合和收敛性的问题产生。因此我们采用在较大的数据集上例如Imagenet上已经训练好的模型来训练(微调)我们的网络,具体在caffe上进行Fine-tuning分为如下几步:

(1)数据集准备

(2)定义net:train—val.prototxt

(3)定义solver:solver.prototxt

(4)在预训练的权重基础上进行训练

Imagenet数据集1000个类别,而我们要训练的Flickr数据集只有20个类别,因此我们通过修改prototxt文件中模型的最后一层的名字,来保证不与该文件中的层名字相同,在重新训练的过程中就会对参数进行重新初始化。

在caffe根目录下执行以下脚本,就可以下载包含2000张图片的数据集,同时将该数据集分为train和test两部分,并生成相应的标签文件:存放于目录data/flickr_style


我们需要已经在ImageNet上训练好的模型,可以通过以下脚本获取模型文件:

定义net

微调参数时,保存net的prototxt文件可以直接复制预训练时使用的train_val.prototxt(/models/bvlc_reference_caffenet)然后进行以下修改:

(1)修改TRAIN和TEST的data层(修改层名字+指定标签文件路径)

(2)修改output层(层名字/输出类别数目/10x参数学习速率)


(3)调整solver的参数配置,通常学习速率/步长/迭代次数都要适当减少

(4)启动训练,加载与训练模型的参数文件,在caffe根目录下执行以下脚本: