Caffe 训练自有数据 | Cheney Shen

Technology blog

Caffe 训练自有数据

Tags: ,

走完这个就知道怎么去完整的使用caffe训练自己的数据了。

 
 

参考:

http://www.jianshu.com/p/607f1e51e3ab

http://blog.csdn.net/qqlu_did/article/details/47131549

 
 

步骤:

 
 

  1. 原始数据准备

存放目录下的原始数据


首先去下载,然后将train/detect分别放在不同的文件夹里面

然后通过Matlab来生成Label文件

文件格式为:【文件名 标签】注意train的标签必须是0开始,detect的标签全为0

 
 

  1. 用于处理的中间文件生成

 
 

首先执行


来转换数据格式,得到:


 
 

然后执行


来求mean,得到:


 
 

这边要注意的是上面两个文件的编写,主要就是修改路径和文件名。

 
 

  1. 建立网络模型和运行

 
 

首先要建立学习模型,就是编写 solver.prototxt/train_val.prototxt 两个文件。

可以去如下目录运用别人的学习模型考过来直接用。


这里同样要注意的是参数和路径的修改。

 
 

最后直接运行:

 
 

.\bin\compute_image_mean.exe .\data\img_train_lmdb .\data\mean.binaryproto

 
 

此句也要注意改路径。

 
 

打日志运行:


 
 

问题:

 
 

  1. 数据问题

 
 


 
 

是图片尺寸不对,不是 256*256

 
 

注意创建 db 数据的时候要开启resize, 默认是关闭的。

 
 


 
 

 
 

  1. 参数问题

     
     


 
 

test_iter: 100

 
 

这个要与test layer中的batch_size结合起来理解。mnist数据中测试样本总数为10000,一次性执行全部数据效率很低,因此我们将测试数据分成几个批次来执行,每个批次的数量就是batch_size。假设我们设置batch_size为100,则需要迭代100次才能将10000个数据全部执行完。因此test_iter设置为100。执行完一次全部数据,称之为一个epoch

 
 

test_interval: 500

 
 

测试间隔。也就是每训练500次,才进行一次测试。

 
 

base_lr: 0.01

lr_policy: “inv”

gamma: 0.0001

power: 0.75

 
 

这四行可以放在一起理解,用于学习率的设置。只要是梯度下降法来求解优化,都会有一个学习率,也叫步长。base_lr用于设置基础学习率,在迭代的过程中,可以对基础学习率进行调整。怎么样进行调整,就是调整的策略,由lr_policy来设置。

 
 

– fixed:   保持base_lr不变.

– step:    如果设置为step,则还需要设置一个stepsize, 返回 base_lr * gamma ^ (floor(iter / stepsize)),其中iter表示当前的迭代次数

– exp:   返回base_lr * gamma ^ iter, iter为当前迭代次数

– inv:   如果设置为inv,还需要设置一个power, 返回base_lr * (1 + gamma * iter) ^ (- power)

– multistep: 如果设置为multistep,则还需要设置一个stepvalue。这个参数和step很相似,step是均匀等间隔变化,而multistep则是根据 stepvalue值变化

– poly:    学习率进行多项式误差, 返回 base_lr (1 – iter/max_iter) ^ (power)

– sigmoid: 学习率进行sigmod衰减,返回 base_lr ( 1/(1 + exp(-gamma * (iter – stepsize))))

 
 

 
 

momentum :0.9

 
 

上一次梯度更新的权重,具体可参看下一篇文章。

 
 

type: SGD

 
 

优化算法选择。这一行可以省掉,因为默认值就是SGD。总共有六种方法可选择,在本文的开头已介绍。

 
 

weight_decay: 0.0005

 
 

权重衰减项,防止过拟合的一个参数。

 
 

display: 100

 
 

每训练100次,在屏幕上显示一次。如果设置为0,则不显示。

 
 

max_iter: 20000

 
 

最大迭代次数。这个数设置太小,会导致没有收敛,精确度很低。设置太大,会导致震荡,浪费时间。

 
 

snapshot: 5000

snapshot_prefix: “examples/mnist/lenet”

 
 

快照。将训练出来的model和solver状态进行保存,snapshot用于设置训练多少次后进行保存,默认为0,不保存。snapshot_prefix设置保存路径。

还可以设置snapshot_diff,是否保存梯度值,默认为false,不保存。

也可以设置snapshot_format,保存的类型。有两种选择:HDF5 和BINARYPROTO ,默认为BINARYPROTO

 
 

solver_mode: CPU

 
 

设置运行模式。默认为GPU,如果你没有GPU,则需要改成CPU,否则会出错。

 
 

 
 

 
 

 
 

 
 

 
 

 
 


One Comment

  • OMG! How do you even choose a favorite? Your talent is incredible girl and all the little one’s are just the cutest!!! My ultimate favs are 6. bella nina 13. newborn scale and 22. window lit2&g#8h30;but if I must choose one then I say 22. window light…And it’s all because of a feeling

Post a Comment

Your email address will not be published. Required fields are marked *

  • Categories

  • Tags