Two-stage目标检测里程碑算法之RCNN、SPP Net、Fast RCNN、Faster RCNN、FPN等

  在前面的博客中我基于三篇目标检测综述,描述了对视觉目标检测的整体认知,包括发展历程 、算法流程、传统检测算法到深度学习算法的技术难点、评价指标和数据集。本篇博客将逐步按照RCNN→SPP Net→Fast RCNN→Faster RCNN→FPN→Mask RCNN→Cascade RCNN的顺序,依次整理two-stage目标检测算法的改进点。这些two-stage的目标检测方法主要通过一个卷积神经网络来完成目标检测过程,在训练网络时,分为两个部分,第一部分是需要使用启发式方法(selective search)或者CNN网络(RPN)产生Region Proposal,第二部分是训练检测目标区域的网络在Region Proposal上做分类与回归,即要通过两个阶段才能得到最后的检测结果。下面将对算法进行一一讨论。

RCNN

  2013年由Ross Girshick等人提出《Rich feature hierarchies for accurate object detection and semantic segmentation》,发表在CVPR 2014。RCNN的特点:将候选区域(region proposal)和卷积神经网络(CNN)结合在一起,称为带有CNN特征的区域(Region with CNN features)。论文回答了在ImageNet上的CNN分类结果在多大程度上可以被推广到PASCAL VOC挑战的目标检测结果上,表明与基于更简单的HOG类似的特征系统相比,CNN可以在PASCAL VOC上得到更加显著的目标检测表现。与图像分类不同,检测需要在图像中定位目标(可能有多个),位置信息的产生有两种方式:(1)看做回归问题;(2)滑动窗口法,论文使用的方法。整体流程如下:

  上面的目标检测系统包括三个模块:(1)生成类无关的候选区域,这些候选区域定义了可用于检测器的候选集合;(2)卷积神经网络,它从每个区域中抽取固定长度的特征向量;(3)一些特定类别的线性SVM分类器。技术细节如下:

  • Selective search(选择性搜索):产生候选区域的方法,该方法是在IJCV 2013上提出的。目标检测比图像分类复杂的一个因素是:一张图中存在多个物体需要分别定位和分类,因此在训练分类器之前,需要使用一些方法将图像划分为小的区域,统称为Region Proposal Algorithms。Selective search的优势在于,可以捕捉不同尺度(capture all scales)、多样化(diversification)、快速计算(fast to compute)。算法在进行区域合并的同时,采用了保持多样性的策略,具体思路是(1)通过Graph-based图像分割方法初始化原始区域,结果是将图像分割成很多的小块;(2)使用贪心策略,计算每两个相邻的区域的相似度,然后每次合并最相似的两块;(3)迭代进行直到最终只剩下一块完整的图像。由于每次产生的图像块(包括合并的图像块)都保存了下来,从而得到图像的分层表示。相似度计算使用颜色、纹理、尺寸和空间交叠4个参数。
    在这里插入图片描述
  • 特征提取:首先将该区域中的图像转换成与CNN兼容的形式,即将候选区域减去平均值,扭曲(warp)成为227×227的RGB图像,warp时在原始区域周围再扩大16个像素,所以固定输入尺寸使得这种方法忽略了候选区域的大小和宽高比;然后经过5个卷积层和2个全连接层的前向传播计算特征;最后从每个候选区域中提取4096维特征向量。
  • 训练过程:首先是利用ILSVRC 2012上的分类数据进行有监督训练得到预训练模型;然后为了适应检测任务,用随机初始化的N+1类分类层(其中N是目标类的数目,加上背景的1类)来替换CNN的ImageNet特定的1000类分类层,CNN架构没有改变,进行微调CNN,在选择训练样本时,将所有候选区域与真实框重叠≥0.5的作为正例,其余的作为负例,均匀地采样32个正窗口和96个负窗口以构造大小为128的小批量进行训练;最后进行目标类别的分类,通过对每一类目标训练一个二分类SVM,输入是4096维特征,正样本仅为真实框,选择重叠阈0.3(由实验得出)以下作为负样本,训练SVM时利用了标准难分样本挖掘(hard negative mining)的思想。
  • 测试过程:接收一个输入图像,抽取大约2000个从下到上的候选区域,对于每一个候选区域使用CNN计算特征,然后使用特定类的线性SVM对每一个区域进行分类,最后对每一类应用greedy NMS,再使用bounding-box regression减少定位误差(线性回归模型用来预测一个新的检测框)。

SPP-Net

  2014年由Kaiming He等人提出《Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition》,发表在ECCV 2014。动机:现有的深度CNNs需要一个固定尺寸的输入图像(比如224×224),因此会降低原图或子图的识别精度(因为要经过crop/warp,就像上述RCNN中采用的方式)。创新点:论文给网络使用“空间金字塔池化”(spatial pyramid pooling)的池化策略来消除网络对固定尺寸输入的限制。两种网络结构对比如下:
在这里插入图片描述
可以看出,SPP层放在最后一个卷积层之后,对特征图进行池化,并产生固定长度的输出,这个输出再喂给全连接层(或其他分类器)。SPP的优点:1)SPP能在输入尺寸任意的情况下产生固定大小的输出,而以前的深度卷积中的滑窗池化(sliding window pooling)不能;2)SPP使用了多层空间箱(bin),对于物体的变形有十分强的鲁棒性,而滑窗池化则只用了一个窗口尺寸。;3)由于其对输入的灵活性,SPP可以池化从各种尺度抽取出来的特征。
在这里插入图片描述
  如上图所示,为了让神经网络适应任意尺寸的图像输入,用一个空间金字塔池化层替换掉最后一个池化层(最后一个卷积层之后的pool5)。将最后一层卷积的特征图,分别用固定的图像尺寸和空间块尺寸这二者的比例(如上图左,比例分别为4,2,1)进行划分,在每个空间块中池化每个特征图(文中采用了最大池化法)。空间金字塔的输出是一个k×M维向量,M代表空间块的数量(16+4+1),k代表最后一层卷积层的滤波器的数量(256),这个固定维度的向量就是全连接层的输入。根据空间块的数量 n n n和特征图大小 a a a,就可以求出在特征图上池化所需要的窗口大小 ⌈ a / n ⌉ \lceil a/n \rceil a/n和步长 ⌊ a / n ⌋ \lfloor a/n \rfloor a/n
  在R-CNN中,先用ss算法得到2000个proposal,然后分别做卷积操作。然而,SPP-Net只对原图进行一次卷积计算,得到整张图的卷积特征,然后找到每个候选框在feature map上的映射patch,将此patch作为每个候选框的卷积特征,输入到SPP层以及之后的层,完成特征提取工作,从而节省了大量的计算时间。实现了在特征图的层面上提取候选区域,避免了候选区域特征提取的计算冗余。

Fast RCNN

  2015年由Ross Girshick在R-CNN基础上又提出《Fast R-CNN》,发表在ICCV 2015。动机:现有检测方法是多阶段训练模型的,因此存在两个基本挑战:(1)要处理许多候选框(proposal);(2)这些候选框只提供了粗略的位置,必须对其进行细化以实现精确定位。RCNN训练的多阶段体现在首先使用log损失对目标建议进行CNN网络微调;然后,它用卷积特征拟合SVM,这些SVM取代了通过微调学习的softmax分类器;在第三个训练阶段,学习边界框回归量(BBR)。SPP-Net训练的多阶段体现在首先提取特征,然后使用log损失微调网络(所提出的微调算法无法更新空间金字塔池之前的卷积层),接着训练SVM,最后拟合边界框回归。创新:进行单阶段的训练,使用多任务损失来更新所有的网络层,提高了精度,并且特征不需要磁盘缓存。

  如上图所示的CNN结构,输入的是一张完整的图像和图像上的多个感兴趣区域(RoIs)的坐标(由选择性搜索产生)。首先使用深度卷积网络提取整张图片特征,然后通过输入的RoI坐标映射得到感兴趣区域的特征图,RoI pooling将特征图池化得到固定大小的新特征图,通过FCs得到特征向量。该特征向量最终送到两个子网络,一个得到该RoI的分类概率,另一个得到RoI修正的回归框位置。

  • ROI pooling layer:实际上是SPP-Net的一个精简版,SPP-Net对每个proposal使用了不同大小的金字塔映射,而ROI pooling layer只需要下采样到一个7x7的特征图。具体地,ROI池化层从特征图提取特征向量,用W×H划分子区域(其中H和W是独立于任何特定的RoI层的超参数),并通过最大池化产生特征。
  • 对预训练的网络初始化:当预训练的网络初始化Fast R-CNN网络时,网络结构的改变包括:(1)最后一个最大池化层由RoI池化层替换,将H和W设置为与网络的第一个全连接层相兼容;(2)最后的全连接和softmax层(对于ImageNet分类1000维)进行替换,变为two sibling layers;(3)修改网络以获取两个数据输入:a list of images和a list of RoIs。
  • 对检测进行微调: 使用反向传播训练所有网络权重是Fast R-CNN的重要功能。在R-CNN和SPP-Net中,由于每个RoI是在所有图像中随机采样的,每次训练都要计算和储存对应图片的特征图,训练代价大。在Fast R-CNN训练中,随机梯度下降(SGD)的mini-batches被分级地采样,首先采样N个图像,然后采样每个图像的R个RoIs(来自相同图像的RoIs是相关的,但是没有导致训练收敛缓慢),这是由于来自相同图像的RoIs在前向和反向传递中共享计算和存储器。每次SGD训练N=2张图像,从每张采样64个RoIs,共128个RoIs的mini-batch。25%的RoIs要用与真实bbox有至少0.5的IOU的区域重叠,这些RoIs具有类别标签,剩余的在[0.1,0.5] IOU之间的RoIs是背景。
  • 多任务损失:第一个sibling分支预测分类概率,每个ROI有K+1(K个目标类别和1个背景类)个类别的分类概率 p = ( p 0 , p 1 , . . . , p K ) p=(p_0,p_1,...,p_K) p=(p0,p1,...,pK);第二个分支预测回归偏移量,K个类别的每一个都会预测 t k = ( t x k , t y k , t w k , t h k ) t^k=(t_x^k,t_y^k,t_w^k,t_h^k) tk=(txk,tyk,twk,thk)。使用多任务损失 L L L共同训练分类和bbx的回归:
    L ( p , u , t u , v ) = L c l s ( p , u ) + λ [ u ≥ 1 ] L l o c ( t u , v ) L(p,u,t^u,v)=L_{cls}(p,u)+\lambda[u\geq 1]L_{loc}(t^u,v) L(p,u,
  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值