R-CNN——Tne-stage"两步走"体系开创者 (目标检测)(two-stage)(深度学习)(CVPR 2014)

论文名称:《 Rich feature hierarchies for accurate object detection and semantic segmentation 》

论文下载:https://arxiv.org/pdf/1311.2524.pdf

论文代码:https://github.com/rbgirshick/rcnn


前言:

目标检测 ,就是在给定的图片中精确找到物体所在位置,并标注出物体的类别。detection 要解决的问题就是“大概在哪里——是什么——具体在哪里”这整个流程的问题。然而,这个问题可不是那么容易解决的,物体的尺寸变化范围很大,摆放物体的角度,姿态不定,而且可以出现在图片的任何地方,更何况物体还可以是多个类别。故用一般的方法是比较难处理的,这也是为什么在深度学习兴起之前,ILSVRC 检测比赛检测那么沉寂的原因。随着 Hinton 在 2012 年的比赛用 CNN 虐杀其他团队之后,深度学习以及深度卷积网络再一次进入人们视线,这种比较困难的问题也渐渐有思路了。

在R-CNN横空出世之前,最开始的想法是,先训练出一个网络能分出是否是物体,即先不管是什么物体,只要 bounding box 与 ground truth 的 IOU 大于某个阈值,就认为是正样本,小于某个阈值为负样本,然后直接训练,然后直接给它 ground truth,然后用当前框位置与 ground truth 的欧式距离作为 loss,让它自己去学习什么是 object 以及 object 在哪里呢,也就是说把这个任务当成分类问题 + 回归问题来做。通过这个网络在一张大图 sliding windows,就能确定存在物体的区域,再根据回归,来使得 bounding box 框得更准。

不过实际上,想想就能知道,这种方法是开始没有任何限制地去学习,这样会导致任务复杂度非常高,网络会不收敛,而且在测试的时候会非常慢,因为不知道在哪里有什么东西,需要 sliding windows 并且需要不同尺度的缩放,另外并且在 RCNN 的论文中提到了不加限制直接当回归来做实际效果并不是特别好。我觉得不好的原因可能是学习的复杂度太高,这相当于在一开始就没有给任何限制,让网络自己去根据自己预测的和真实的框的距离差去学习,这样子的话,同一种物品在不同位置以不同的大小都可以认为是全新的一个训练样本,完全去拟合这样的任务显然是不太可能的。所以说,这种问题一定要先降低任务复杂度,然后再去学习降低复杂度的等价任务。

 Ross Girshick 大神为了降低检测任务的复杂度,把检测任务最直观的在哪里(回归问题),转化成先用传统方法先定候选框(通过边缘特征、轮廓特征等使得整个问题的复杂度降低,我不是全图搜索 object,而是只在符合 proposals 算法的区域来搜索),然后在确定是什么(是背景还是是某种物体),然后根据这些已经判断是物体的区域(object score 分数高于阈值)来进行回归(精确位置所在)。检测最难做的是网络判断物体大致在哪里这个过程,而具体是什么,精确位置,当知道大致的位置后也就变得异常简单了,迭代就好,把一切交给深度学习就好。

一、 网络结构:

图1 R-CNN网络结构

1、算法三大步:

        1)候选区域选择

Region Proposal 是一类传统的区域提取方法,可以看作不同宽高的滑动窗口,通过窗口滑动获得潜在的目标图像,关于 Proposal 大家可以看下 SelectiveSearch,一般 Candidate 选项为 2k 个即可,这里不再详述;

根据 Proposal 提取的目标图像进行归一化,作为 CNN 的标准输入。

        2)CNN 特征提取

标准 CNN 过程,根据输入进行卷积 / 池化等操作,得到固定维度的输出;

        3)分类与边界回归

实际包含两个子步骤,一是对上一步的输出向量进行分类(需要根据特征训练分类器);二是通过边界回归(bounding-box regression) 得到精确的目标区域,由于实际目标会产生多个子区域,旨在对完成分类的前景目标进行精确的定位与合并,避免多个检出

 2、三个明显问题:

1)多个候选区域对应的图像需要预先提取,占用较大的磁盘空间;

2)针对传统 CNN 需要固定尺寸的输入图像,crop/warp(归一化)产生物体截断或拉伸,会导致输入 CNN 的信息丢失;

3)每一个 ProposalRegion 都需要进入 CNN 网络计算,上千个 Region 存在大量的范围重叠,重复的特征提取带来巨大的计算浪费。
 

二、训练过程:

    1、有监督预训练

数据集为ILSVRC2012,ILSVRC样本集上仅有图像类别标签,没有图像物位

置标注; 
采用AlexNet CNN网络进行有监督预训练,学习率=0.01; 该网络输入为

227×227的ILSVRC训练集图像,输出最后一层为4096维特征—>1000类的映

射,训练网络参数。

    2、特定样本下的微调

PASCAL VOC 2007样本集上既有图像中物体类别标签,也有图像中物体位

置标签; 
采用训练好的AlexNet CNN网络进行PASCAL VOC 2007样本集下的微调,

学习率=0.001【0.01/10为了在学习新东西时不至于忘记之前的记忆】; 

mini-batch为32个正样本和96个负样本【由于正样本太少】; 该网络输入

为候选框【由selective search而来】变形后的227×227的图像,修改了原来的1000为类别输出,改为21维【20类+背景】输出,训练的是网络参数。

正样本: Ground Truth+与Ground Truth相交IoU>0.5的建议框

负样本:与Ground Truth相交IoU≤0.5的建议框

    3、SVM训练

正样本: Ground Truth

负样本:与Ground Truth相交IoU≤0.3的建议框
由于SVM是二分类器,需要为每个类别训练单独的SVM; 
SVM训练时输入正负样本在AlexNet CNN网络计算下的4096维特征,输出为该类的得分,训练的是SVM权重向量; 
由于负样本太多,采用hard negative mining的方法在负样本中选取有代表性的负样本,该方法具体见。

    4、Bounding-box regression训练

正样本:与Ground Truth相交IoU最大的Region Proposal,并且与Ground Truth相交IoU>0.6的建议框

学习从建议框向Ground Truth变换的横向和纵向平移、放缩这四种线性变换函数的权值。

三、测试流程:

  1. 输入一张多目标图像,采用selective search算法提取约2000个建议框;
  2. 在每个建议框周围加上16个像素值为建议框像素平均值的边框,再直接将框变形为227×227的大小;
  3. 将所有建议框像素减去该建议框像素平均值后【预处理操作】,再依次将每个227×227的建议框输入AlexNet CNN网络获取4096维的特征,将CNN的fc7层的输出作为特征,2000个建议框的CNN特征组合成2000×4096维矩阵;
  4. 将每个region proposal提取到的CNN特征输入到每一类的SVM进行分类,判别是否属于该类:将2000×4096维特征与20个SVM组成的权值矩阵4096×20相乘【20种分类,SVM是二分类器,则有20个SVM】,获得2000×20维矩阵表示每个建议框是某个物体类别的得分;
  5. 分别对上述2000×20维矩阵中每一列即每一类进行非极大值抑制剔除重叠建议框,得到该列即该类中得分最高的一些建议框;
  6. 分别用20个回归器对上述20个类别中剩余的建议框进行回归操作,精细修正候选框位置,最终得到每个类别的修正后的得分最高的bounding box。

四、selective search算法:

采取过分割手段,将图像分割成小区域,再通过颜色直方图,梯度直方图

相近等规则进行合并,最后生成约2000个建议框。

五、非极大值抑制:

(1)对2000×20维矩阵中每列按从大到小进行排序; 
(2)从每列最大的得分建议框开始,分别与该列后面的得分建议框进行IoU计算,若IoU>阈值,则剔除得分较小的建议框,否则认为图像中存在多个同一类物体; 
(3)从每列次大的得分建议框开始,重复步骤(2); 
(4)重复步骤③直到遍历完该列所有建议框; 
(5)遍历完2000×20维矩阵所有列,即所有物体种类都做一遍非极大值抑制; 
(6)最后剔除各个类别中剩余建议框得分少于该类别阈值的建议框。

六、创新点:

(1)采用高容量的CNN进行特征提取

(2)采用大样本下有监督预训练+小样本微调的方式解决小样本难以训练甚至过拟合等问题。小样本数据训练很容易造成网络过拟合,但是在大样本训练后利用其参数初始化网络可以很好地训练小样本,这解决了小样本训练的难题。文中利用ILSVRC2012的训练集先进行有监督预训练,再利用PASCAL 2007进行微调。

七、存在问题:

(1)需要多级训练,特征提取网络,分类器,边界回归需要分别训练。

(2)计算复杂度高,重复计算。建议框的数量有几千个,多数都是互相重叠,重叠部分会被多次重复提取特征,训练的时间和空间开销大。

(3)为每个目标候选框进行卷积神经网络正向传递,而不共享计算,导致检测速度很慢。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值