RCNN

视频教程:B站、网易云课堂、腾讯课堂
代码地址:Gitee、Github
存储地址:
百度云-提取码:
Google云


https://github.com/Major357/Detection


  • -Model(pytorch版本

《Region-Based Convolutional Networks for Accurate Object Detection and Segmentation》
—基于RCNN的目标检测和分割
作者:Ross Girshick,etc
单位:Microsoft Research,UC Berkeley
发表会议及时间:ECCV 2014
Submission history


目标检测的难点:

1.目标可能出现在图像的任何位置。
2.目标有各种不同的大小。
3.目标可能有各种不同的形状。
4.目标可能被各种遮挡


  • RCNN(ECCV2014):selective search ,根据颜色、边缘、纹理等快速找到可能存在的目标候选框架
  • Fast RCNN (ICCV2015):加入SPPNet,end to end 训练,使用了回归
  • Faster RCNN(NIPS2015):使用网络直接产生召回率高的Proposals:RPN网络
第一步第二步第三步运行时间缺点
RCNN提取候选框Selectivesearch对每个框提取特征Alexnet/VGG16对候选框进行分类SVM50s/张计算量大
Fast RCNN提取候选框Selectivesearch对整张图提取特征+ROIpooling解决尺度缩放问题+softmax分类2s/张Selectivesearch运行慢(计算量仍然大)
Faster RCNN对整张图提取特征提取候选框Region proposalnetwork(RPN)+ROl pooling解决尺度缩放问题+softmax分类0.2s/张ROl pooling不能做到精确定位

传统的目标检测流程

1.区域选择
例如滑动窗口(设置不同的大小尺寸,不同的长宽对图像进行遍历搜索)

2.特征提取
如SIFT,HOG

3.分类器分类
如SVM, adaboost算法。


  • Abstract

Object detection performance, as measured on the canonical PASCAL VOC Challenge datasets, plateaued in the final years of the competition.

The best-performing methods were complex ensemble systems that typically combined multiple low-level image features with high-level context.

In this paper, we propose a simple and scalable detection algorithm that improves mean average precision (mAP) by more than 50 percent relative to the previous best result on VOC 2012-achieving a mAP of 62.4 percent.

Our approach combines two ideas: (1) one can apply high-capacity convolutional networks (CNNs) to bottom-up region proposals in order to localize and segment objects and (2) when labeled training data are scarce, supervised pre-training for an auxiliary task, followed by domain-specific fine-tuning, boosts performance significantly.

Since we combine region proposals with CNNs, we call the resulting model an R-CNN or Region-based Convolutional Network.

Source code for the complete system is available at http://www.cs.berkeley.edu/~rbg/rcnn.


一 论文导读


RCNN之前的提取特征算法:

HOG,SIFT是什么?

都是用来做特征提取的算法

HOG算法

HOG(Histogram of Gradient)主要捕获轮廓信息
1.图片灰度化
2.进行Gamma矫正(降低图片局部阴影和光照变化的影响,同时抑制噪声)
3.将图片分割为一个个的小cell (cell之间不会有重叠)
4.相邻cell组成一个block(相邻block会有重叠cell)
5,计算每个cell中所有像素的梯度值,再以此扩大为block

SIFT(角点检测)

在不同的尺度空间上查找关键点(特征点),并计算出关键点的方向。
SIFT所查找到的关键点是一些十分突出,不会因光照,仿射变换和噪音等因素而变化的点,如角点、边缘点、暗区的亮点及亮区的暗点等。
1.尺度空间极值检测
2.关键点定位
3.方向确定
4.关键点描述


1.最近10年以来,以人工经验特征为主导的物体检测任务mAP提升缓慢
2.随着ReLu激励函数、dropout正则化手段和大规模图像样本集ILSVRC的出现,在2012年ImageNet大规模视觉识别挑战赛中,Hinton及他的学生采用CNN特征获得了最高的图像识别精确度(Alexnet)
3.如果要定位很多个物体的话,有两个方法
1.将定位框视为回归问题2.使用滑动窗口探测器。这两种方式的局限性结合第
2个原因成为了本文被提出的开端-是否可以采用CNN特征来提高当前一直停滞不前的物体检测准确率。


什么是

有监督训练和无监督训练


非极大抑制(NMS)

从一系列识别同一物体的预测框中选出最佳预测框从一系列(iou>0.7)的区域中合并预测框


Selective search

通过视觉特征减少候选框的数量以提高精度

  • 适应不同的尺度

  • 多样化视觉特征
    使用纹理、颜色、大小分割好的区域并进行合并

  • 速度要求

Python中使用selective search直接pip install selevtivesearch


Selective search使用了区域合并算法
首先通过基于图像分割的算法初始化原始区域,将图像分为很多小块
然后使用贪心策略,计算每两个相邻区域的相似度然后每次合并最相似的两块,直到最终只剩下一块完整的图片
这时每次产生的图像块就被我们保存了下来


二 论文精读

RCNN的检测步骤

1.将图像作为输入

2.使用selective search提取ROI提取约2000个候选框

3.对这些区域尺寸进行调整,将每个区域传递给CNN网络
①各向异性缩放-227*227(破环原先图片比例)
②各向同性缩放
a.对ROI边界进行扩展成正方形再裁剪
b.先按原比例裁剪,再用固定的背景颜色填充成正方形图片

4.CNN为每个区域提取特征,SVM将这些区域为这些区域分类
使用alexnet提取特征,得到4096维的特征后,由2000个候选框的结果合并在一起得到一个2000*4096维的矩阵。
SVM分类是二分类器(0,1)即采用2000*4096维的矩阵与SVM的4096*20矩阵相乘。得到2000*20维矩阵,代表每一个候选框对应每一个候选类别的得分

5.最后使用边界框回归(bounding box regression)


在这里插入图片描述
红框是原始的预测框
绿色框是groundTruth
蓝色框是经过回归之后生成的框


1.有监督预训练
原因:带标签训练数据较少,不够使用随机初始化参数的方法办法:采用某种方式初始化参数,然后进行有监督的参数微调
操作:直接使用alexnet网络及其参数,采用随机梯度下降法,学习率0.01数据集:ILSVRC2012(仅有图像类别标签,没有图像物体位置标注)输出:每个输入候选框图片输出一个2096维的特征向量

2.finetune
问题:只通过有监督预训练得到的结果精度低
原因:不针对特定任务进行微调,只将CNN当作特征提取器的话, pool5得到的只是共性基础特征,后续的fc6,fc7层是针对特定样本的特征
操作:使用PASCAL VOC 2007,正样本为GT与IOU>0.5,学习率0.001,类别输出改为21

3.SVM训练
问题:SVM是2分类器,需要为每个类别训练单独的SVM。对于只包含部分目标的窗口如何界定正负样本?

操作:正样本只包含GT,通过实验得出将IOU阈值设为0.3时效果最好,当IOU小于0.3时将其标注为负样本。一旦特征抽取成功,SVM会对每个区域类别进行识别。这里使用hard example mining(困难样本挖掘)。

4.Bounding box regression
正样本选取∶与GT相交lOU最大的region proposal并且IOU>0.6的region proposal
操作:训练dx (P ),dy (P ),dw (P ), dh (P )四种变化操作的权重向量


什么是困难样本挖掘?

困难样本:错误的将样本分类为正样本。

如果把label分成负例说明这个分类器模型不够好。主要的问题还是庞大的negative里面有些令分类器难以分辨的物体(false positive) 。

通俗点说:有很多正确的样本被错误的识别为负样本表现形式:识别到的正样本数量远小于负样本数量

操作:将这些被错误识别的正样本判定为hard negative,再次进行训练,加强分类器判断能力

相当于读书时的错题本,把易错题记录下来之后时不时地进行学习


三 代码实现

四 问题思索

论文细节补充:

1.finturn过程:
计算每个region proposal与人工标注的框的IoU,IoU重叠阈值设为0.5,大于这个阈值的作为正样本,其他作
 为负样本。然后在训练的每一次迭代中都使用32个正样本(包括所有类别)和96个背景样本组成的128张图片的batch
 进行训练(正样本图片太少了)
2.SVM训练过程:
 对每个类都训练一个线性的SVM分类器,训练SVM需要正负样本文件,这里的正样本就是ground-truth框中的图像作
 为正样本,完全不包含的region proposal应该是负样本,但是对于部分包含某一类物体的region proposal该如
 何训练作者同样是使用IoU阈值的方法,这次的阈值为0.3,计算每一个region proposal与标准框的IoU,小于0.3
 的作为负样本,其他的全都丢弃。由于训练样本比较大,作者使用了standard hard negative mining method
 (具体怎么弄的不清楚)来训练分类器。作者在补充材料中讨论了为什么fine-tuning和训练SVM时所用的正负样本
 标准不一样,以及为什么不直接用卷积神经网络的输出来分类而要单独训练SVM来分类,作者提到,刚开始时只是用了
 ImageNet预训练了CNN,并用提取的特征训练了SVMs,此时用正负样本标记方法就是前面所述的0.3,后来刚开始使用
 fine-tuning时,使用了这个方法但是发现结果很差,于是通过调试选择了0.5这个方法,作者认为这样可以加大样本
 的数量,从而避免过拟合。然而,IoU大于0.5就作为正样本会导致网络定位准确度的下降,故使用了SVM来做检测,全
 部使用ground-truth样本作为正样本,且使用非正样本的,且IoU小于0.3的“hard negatives”,提高了定位的准确度。
3.hard negatives:
 在训练过程中会出现 正样本的数量远远小于负样本,这样训练出来的分类器的效果总是有限的,会出现许多false positive。
 采取办法可以是,先将正样本与一部分的负样本投入模型进行训练,然后将训练出来的模型去预测剩下未加入训练过程的负样本,
 当负样本被预测为正样本时,则它就为false positive,就把它加入训练的负样本集,进行下一次训练,知道模型的预测精度不再提升
 这就好比错题集,做错了一道题,把它加入错题集进行学习,学会了这道题,成绩就能得到稍微提升,把自己的错题集都学过去,成绩就达到了相对最优

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值