caffe-windows:finetune

http://blog.csdn.net/qq_26898461/article/details/50540801

http://blog.csdn.net/qq_26898461/article/details/50445392

index.py:爬虫下载百度图片

data_process.m:对数据进行预处理,挑出三通道数据,并改变数据到256*256大小。
原始数据文件: raw_data
转换完数据文件: data_example

train_test.m:对转换完的数据分成训练集和测试集并做标签
转换完数据文件: train_exampletest_example
标签文件:train_label.txt test_label.txt

convert.bat:转换为leveldb文件
转换完数据文件: train_lmdbtest_lmdb

需先下载:bvlc_reference_caffenet.caffemodel

solver.prototxt参数说明:

batchsize : 每迭代一次,网络训练图片的数量,例如:如果你的batchsize=256,则你的网络每迭代一次,训练256张图片;则,如果你的总图片张数为1280000张,则要想将你所有的图片通过网络训练一次,则需要1280000/256=5000次迭代。
epoch 表示将所有图片在你的网络中训练一次所需要的迭代次数,如上面的例子:5000次;我们称之为   一代。 所以如果你想要你的网络训练100代时,则你的总的迭代次数为max_iteration=5000*100=500000次;
max_iteration : 网络的最大迭代次数如上面的500000次;同理,如果max_iteration=450000,则该网络被训练450000/5000=90代。
test_iter 表示测试的次数;比如,你的test阶段的batchsize=100,而你的测试数据为10000张图片,则你的测试次数为10000/100=100次;即,你的 test_iter =100;
test_interval : 表示你的网络迭代多少次才进行一次测试,你可以设置为网络训练完一代,就进行一次测试,比如前面的一代为5000次迭代时,你就可以设置test_interval=5000;
base_lr : 表示基础学习率,在参数梯度下降优化的过程中,学习率会有所调整,而调整的策略就可通过 lr_policy 这个参数进行设置;
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是均匀等间隔变化,而mult-
  • step则是根据stepvalue值变化
  • - poly:    学习率进行多项式误差, 返回 base_lr (1 - iter/max_iter) ^ (power)
  • - sigmoid:  学习率进行sigmod衰减,返回 base_lr ( 1/(1 + exp(-gamma * (iter - stepsize))))
momentum: 表示上一次梯度更新的权重;
weight_decay: 表示权重衰减,用于防止过拟合;

在solver.prototxt文件里修改net

test_iter

test_interval

修改train_val.prototxt里面的lr_mult

其他网络里面的修改成0.1,0.2;fc8里面修改成10,20;

根据已知的网络进行fine-tune

fine-tune的好处是可以利用别人预先调节好的网络,适当微调网络结构和参数就可以用于自己的应用。
注意事项:0.fine-tune的网络和之前网络结构应该基本一致,特别是输入,不然对应层参数个数不同,会报错
1.训练的时候加入 --weight 指定从哪个模型导入对应层的参数(根据名字)。
2.由于caffe是根据对应层的名字来寻找是否需要填充对应的参数,所以对于你需要导入参数的层,名字和原来网络保持不变,对于你需要自己调节的层,名字需要修改。
3.如果你修改了网络的结构( 比如由1000类分类改为28),则对应层的名字需要改掉,不然会报错。
4.对于你要调节的层,学习率倍数lr_mult需要变大(10,20),其他层尽可能小;如果其他层不需要调节,可以置为0.
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值