Faster R-CNN 完整详解【论文笔记】

Contents

    • 写在前面
    • 0 Abstract
    • 1 Introduction
    • 2 FASTER R-CNN
      • 2.1 RPN(Region Proposal Networks)
        • 2.1.1 Anchor
        • 2.1.2 损失函数
      • 2.2 RPN和Fast R-CNN共享特征
      • 2.3 实现细节
    • 3 汇总网络执行过程
      • 3.1 Conv layers
      • 3.2 Region Proposal Networks
      • 3.3 RoI pooling
      • 3.4 Classification

写在前面

Ren, Shaoqing, Kaiming He, Ross Girshick, and Jian Sun. 2015. Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks. arXiv.org. June 4..

      在R-CNN、SPPNet、Fast R-CNN基础上,创新的Faster R-CNN可以简单地看做“区域生成网络+fast RCNN”的系统,用区域生成网络代替Fast RCNN中的Selective Search方法,进而可以得到一种端到端训练方法。本篇论文着重解决了这个系统中的三个问题:

  1. 如何设计区域生成网络
  2. 如何训练区域生成网络
  3. 如何让区域生成网络和Fast RCNN网络共享特征提取网络

0 Abstract

     之前提出的SPPnet和Fast R-CNN网络已经极大地减少了网络的运行时间,但是候选区域计算仍然是一个对于网络运算时间的瓶颈,本篇论文旨在解决该问题。作者引入了一个候选区域网络(RPN),该网络与原来的检测网络(即Fast R-CNN)共享全图像的卷积特征,从而使得候选区域的计算成本降到最低。
     RPN是一个全卷积网络,可以同时在每个特征图位置预测目标边界和目标分数。由于使用Fast R-CNN网络用于检测,RPN通过端到端的训练,可以生成高质量的候选区域,故作者将RPN和Fast R-CNN通过共享卷积特征进一步合并为一个单一的网络

1 Introduction

     Fast R-CNN首先生成图片的卷积图,之后再通过Search Selective选择候选区域。在生成的卷积图之上,可以通过添加一些额外的卷积层来构建RPN,这些卷积层同时在特征图上的每个位置上回归区域边界和目标分数。由于RPN是一种全卷积网络,可以针对生成检测候选区域的任务进行端到端的训练。下图是Faster R-CNN结构的整体框图。
Faster R-CNN 完整详解【论文笔记】_第1张图片
      RPN可以高效预测具有很大范围的图片尺寸和长宽比的候选区域。

      不同于改变原始图像的尺寸大小或者是改变过滤器的尺寸,作者引入新的“锚”盒(anchor boxes)作为多种尺寸和长宽比的参考,该方案避免了枚举多种比例或长宽比的图像或滤波器。这个模型在使用单尺度图像进行训练和测试时运行良好,从而有利于运行速度。

2 FASTER R-CNN

     目标检测系统Faster R-CNN由两个模块组成。第一个模块是提出候选区域的PRN,第二个模块是使用候选区域作为输入的的Fast R-CNN模型。

     RPN模块告诉Fast R-CNN模块在哪里寻找需检测的目标,即代替了Fast RCNN中的Selective Search方法。在2.1节中,介绍候选区域网络的设计和属性。在2.2节中,开发了用于训练具有共享特征模块的算法。

2.1 RPN(Region Proposal Networks)

     RPN以任意大小的图像作为输入,输出一组矩形的候选区域,每个区域都有一个目标得分。因为最终目标是RPN与Fast R-CNN目标检测网络共享计算,所以假设两个网络共享一组共同的卷积层。

     为了生成候选区域框,在最后一个共享的卷积层输出的卷积特征图上滑动mini网络,这个mini网络在输入卷积特征图上取出n×n大小的空间窗口(在论文中取n=3)。每一个滑动窗口被映射为一个低维度的特征。这个特征被输入到两个并行的全连接层中,一个是边界框回归层,一个是框分类层。这个mini网络如下图所示。
Faster R-CNN 完整详解【论文笔记】_第2张图片

     在每一个候选窗口的位置,同时预测k个候选区域,所以reg层有4k个输出(4个参数定义一个矩形);cls层输出2k个得分,即对每个优选区域是目标/非目标的估计概率(为简单起见,使用二类的softmax层实现的cls层,还可以用logistic回归来生成k个得分)。

     这里注意:由于mini网络以滑动窗口的方式进行操作,故全连接层是在全部空间位置共享的。可以通过一个nxn的卷积网络后跟两个1×1的卷积网络层(分别是reg和cls)来实现,ReLU应用于nxn卷积层的输出。具体请看下图红框部分。(整个流程请看第三部分)
Faster R-CNN 完整详解【论文笔记】_第3张图片

2.1.1 Anchor

     对于得到的特征图的每一个位置,考虑9个可能的候选窗口:三种面积{1282,2562,5122}×三种比例{1:1,1:2,2:1}。这些候选窗口称为anchors。每个anchor以当前候选窗口的中心为中心,并对应一种尺度和长宽比,这样在每一个滑动位置就有k=9个anchor。对于大小为WxH的卷积特征图,总共有WHk个anchor。

Faster R-CNN 完整详解【论文笔记】_第4张图片

     下面这张图更好的展示了论文中anchor的位置及大小。
Faster R-CNN 完整详解【论文笔记】_第5张图片

anchor的平移不变性

     作者的方法保证了平移不变性,且无论是anchor还是相对anchor计算候选区域的函数都有这个特性。平移不变性指的是如果在一张图片上移动一个物体, 那么候选区域也应该平移并且相同的函数应该能够在新的位置也计算出该候选区域来。平移不变特性也减小了模型的大小。

多尺度anchor作为回归参照物
     锚点的设计解决了多尺度(和长宽比)的问题。目前多尺度预测有两种流行的方法,第一种方法是基于图像/特征金字塔,即图像在多个尺度上进行缩放,并且针对多个尺寸的同一图片计算特征图,但该方法非常耗时;第二种方法是在特征图上使用多尺度(和/或长宽比)的过滤器。

     锚盒通过考虑9个可能的候选窗口:三种面积{1282,2562,5122}×三种比例{1:1,1:2,2:1},参照多尺度和长宽比的锚盒来分类和回归边界框,它只依赖单一的图像尺寸、特征图和滤波器(特征图上的滑动窗口)。

2.1.2 损失函数

      在训练RPN过程中,给每个anchor标记一个二进制的标签(positive/negative)。符合下面两类情况之一的anchor则标记为positive:

  1. 与真实边界框有最高的IoU的anchor(也许不到0.7)
  2. 与任意真实边界框的IoU>0.7的anchor。(注意到对于同一个真实边界框可能有多个positive标签的anchor)

      对于与任意真实边界框的IoU<0.3的anchor标记为negative;非正非负的anchor对训练目标没有任何作用。

     在这些定义的基础上,结合遵循Fast R-CNN中的多任务损失来最小化目标函数。对一个图像的损失函数定义为

     其中i为每一个mini-batch中的anchor的索引;pi为预测anchor i 是positive的概率;如果anchor为positive,则真实标签p*i为1,如果anchor为hegative,p*i为0;

     ti是包含预测边界框的4个参数化坐标的向量;同理,t*i表示anchor为positive时的真实边界框。

     分类损失Lcls是两个类别上(目标或不是目标)的对数损失。

     对于回归损失,使用Lreg(ti,t*i)=R(ti - t*i),其中R是鲁棒损失函数(平滑L1)。

Faster R-CNN 完整详解【论文笔记】_第6张图片      其中 P~i~ ×L~reg~这一项意味着只有anchor为positive时即(Pi* =1)才有回归损失,其他情况则没有(Pi* =0);

     公式中Ncls和Nreg用于归一化,Ncls为#mini-batch(Ncls = 256),Nreg为anchor的个数(Nreg~2400)。默认设置λ = 10,这样使得两部分的权重大致相等。

     对于边界框回归,采用的4个坐标参数为:

Faster R-CNN 完整详解【论文笔记】_第7张图片

     其中,x,y,w和h表示边界框的中心坐标及其宽和高。变量x,xa和x*分别表示预测边界框、anchor和实际边界框,该公式可以理解为anchor到邻近的真实边界框的回归。如下图所示,其中红色的A框是生成的anchor box,而蓝色的G’框是经过RPN网络训练后得到的较精确的预测框,绿色的G是ground truth box。

Faster R-CNN 完整详解【论文笔记】_第8张图片

     在SPPNet和Fast R-CNN中,通过对于任意尺寸的RoIs进行特征池化,并且回归权重由所有区域大小共享;而在Faster R-CNN中,用于回归的特征在特征图上具有相同的空间大小(3×3)。

     考虑到候选区域的不同大小,需要学习一系列k(k=9)个边界框回归器。每一个回归器对应于一个尺度和长宽比,且k个回归量之间不共享权重。因此,由于anchor的设计,即使用于回归的特征具有固定的尺度/比例,仍然可以预测各种尺寸的边界框。

####2.1.3 训练RPNs
Faster R-CNN 完整详解【论文笔记】_第9张图片

     RPN可以通过反向传播和随机梯度下降(SGD)进行端对端的训练。采用“以图像为中心”的采样策略来训练这个网络,即每个小批量数据都从包含许多positive和negative锚点的单张图像中产生。

     随机采样一张图片中的256个anchors去计算一个mini-batch的损失函数,其中采样的positive anchor和negative anchor的比率可达1:1。如果一个图像中的正样本数小于128,就用负样本填补这个mini-batch。

     将模型中的所有新层(所有共享卷积层之后的层)的权值初始化为均值为0、标准差为0.01的高斯分布,所有其他层(即共享的卷积层)是通过对ImageNet分类预训练的模型来初始化的。

     对于前60k个mini-batch,学习率为0.001;对于之后的20k个mini-batch,学习率是0.0001;momentum为0.9,权重衰减为0.0005。

2.2 RPN和Fast R-CNN共享特征

     独立训练RPN和Fast R-CNN将以不同的方式修改卷积层权重,因此需要开发一种允许在两个网络之间共享卷积层的技术,而不是训练两个独立的网络。作者提出三种方法来训练具有共享特征的网络:

  1. 交替训练。首先训练RPN,并使用这些候选区域来训练Fast R-CNN。将微调Fast R-CNN网络后的结果用于初始化RPN,并且重复这个过程。这是本文所有实验中使用的解决方案。
  2. 近似联合训练。将RPN和Fast R-CNN网络在训练期间合并成一个网络。在每次SGD迭代中,前向传递生成候选区域,在训练Fast R-CNN检测器时,将RPN生成的候选区域看作是固定的、预计算的区域。反向传播像往常一样进行,其中对于共享层,将来自RPN损失和Fast R-CNN损失的反向传播信号结合起来。但是这个解决方案忽略了关于RPN响应的导数,因此是近似的。
  3. 非近似联合训练。需要一个关于边界框坐标可微分的RoI池化层,这个方法在论文中仅仅简单提了一下。

     接下来着重阐述一下论文使用的四步交替训练:

  1. 将RPN网络用ImageNet预训练的模型初始化,对于候选区域任务进行端到端微调;
  2. 将Fast R-CNN网络用ImageNet预训练的模型初始化,将第一步得到的候选区域输入到Fast R-CNN网络中用于训练;
  3. 使用训练后的Fast R-CNN网络初始化RPN模型,将共享卷积层固定,仅仅微调RPN网络独立的卷积层;
  4. 保持共享卷积层参数不变,微调Fast R-CNN网络独立的卷积层。

2.3 实现细节

     RPN生成的某些候选区域和其他候选区域大量重叠,为了减少冗余,采用基于候选区域的cls得分的非极大值抑制(non-maximum suppression, NMS),固定对NMS的IoU阈值为0.7,这样使得每张图像只剩2k个候选区域。NMS不会影响最终的检测准确率,并且大幅地减少了候选区域的数量,进而减少了训练时间。
     注意并不是将这2k个候选区域全部检测,而是在NMS之后,将候选区域中的top-N个送入分类器和回归器,所以Faster-RCNN和RCNN、Fast-RCNN一样,都属于two-stage的检测算法。

3 汇总网络执行过程

     这里以VGG16模型为例,来阐述Faster R-CNN的具体执行过程。首先下图该模型的Faster R-CNN框架。
Faster R-CNN 完整详解【论文笔记】_第10张图片
     这里将Faster R-CNN模型算法共分为四个颜色不同的框图,对应着四个步骤:

1.Conv layers(绿框)。作为一种cnn网络目标检测的方法,faster_rcnn首先使用一组基础conv+relu+pooling层提取image的feture map。该feature map被共享用于后续的RPN层和全连接层;
2.Region Proposal Networks(蓝框)。RPN网络用于生成region proposcals。该层通过softmax判断anchors属于foreground或者background,再利用box regression修正anchors获得精确的propocals;
3.Roi Pooling(红框)。该层收集输入的feature map 和 proposcal,综合这些信息提取proposal feature map,送入后续的全连接层判定目标类别;
4.Classification(橙框)。利用proposal feature map计算proposal类别,同时再次bounding box regression获得检验框的最终精确位置。

     下面结合上图对于任意一张图片经过该网络的处理过程进行阐述:

3.1 Conv layers

     对于Faster R-CNN网络输入一张P×Q大小的图像,首先网络将图像resize为M×N大小,之后经过13个conv层、13个relu层和4个pooling层得到该图像的特征图(上图中的feature map);这里需注意:

  • 所有的conv层参数为:kernel_size=3,pad=1,stride=1
  • 所有的pooling层参数为:kernel_size=2,pad=0,stride=2
  • 故在进行卷积时,输入与输出的大小相同,而经过4个pooling后的特征图大小应为(M/16, N/16);
  • 记得之前讲到对于特征图上的每一个位置有9个anchor,而这9个anchor则对应原图中16×16的图像区域。

3.2 Region Proposal Networks

     得到的feature map作为RPN网络的输入。首先经过3×3卷积层和relu层,相当于feature map上的每个点又融合了周围3x3的空间信息,增加网络的鲁棒性;其结果并行输出两路,一路用于给anchor标记positive/ negative;另一路用于修正anchor框的位置。最后的Proposal层则负责综合positive anchors和边界框偏移量获取proposals,同时剔除太小和超出实际原图像边界的proposals。
在这里插入图片描述
     对于这条路,首先通过1×1卷积对输入特征计算scores进而标记每个anchor;这里使用了18个1×1卷积核,故输出大小为M/16 x N/16x 18,刚好对应了feature maps每一个点都有9个anchors,且每个anchor有两种标记(positive/ negative);而后面接softmax层用于获得positive anchors。
     而softmax前后接一个reshape层的目的是为了便于softmax分类,主要是caffe框架的softmax实现形式所需要,且第二个Reshape将M/16 x N/16的尺寸大小变为M × N大小,用于Proposal层剔除超出实际原图像边界的proposals。

Faster R-CNN 完整详解【论文笔记】_第11张图片
     对于这条路,首先通过1×1卷积用于对输入计算anchor相对于真实边界框的变换量;这里使用了36个1×1卷积核,故输出大小为M/16 x N/16x 36,因为共有9个anchor,每个anchor的位置有四个变量确定。

     Proposal层结合输入的positive anchors和回归后的边界框,首先剔除尺寸非常小的positive anchors和超出实际原图像边界的proposals,之后对剩余的positive anchors进行NMS(nonmaximum suppression),最后取top-N个结果作为Proposal层的输出。

3.3 RoI pooling

     RoI pooling层的输入为feature map和Proposal层的输出,由于Proposal层的输出尺寸大小是相对于M × N的,故本层首先将其resize为M/16 x N/16,然后对于每个输入的候选区域分为m×m(m=7)的网格,对网格的每一份进行max pooling处理。

3.4 Classification

     Classification部分利用获得的候选区域特征图,通过全连接层与softmax层对每个proposal进行分类;同时再次利用边界框回归获得每个proposal的位置偏移量,用于回归更加精确的目标检测框。

     经过这4步则完成了对于一张图片的目标检测。

参考知乎博客,文中图片部分来自源论文,部分来自该知乎博客。(强推)

欢迎关注【OAOA

你可能感兴趣的:(目标检测paper)