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上做分类与回归,即要通过两个阶段才能得到最后的检测结果。下面将对算法进行一一讨论。

Two-stage里程碑算法

  • RCNN
  • SPP-Net
  • Fast RCNN
  • Faster RCNN
  • FPN
  • Mask RCNN
  • Cascade RCNN
  • 总结

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)滑动窗口法,论文使用的方法。整体流程如下:

Two-stage目标检测里程碑算法之RCNN、SPP Net、Fast RCNN、Faster RCNN、FPN等_第1张图片

  上面的目标检测系统包括三个模块:(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个参数。
    Two-stage目标检测里程碑算法之RCNN、SPP Net、Fast RCNN、Faster RCNN、FPN等_第2张图片
  • 特征提取:首先将该区域中的图像转换成与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减少定位误差(线性回归模型用来预测一个新的检测框)。
Two-stage目标检测里程碑算法之RCNN、SPP Net、Fast RCNN、Faster RCNN、FPN等_第3张图片

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)的池化策略来消除网络对固定尺寸输入的限制。两种网络结构对比如下:
Two-stage目标检测里程碑算法之RCNN、SPP Net、Fast RCNN、Faster RCNN、FPN等_第4张图片
可以看出,SPP层放在最后一个卷积层之后,对特征图进行池化,并产生固定长度的输出,这个输出再喂给全连接层(或其他分类器)。SPP的优点:1)SPP能在输入尺寸任意的情况下产生固定大小的输出,而以前的深度卷积中的滑窗池化(sliding window pooling)不能;2)SPP使用了多层空间箱(bin),对于物体的变形有十分强的鲁棒性,而滑窗池化则只用了一个窗口尺寸。;3)由于其对输入的灵活性,SPP可以池化从各种尺度抽取出来的特征。
Two-stage目标检测里程碑算法之RCNN、SPP Net、Fast RCNN、Faster RCNN、FPN等_第5张图片
  如上图所示,为了让神经网络适应任意尺寸的图像输入,用一个空间金字塔池化层替换掉最后一个池化层(最后一个卷积层之后的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层以及之后的层,完成特征提取工作,从而节省了大量的计算时间。实现了在特征图的层面上提取候选区域,避免了候选区域特征提取的计算冗余。

Two-stage目标检测里程碑算法之RCNN、SPP Net、Fast RCNN、Faster RCNN、FPN等_第6张图片

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,最后拟合边界框回归。创新:进行单阶段的训练,使用多任务损失来更新所有的网络层,提高了精度,并且特征不需要磁盘缓存。

Two-stage目标检测里程碑算法之RCNN、SPP Net、Fast RCNN、Faster RCNN、FPN等_第7张图片

  如上图所示的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,tu,v)=Lcls(p,u)+λ[u1]Lloc(tu,v)
    其中, u , v u,v u,v分别为ROI的ground-truth 的class和Bbox regression,第一项 L c l s ( p , u ) = − l o g p u L_{cls} (p, u) = − logp_u Lcls(p,u)=logpu,第二项的位置损失是对于目标类别来说的(若是背景则求回归框没有意义),因此背景的u=0 即没有位置损失, λ \lambda λ为0,其他情况u≥1, λ \lambda λ为1。回归损失使用了Smooth L1,对四个偏移量求和。
Two-stage目标检测里程碑算法之RCNN、SPP Net、Fast RCNN、Faster RCNN、FPN等_第8张图片

Faster RCNN

  2015年由上述Kaiming He的团队和Ross Girshick合作完成了《Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks》,发表在NIPS 2015。动机:尽管Fast RCNN提升了目标检测的速度,但是候选区域的提取仍是事先用外部算法得到的,不能满足实时性的要求,也不是完全意义上的端到端训练。创新点:引入了Region Proposal Network (RPN) ,它和检测网络共享整图的卷积特征,使得候选框的计算几乎不额外占用时间。Faster R-CNN由两个模块组成,第一个模块 RPN 用于产生候选区域,第二个模块是Fast R-CNN object detection network。结构如下:
Two-stage目标检测里程碑算法之RCNN、SPP Net、Fast RCNN、Faster RCNN、FPN等_第9张图片

  • RPN:将(任意分辨率的)图像作为输入,输出一些矩形的物体候选框,每个框具有是否为物体的得分。作者使用一个全卷积网络(FCN)建模该过程:在最后一层共享卷积层输出的卷积特征图上滑动小的网络,来找到候选区域。这个小网络将卷积特征图上n×n大小的窗口作为输入,每个滑窗映射为低维特征,送给两个全连接层——边界框回归层(reg)和边界框分类层(cls),由于小网络以滑窗形式操作,所有空间位置共享全连接层,该结构可以用n×n的卷积层后接两个1×1的卷积层(分别用于回归和分类)很自然地实现。
  • Anchor(锚框):为了实现多尺度,每个滑窗位置同时预测多个候选框,每个位置候选框的最大数量表示为k。定义锚框(anchors)以滑窗为中心,关联一个尺度和一个长宽比,在锚框的基础上进行分类和回归得到候选框。所以,如果有3个尺度和3个长宽比,则随意组合不同尺度和长宽比,可以得到每个位置的k为9。回归层有4k个输出来编码k个bbox的坐标,分类层输出2k个得分来估计k个候选框是否为物体的概率。参考多个不同尺度和长宽比的锚点框来分类和回归边界框,仅依赖单尺度的图像(相比于图像金字塔)和单尺度的滤波器在特征图上进行滑窗,利用共享特征解决尺度问题而无需额外计算。如下图所示:
    Two-stage目标检测里程碑算法之RCNN、SPP Net、Fast RCNN、Faster RCNN、FPN等_第10张图片
  • 损失函数: 训练RPN时,为每个anchor分配一个二分类标签(是或者不是物体)。其中,有两类锚框会被分配正标签:(1)和物体真实的外接矩形框有最高的交并比(IoU)的锚框,(2)锚框和任意一个真实框的IOU超过0.7。因此,一个GT框可能会分配多个锚框为正标签,通常第二个条件足够判定正样本,但仍然采用第一个条件,原因是在极少数情况下第二个条件可能无法找到正样本。负标签:如果锚框和所有真实框的IOU低于0.3。那些既不是正样本也不是负样本的锚框不参与训练。多任务分类损失:
    L ( p i , t i ) = 1 N c l s ∑ i L c l s ( p i , p i ∗ ) + λ 1 N r e g ∑ i p i ∗ L r e g ( t i , t i ∗ ) L({p_i},{t_i})=\frac1{N_{cls}}\sum_iL_{cls}(p_i,p_i^*)+\lambda\frac1{N_{reg}}\sum_ip_i^*L_{reg}(t_i,t_i^*) L(pi,ti)=Ncls1iLcls(pi,pi)+λNreg1ipiLreg(ti,ti)
    其中,ground-truth label p i ∗ p_i^* pi在正样本时为1,负样本时为0。与Fast RCNN相同,分类损失为log损失,回归损失为smooth L1损失;不同在于,引入了平衡参数 λ \lambda λ进行加权,使得cls和reg两项的损失权重大体相等。回归的偏移量 t t t的计算如下,分别是anchor对预测和真实值的偏移:
    t x = ( x − x a ) / w a ,    t y = ( y − y a ) / h a ,    t w = l o g ( w / w a ) ,    t h = l o g ( h / h a ) t x ∗ = ( x ∗ − x a ) / w a ,    t y ∗ = ( y ∗ − y a ) / h a ,    t w ∗ = l o g ( w ∗ / w a ) ,    t h ∗ = l o g ( h ∗ / h a ) t_x = (x − x_a )/w_a ,\space\space t_y = (y − y_a )/h_a,\space\space t_w = log(w/w_a ), \space\space t_h = log(h/h_a )\\ t^∗_x = (x^∗ − x_a )/w_a ,\space\space t^∗_y = (y^∗ − y_a )/h_a,\space\space t^∗_w = log(w^∗ /w_a ),\space\space t^∗_h = log(h^∗ /h_a ) tx=(xxa)/wa,  ty=(yya)/ha,  tw=log(w/wa),  th=log(h/ha)tx=(xxa)/wa,  ty=(yya)/ha,  tw=log(w/wa),  th=log(h/ha)
  • 训练RPN:RPN可以通过反向传播和随机梯度下降(SGD)进行端到端的训练。每个批大小来自于包含正负锚框样本的单个图像,但如果负样本占据多数,优化将会偏向负样本。因此,从一幅图像中随机采样256个锚框来计算批量的损失函数,其中正负锚点的比例为1:1,如果图像中的正样本数少于128,则用负样本进行补齐。RPN产生的2000个左右的候选框就跟Fast R-CNN一样,用0.5的IoU阈值,1:3的正负样本比例采样128个送入检测头。推理阶段RPN会产生300左右的proposals,由于推理阶段不知道IoU,所以不能通过IoU阈值选择样本。
  • 训练RPN和Fast RCNN检测端:有三种共享特征网络的训练方法:(1)交替训练。首先训练RPN,并使用候选框训练Fast R-CNN。然后,将经过Fast R-CNN改动后的网络初始化RPN,迭代进行该过程。(2)近似联合训练。RPN和Fast R-CNN网络训练时融合为一个网络,每个SGD迭代时,前向传播产生的候选框被视为训练Fast R-CNN检测时固定的、预计算的候选框。反向传播照常进行,对于共享层而言,反向传播信号是RPN和Fast R-CNN损失的和。(3)非近似联合训练。Fast R-CNN中的RoI池化层可以将卷积特征和预测的边界框作为输入,因此有效的传播方案应当包含RPN预测的框坐标的梯度。上述近似联合训练中只计算了特征图的梯度,忽略了RPN候选框的梯度,在非近似联合训练中,需要ROI池化层进行关于框坐标的微分。

FPN

  2016年仍然由Ross Girshick和Kaiming He所在的Facebook AI Research (FAIR)提出了《Feature Pyramid Networks for Object Detection》,发表在CVPR 2017。动机:为了识别不同尺度的目标,(a)传统的图像金字塔是针对一个输入图像进行resize,针对生成的每个scale都输入网络训练、预测,但是计算开销太大。因此,(b)最近的检测系统选择只使用顶层单一尺度特征进行更快的检测。除此之外,(c)卷积网络内特征层级也能产生不同空间分辨率的特征映射,但不同深度会有较大的语义差异,而且高分辨率映射具有损害其目标识别表示能力的低级特征。创新点:(d)利用深度卷积网络内在的多尺度金字塔构造特征金字塔,可以在所有层级的尺度上构建高级语义特征映射,并且能端到端训练,网络在训练/测试时一致地使用。下面的图中对应于上面序号各自的结构。
Two-stage目标检测里程碑算法之RCNN、SPP Net、Fast RCNN、Faster RCNN、FPN等_第11张图片

  • Bottom-up pathway:自下向上的路径是卷积层的主干网络,由步长为2的多尺度特征映射组成的特征层级( (d)图的左侧)。通常深层卷积中有许多层产生相同大小的输出映射,将这些层位于相同的网络阶段,为每个阶段定义一个金字塔层。选择每个阶段的最后一层的输出作为特征映射参考集,因为每个阶段的最深层应具有最强大的特征,通过丰富它来创建右侧的金字塔。对于ResNets,使用conv2,conv3,conv4和conv5最后一个残差块输出的特征。
  • Top-down pathway and lateral connections:自顶向下的路径通过对特征图上采样,空间上更粗糙但在语义上更强,从而把较高等级金字塔特征映射到更高的分辨率特征。这些特征随后通过来自自下而上路径上的特征经由横向连接进行增强,自下而上的特征映射具有较低级别的语义,但可以更精确地定位。如下图所示,在顶层添加一个1×1卷积层来生成最粗糙分辨率映射(后续通道数都为256),采样之后的特征图尺寸相同,通过按元素相加,将上采样映射与相应的自下而上映射(经过1×1卷积层来匹配通道维度)合并,在每个合并的映射上添加一个3×3卷积来生成最终的特征映射。在检测经过RoI时,不同尺度的RoI会分配到不同的特征图上进行提取,即大的尺度分到更高层的特征图,小的尺度分到较低层的特征图上提取。
    Two-stage目标检测里程碑算法之RCNN、SPP Net、Fast RCNN、Faster RCNN、FPN等_第12张图片

Mask RCNN

  2017年Kaiming He又提出了《Mask R-CNN》,发表在ICCV 2017。动机:为了提出了一个概念上简单、灵活和通用的目标分割框架,能有效地检测图像中的目标,同时为每个实例生成高质量的分割掩码。创新点:以Faster R-CNN为原型,通过添加一个用于在每个感兴趣区域(RoI)上预测分割掩码的分支来扩展Faster R-CNN,这个分支与用于分类和目标检测框回归的分支并行执行,如下图所示(用于目标分割的Mask R-CNN框架),另外提出了RoIAlign来改善RoI粗略的空间量化:
Two-stage目标检测里程碑算法之RCNN、SPP Net、Fast RCNN、Faster RCNN、FPN等_第13张图片

  • Mask Representation(掩码表示):作者发现解耦掩码和分类至关重要,即不直接预测像素点的多类分类,为每个类独立地预测二进制掩码,这样不会跨类别竞争,并且依赖于网络的RoI分类分支来预测类别。具体地,与通过全连接层不可避免地缩成短输出向量的类标签或框偏移预测不同,提取掩码的空间结构可以通过由卷积提供的像素到像素对应来解决,使用FCN来为每个RoI预测一个的掩码,使得掩码分支中的每个层显式地保持对象空间的布局。
  • RoIAlign:上述Mask分支预测像素到像素的行为,需要RoI特征与像素空间能有准确的对应关系,RoI特征本身就是小特征图,因此一个像素点的偏差都会带来原图上巨大的错位。Fast R-CNN提出的RoI pooling有两个问题:(1)从原图的RoI映射到特征图的RoI是直接通过四舍五入取整得到的结果(2)再将(1)中得到的RoI特征图分成W×H固定大小的维度时,又采用了取整操作进行分块,直接从每块中找到最大值。这样的计算使RoI与提取的特征错位,虽然这可能不会影响分类,因为分类对小幅度的变换具有一定的鲁棒性,但它对预测像素级精确的掩码有很大的负面影响。如下图左所示即为上面两个问题的可视化:
    Two-stage目标检测里程碑算法之RCNN、SPP Net、Fast RCNN、Faster RCNN、FPN等_第14张图片
    RoIAlign层可以去除RoIPool的错位,将提取的特征与输入准确对齐。主要思想是避免对于任何RoI边界或空间块(bin)进行量化,并且使用双线性插值来计算每个块对应的特征。具体操作如上图右,虚线部分表示特征图,实线表示RoI,这里将RoI切分成2×2的空间块。如果采样点数设为4(会获得最佳性能),那我们首先将每个空间块均分成四个小方格,每个小方格中心就是采样点(上图每个空间块有四个采样点)。这些采样点的位置坐标通常是浮点数,因此没有具体的像素值,需要对采样点像素进行双线性插值(如上图四个箭头所示),就可以得到该像素点的值了。然后对每个单元格内的四个采样点进行max pooling,就可以得到最终ROIAlign的结果。
  • 多任务损失 L = L c l a s s + L b o x + L m a s k L = L_{class}+L_{box}+L_{mask} L=Lclass+Lbox+Lmask
    L c l a s s L_{class} Lclass L b o x L_{box} Lbox与Faster R-CNN没区别, L m a s k L_{mask} Lmask如下图所示输出k个类别(80个)的mask预测图,经过sigmoid计算分类得分,采用average binary cross-entropy loss训练,只有对应ground truth类别的那一个特征图对 L m a s k L_{mask} Lmask有贡献。
    Two-stage目标检测里程碑算法之RCNN、SPP Net、Fast RCNN、Faster RCNN、FPN等_第15张图片

Cascade RCNN

  2017年Zhaowei Cai和Nuno Vasconcelos提出了《Cascade R-CNN: Delving into High Quality Object Detection》,发表在CVPR 2018。动机:在目标检测中,需要一个交并比(IOU)阈值来定义物体正负标签,如果阈值设置较宽松,则会产生很多的噪声边界框。为了提高检测的精确度,自然可以想到提高产生正样本的IOU阈值,这样后面的detector接收到了更高精度的proposals,自然能产生高精度box。但是如果阈值设置太高,(1)正样本数量会以指数方式减小,容易造成过拟合;(2)检测器的质量与推断的测试质量不匹配,主要体现在bbox回归器的输入分布,因为训练时回归器输入的是IOU>threshold的正样本,而推理时送入的proposals质量相对较差。通常threshold取0.5时,mismatch问题还不会很严重。创新点:作者实验表明单一阈值训练出的检测器效果非常有限,不能对所有的Proposals都有很好的优化作用,提出Cascade R-CNN使用不同的IOU阈值,训练多个级联的检测器。

  • 模型结构对比
    Two-stage目标检测里程碑算法之RCNN、SPP Net、Fast RCNN、Faster RCNN、FPN等_第16张图片
    (a)就是经典的Faster R-CNN框架,也是本文的baseline;
    (b)结构上和(d)Cascade R-CNN非常相似,区别在于只在测试时采用级联结构对Box多次回归,因此ROI检测网络部分“H1”结构是相同的,也即训练时还是采用的单一的IoU阈值;
    (c) 是在ROI检测网络部分并联多个检测器,这些检测器是不相关的;
    (d) 本文Cascade R-CNN的基本框架。
  • 边界框回归:由于边界框回归通常对bbox进行较小的调整,所以偏移量的数值可能很小。因此,回归损失通常比分类损失小得多。为了提高多任务学习的有效性,偏移量∆通常用均值和方差进行归一化。Cascade R-CNN将每一次检测回归框又输入下一阶段,进行再一次不同阈值训练样本的回归,例如U={0.5,0.55,··,0.75}。每一次回归之后的边界框IOU分布如下图,每个阶段都有足够的样本,不会容易过拟合:
    Two-stage目标检测里程碑算法之RCNN、SPP Net、Fast RCNN、Faster RCNN、FPN等_第17张图片
  • 损失函数:在每个阶段 t t t,R-CNN包括一个分类器 h t h_t ht和一个针对IOU阈值 u t u_t ut优化的回归器 f t f_t ft,其中 u t > u t − 1 u_t >u_{t−1} ut>ut1,最小化损失: L ( x t , g ) = L c l s ( h t ( x t ) , y t ) + λ [ y t ≥ 1 ] L l o c ( f t ( x t , b t ) , g ) L(x^t,g)=L_{cls}(h_t(x_t),y_t)+\lambda[y_t\geq 1]L_{loc}(f_t(x_t,b_t),g) L(xt,g)=Lcls(ht(xt),yt)+λ[yt1]Lloc(ft(xt,bt),g)

总结

  Two-stage的检测模型,通过先进行候选区域建议(负样本抑制),再针对候选区域进行分类与定位。把一个检测任务分解成两个简单的任务,使得两个任务的训练都相对容易,提高了最后的性能。存在的缺点是速度慢、训练时间长。

你可能感兴趣的:(总结经验帖,计算机视觉,深度学习)