caffe学习笔记18-image1000test200数据集分类与检索完整过程

使用Caffe进行图像分类与检索,通过微调预训练的blvc模型,将fc8层调整为10类,最终达到50%的准确率。尽管样本数量较少,但随着数据量增加,预期性能将显著提升。微调策略包括修改source、meanfile、层名、学习率等参数,并利用特定工具可视化训练过程。
摘要由CSDN通过智能技术生成
image1000test200数据集分类与检索完整过程:

1.准备数据:数据集图片分10个类,每个类有100个train图片(train文件夹下,一共1000),20个test图片(val文件夹下,一共200)

    首先准备自己的数据集(都是全路径),我们需要准备的文件有:
      1) 文件夹train:里面放训练的图片
      2 )文件夹val:里面放val的图片
      3 )train.txt :训练图片的文件名和对应的类别, 格式每一行文件名+ 空格 + label
      4) val.txt:测试图片的文件名和对应的类别

2.创建lmdb格式数据集
   在caffe安装的根目录下执行下面的脚本可以创建lmdb文件,用于caffe的数据输入;
   ./examples/image_test/create_imagenet.sh
   对于这个脚本,我们打开,根据自己的路径做更改;
   参考/home/nielsen/caffe-master/examples/image_test/create_imagenet.sh

3. 计算图像均值
   输入数据需要训练图片的均值图像(需要自己修改路径 路径最前面千万不要多加空格,血的教训)只计算训练集的均值,测试的时候减去的也是训练集的均值而不是测试集的
   ./examples/imagenet/make_imagenet_mean.sh

4. 配置网络结构文件(检查train和test不能同时用train_lmdb,会造成死锁卡在那)
   网络模型文件在models/bvlc_reference_caffenet/train_val.prototxt文件中,复制到image_test文件夹中(统一管理比较方便)
   这里我们直接使用caffe提供的这个网络结构,以后我们再根据自己的想法做更改。
   -----提供的数据为10类,则最后fc8层的num_output相应的改为10,即fc8为10个节点
   注意:需要打开这个文件,更改里面的路径
   我们对train_val.prototxt 修改后,路径:/home/nielsen/caffe-master/examples/image_test/train_val.prototxt

5. 配置训练参数文件(net路径也需要修改)
   训练参数文件在:models/bvlc_reference_caffenet/solver.prototxt中,复制到image_test文件夹中(统一管理比较方便)
   我们对solver.prototxt 修改后的参数如下:
   net: "examples/image_test/train_val.prototxt"
   test_iter: 4           # 测试的时候输入4个batch,
                                 # 说明:查看我们train_val.prototxt文件,发现batch_size: 50;我们的test图片是200张,200/50=4,所以
   test_interval: 1000    # 每迭代1000次,测试一次
   base_lr: 0.01             # 初始的学习率为0.01
   lr_policy: "step"      
   gamma: 0.1
   stepsize: 3000         # 每迭代3000次,调整一次学习率
   display: 20            # 每迭代20次,显示一次
   max_iter: 12000        # 最大迭代12000次
   momentum: 0.9         
   weight_decay: 0.0005
   snapshot: 5000         # 每迭代5000就存一次快照
   snapshot_prefix: "examples/image_test/caffenet_train"  # 快照存放路径
   solver_mode: CPU       # 选择模式CPU

6. 开始利用自己的数据训练网络(在caffe的根目录下执行)
   ./build/tools/caffe train -solver=/home/nielsen/caffe-master/examples/image_test/solver.prototxt

   训练过程中,可以看到正确率在不断提升;最后的准确率是50%;
   我们的样本数很少,当图片到百万数量级的时候,效果会很大提升;


7. 改变策略,使用blvc model微调

    fc8层的输出节点改为10个,数据只有10类,用已经训练好的1000类进行微调(变动的层fc8需要改名字,不然还是原来的参数)

  (学习率:最后一层fc的lr_mult改为10,20 且 降低base_lr为0.001)
   caffenet结构的输出层的类别数一定要大于我训练集的类别数才可以收敛!
   比如原来我把图像类别的label设置成1,2,3,改成0,1,2后,最后全连接层的转出改成3就OK了。
   ./build/tools/caffe train -solver examples/image_test/solver10.prototxt -weights examples/image_test/caffenet_train_iter_5000.caffemodel
   微调参考:
1)we will change the name of the last layer form fc8 to fc8_flickr in our prototxt, it will begin training with random weights.
2)decrease base_lr(初始学习率,在train_val.protxt文件值中) and boost the lr_mult(局部学习倍率,conv和fc层才有) on the newly introduced layer(fc8_flickr).
3)set stepsize(solver.prototxt,迭代多少次就下降一次学习率) to a lower value. So the learning rate to go down faster
4)So in the solver.prototxt,we can find the base_lr is 0.001 from 0.01,and the stepsize is become to 20000 from 100000.(重要)
          base_lr: 0.001~0.01 降低,基础学习率降低,不然太快的话loss会变成non
          lr_mult: w:10,b:20 增大,最后一个fc层(分类层)的局部学习率 
          stepsize: 20000~100000 降低,迭代多少次就调整一次学习率

   

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值