《Caffe windows 下进行(微调)fine-tune 模型》读书笔记

原文链接:Caffe windows 下进行(微调)fine-tune 模型

分类模型主要是针对ImageNet的数据集进行分类的,ImageNet是一个千万级的图像数据库,通常只能得到几千张或者几万张某一特定领域的图像,所以重新训练一个新的网络模型是比较复杂的,而且参数不好调整,数据量也不够,fine-tuning是一个比较理想的选择。

fine-tuning:在比人基于caffe训练好的模型的基础上,利用别人训练好的模型的权重参数值,通过训练自己的图片集,修改最后一层(即softmax)的参数和输出类别,即网络层的前面的层不变作为一个特征提取器,只改变最后一层作为一个分类器,最后的训练就相当于训练了一个适合自己需求的分类器。

微调网络,通常初始化的模型参数文件,不同于training from scratch,scrachtch指的是训练一个新的网络,在训练过程中,这些参数都被随机初始化,而fine-tuning,是可以在ImageNet上1000类分类训练好的参数的基础上,根据分类识别任务进行特定的微调。将ImageNet的输出的分类数1000,改为需求的分类数如6类图像的分类。

另外还需要将fc8层改名为自己的名字(如改为fc8-test),这样因为已训练好的模型中没有与新的层进行匹配的结果,因此就会以新的随机值初始化最新创建的层。以一个小型的网络模型CaffeNet为例,任务的变化可以表示为:

1.准备数据集

准备两个txt文件,生成list的形式。图像路径之后一个空格之后跟着类别的ID,如下,这里记住ID必须从0开始,要连续,否则会出错,loss不下降,按照要求写就OK。找了6类一共是600张图片,480张为train,120张为test,放在caffe-master/data/re/train和caffe-master/data/re/test。生成图像对应的train.txt和test.txt,接着生成对应的lmdb数据,把这些文件都放在caffe-master/examples/myfile路径下。这个是训练的图像label,测试的也同理。

2.计算数据集的均值文件

因为集中特定领域的图像均值文件会跟ImageNet上比较General的数据的均值不太一样,生成的过程可以参考之前caffe生成均值文件的步骤。最后生成的mean.binaryproto文件放在caffe-master/examples/myfile路径下。

3.调整网络层参数

参照Caffe上的例程,我用的是CaffeNet,首先在输入层data层,修改我们的source 和 meanfile, 根据之前生成的lmdb 和mean.binaryproto修改即可,最后一层的输出类别,也就是将deploy.prototxt文件中的最后的输出类别1000改为自己的输出类别,并且需要加快最后一层的参数学习速率。首先修改名字,这样预训练模型赋值的时候这里就会因为名字不匹配从而重新训练,也就达成了我们适应新任务的目的。

调整学习速率,因为最后一层是重新学习,因此需要有更快的学习速率相比较其他层,因此我们将,weight和bias的学习速率加快10倍。原来是fc8,记得把跟fc8连接的名字都要修改掉。

4.修改Solver参数

原来的参数是用来training fromscratch,从原始数据进行训练的,因此一般来说学习速率、步长、迭代次数都比较大,在fine-tuning微调只需要微微调整, 主要的调整有:test_iter从1000改为了100,因为数据量减少了,base_lr从0.01变成了0.001,这个很重要,微调时的基本学习速率不能太大,学习策略没有改变,步长从原来的100000变成了20000,最大的迭代次数也从450000变成了50000,动量和权重衰减项都没有修改,依然是GPU模型,网络模型文件和快照的路径根据自己修改

5.开始训练

首先你要从caffe zoo里面下载一下CaffeNet网络用语ImageNet1000类分类训练好的模型文件,名字是bvlc_reference_caffenet.caffemodel,这个模型可以去网上下载:http://dl.caffe.berkeleyvision.org/bvlc_reference_caffenet.caffemodel,训练的命令如下:

Build/x64/Realse/caffe.exe train –solver=examples/myfile/solver.prototxt –weights examples/myfile/bvlc_refference_caffenet.caffemodel –gpu 0

这里将它写成一个脚本文件(xxx.sh),在cygwin下直接运行该脚本文件就行,建议大家一开始的时候可以自己多手动敲的运行,这样可以加强你的熟悉程度,后面可以写成脚本,因为写成脚本很方便,运行的时候只需要敲一行代码就行。最后达到的性能还不错accuray 是0.9,loss降的很低,finetune时应该用自己的数据集生成的均值文件。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,针对你的问题,这里简单介绍一下如何使用caffe-ssd预训练模型进行目标检测。 caffe-ssd是基于caffe框架实现的单阶段目标检测算法,使用预训练模型可以加快模型训练的速度,同时也可以提高模型的检测精度。下面是使用预训练模型做目标检测的步骤: 1. 下载预训练模型 caffe-ssd官方提供了一些预训练模型,可以在这里下载:https://github.com/weiliu89/caffe/tree/ssd#models。选择适合自己数据集的模型进行下载。 2. 准备数据集 准备自己的数据集,包括训练集、验证集和测试集。数据集需要满足SSD数据格式要求,即每个样本需要有对应的标注文件,标注文件格式为:类别id、xmin、ymin、xmax、ymax(例如:0 0.1 0.2 0.3 0.4,表示类别为0,左上角坐标为(0.1, 0.2),右下角坐标为(0.3, 0.4))。 3. 修改配置文件 修改caffe-ssd的配置文件,将模型路径、数据路径、类别数等参数配置正确。其中,模型路径需要指定为下载的预训练模型路径。 4. 训练模型 使用修改后的配置文件训练模型。训练过程中可以调整学习率、迭代次数等参数,以达到更好的效果。 5. 测试模型 使用测试集对训练好的模型进行测试,并计算模型在测试集上的精度和召回率等指标。 以上就是使用caffe-ssd预训练模型做目标检测的基本步骤。需要注意的是,使用预训练模型虽然可以加速模型训练过程,但是如果数据集和预训练模型的差异较大,仍然需要进行微调

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值