原文地址

http://papers.nips.cc/paper/5638-faster-r-cnn-towards-real-time-object-detection-with-region-proposal-networks.pdf

论文阅读方法

三遍论文法

初识(Abstract & Introduction & Conclusion)

在Faster R-CNN推出时,主流的目标检测网络几乎都是基于Region Proposal Method和Region-based CNN(eg. R-CNN, SPPNet, Fast R-CNN等),Region Proposal Method通常是基于inexpensive features和economical inference方案(eg. Selective Search,一张图像需要2s;EdgeBoxes,一张图像0.2s),对于目前的目标检测网络来说,proposal的生成已经成为了计算瓶颈。

一个原因是这些Region Proposal Methods只能使用CPU,而后续的检测CNN可以使用GPU,因此自然地想到可以在GPU上重新实现,这或许很有效(也过于工程化),但是这忽略了与下游检测网络共享计算的机会。

本文提出了一种算法上的改进:使用Deep Net来计算proposal——“Region Proposal Networks (RPNs)”,它能与后续的目标检测网络共享卷积层权重,因此它的计算成本非常小(每张图10ms)。RPN主要思想是在卷积层输出的特征顶部再额外增加两层:①将每个Conv map位置编码为一个short特征向量(eg. 256-d);②在每个Conv map位置上生成objectness分数(分类前背景)以及k个bounding-box(不同尺度以及长宽比,k通常为9)。

在将RPN与Fast R-CNN统一之后,能够简化整个训练流程:在保持proposals不变的同时,在fine-tuning region proposal与fine-tuning目标检测之间交替训练。这可以很快达到收敛,并且所有task都可以共享卷积特征。

最后得到的Faster RCNN能够达到5-17fps(包括了所有步骤,btw. Fast RCNN生成一张图的proposals就需要2s),并在多个数据集上达到SOTA。

相识(Body)

2. Related Work

作者主要提到了两个方面,首先提了一下最近使用Deep Net来构建proposal的方法(OverFeat和MultiBox),其次提到共享卷积计算已经引起越来越多的关注,因为它使得网络变得高效、快速、准确(eg. OverFeat、SPPNet以及Fast R-CNN)。

3. Region Proposal Networks

RPN以任意尺寸的图像为输入,输出一组矩形object proposals,每个proposals均带有objectness分数(判断前/背景)。
论文解读:Faster R-CNN《Toward Real-Time Object Detection with Region Proposal Network》
为了生成region proposals,在backbone最后一个卷积层(共享)输出的Conv Feature Map滑动"小型网络",如上图所示,在一个n x n的窗口内,使用全连接层(其实就为卷积操作,卷积核大小为nxn)编码一个低维向量(VGG:512-d,ZF:256-d),这个向量被送入两个全连接分支:①box-regression层(reg);②box-classification层(cls)。

本文中n=3,需要注意的是每个区域对应于输入图像中的有效感受野是非常大的(ZF为171,VGG228)。RPN为全卷积网络,结构的具体实现为:1个nxn卷积 + ReLU + 2个1x1卷积(cls + reg)

Translation-Invariant Anchors

对于每个滑动窗口,我们同时预测k个region proposals,因此有4k个coordinates(reg层得到)和2k个score(cls层得到)。生成的k个proposals是相对于k参考框的参数化结果,叫做Anchors

Anchor均位于其对应的滑动窗口中心,并与Scale和长宽比(Aspect ratio)相关,使用3种Scale和3种Aspect ratios,每个位置产生k=9个Anchors。

作者认为这种Anchor本身以及基于Anchor生成proposal的方法都具有translation invariant(平移不变性,即.Anchor的生成与位置无关)。

Loss Function for Learning Region Proposals

对于RPN的训练,首先为每个anchor确定2分类标签(是否为前景)。

确定为正类(前景)有两种情况:①与ground-truth box有最高IOU的Anchors;②与ground-truth box的IoU大于0.7的Anchors

确定为负类的:与ground-truth box的IOU小于0.3的Anchors

一个ground-truth可能导致了多个anchors为正类,其他剩下的anchors在整个训练过程中都不作考虑

根据上面的定义,Loss Function定义为如下形式,类似于Fast R-CNN:
论文解读:Faster R-CNN《Toward Real-Time Object Detection with Region Proposal Network》
其中,i是mini-batch内的anchor的索引,pi 为anchor i的为正类的概率,pi* 为对应的ground-truth(正类为1,负类为0);ti 为代表预测bounding-box的向量(包含4个参数化坐标), ti* 为对应的ground-truth box(只有正类有),整个式子通过Ncls 和Nreg 以及λ进行归一化。关于公式两个部分的解释,可以参照Fast R-CNN的相关章节:https://blog.csdn.net/qq_36560894/article/details/108090046

公开代码中,Ncls为mini-batch大小,为256;Nreg为anchor数量,大概2400左右,因此λ设置为10

为了彻底搞清楚bounding-box回归任务,先补充一下背景知识:
论文解读:Faster R-CNN《Toward Real-Time Object Detection with Region Proposal Network》
如上图所示,A为直接生成的Anchor,G为Ground-Truth,G’为经过修正后的prediction Bounding-box,我们期望A修正后产生Bounding-Box尽可能贴近于Ground-Truth。所以可以做一个线性回归预测(ground-truth与bounding-box位置比较接近时才为线性变换),得到变换数组[dx(A), dy(A), dw(A), dh(A)],进行以下变换:

​ ① 平移:
论文解读:Faster R-CNN《Toward Real-Time Object Detection with Region Proposal Network》
② 缩放:
论文解读:Faster R-CNN《Toward Real-Time Object Detection with Region Proposal Network》

每个矩形框都可以通过一个向量来表示[x,y,w,h],分别代表左上角的坐标(x,y),以及宽w、高h

对应到本文中,[dx(A), dy(A), dw(A), dh(A)]就由t表示,其中ti 和ti* 如下所示:
论文解读:Faster R-CNN《Toward Real-Time Object Detection with Region Proposal Network》
x, xa, x*分别代表预测bounding-box,Anchor,ground-truth(y,w,h也类似)

Optimization

RPN的训练方式类似于Fast R-CNN,为"image-centric"采样策略,但一个mini-batch只包含单张图像的Anchors(正类及负类),由于负类样本远大于正类(很多anchor为背景类),因此在计算mini-batch的loss时,随机采样256个Anchor(正负比例1:1,如果正类的anchor不够,再由负类样本填充)

(0, 0.01)高斯分布初始化权重,使用Image-Net预训练模型,SGD(lr=0.001 + 0.0001, momentum=0.9, weight decay=0.0005)

Sharing Convolutional Features for Region Proposal and Object Detection

接下来需要将RPN融入到Fast R-CNN中,并使得它们能共享卷积计算:这也就意味着在训练时,我们不能独立地训练两个网络(因为它们分别以会不同的方式改变卷积层权重)。需要注意的是,不能简单地把两个网络融合起来,使用反向传播来训练参数,因为Fast R-CNN的训练基于fixed object proposals,不能同时训练Fast RCNN又同时改变proposal的生成机制。

Fast R-CNN训练时,输入为proposals,输出类别bounding-box修正向量,如果在训练时改变proposal的生成机制(这也意味proposal的分布是不确定的),这可能会导致整个网络无法收敛。

这里,作者提出了一个四步训练法,使得RPN能与Fast R-CNN共享权重:

  1. 使用上节的方法先训练一个RPN;(未共享卷积)
  2. 将1中得到的RPN用来生成proposals,用于训练Fast R-CNN;(未共享卷积)
  3. 使用2中的网络(卷积层)初始化一个RPN(新的网络),固定共享卷积层,只对RPN的特定部分进行fine-tuning;(共享卷积)
  4. 使用3中得到RPN生成proposals,固定卷积层,只对Fast R-CNN的特定部分进行fine-tuning(共享卷积)

Experimentation Details

a) 关于Anchors,使用了3种不同的scale(1282, 2562, 5122)和aspect ratio(1:2, 2:1, 1:1),需要注意的是,RPN只使用了nxn窗口内的feature map用于生成Anchor,这也就意味着在生成一些比较大的proposal时,RPN的感受野只包含了物体的中心区域,并未完全囊括物体区域,不过实验证明,RPN能够具有这样的能力
论文解读:Faster R-CNN《Toward Real-Time Object Detection with Region Proposal Network》
上图为一些预测结果,可以看到本文提出的方法能够产生各种各样的bounding-box。
论文解读:Faster R-CNN《Toward Real-Time Object Detection with Region Proposal Network》
上表为在ZF网络的实验中,每种anchor生成的平均proposal,可以看到,RPN具有很强的调节能力(产生不同的proposal)。

b) 关于如何处理那些越过图像边界的Anchor,在训练时会直接忽略,不考虑它们对于loss的贡献;在测试时,使用训练好的RPN生成proposal,如果它们产生了越过边界的Anchor,会进行修正,将其剪切到边界位置。

c) RPN生成的proposals有很多是相互重叠的,基于cls层生成的类别分数使用NMS(非极大抑制,阈值设为0.7),这样会剩下只有大概2k个proposal,在NMS后,选取top-N个proposal用于后续的检测任务(Fast R-CNN在训练时使用2k个proposals)。

4. Experiments

关于实验部分,不过多赘述,只简单介绍一下结果,有兴趣可以参见原文对应段落

论文解读:Faster R-CNN《Toward Real-Time Object Detection with Region Proposal Network》
首先进行实验证明RPN相比于传统的Region Proposal Methods的优势,接下来进行消融实验,分别证明共享卷积层的优势以及RPN各个组成部分的有效性,实验结果如上表所示。

论文解读:Faster R-CNN《Toward Real-Time Object Detection with Region Proposal Network》
上面两张表展示了Faster RCNN在PASCAL VOC07和12数据集上的结果以及与Fast的比较,可以看到无论是mAP还是速度都提升了不少。

论文解读:Faster R-CNN《Toward Real-Time Object Detection with Region Proposal Network》
上表为具体的速度分析,可以看到Faster R-CNN使用VGG作为Backbone为5fps,ZF能达到17fps。
论文解读:Faster R-CNN《Toward Real-Time Object Detection with Region Proposal Network》
上图为Recall-to-IOU指标图,用于衡量Region Proposal Method的好坏。

论文解读:Faster R-CNN《Toward Real-Time Object Detection with Region Proposal Network》
对比当时的one-stage检测方法(当时SSD、YOLO这些大杀器还没出世)

回顾(Review)

Faster RCNN作为RCNN系列的最终章,发表于NeurIPS2015。将Fast RCNN中用于生成Proposal的Selective Search算法替换为RPN,其与后面的检测网络共享卷积计算,这即提高了精度也提升了速度。

整个RCNN系列就此告一段落,每一年的RCNN(R-CNN、Fast R-CNN、Faster R-CNN)都在之前的工作上融入了新的思想,不断地改进,不断地提升性能。虽然two-stage检测网络的训练过程不是end-to-end,但是它们的训练策略也在变得越来越简便。最终,Faster RCNN中的所有模块全部为神经网络(CNN),这也能看出深度学习在计算机视觉领域越来越起到主导作用。

参考

[1] https://zhuanlan.zhihu.com/p/31426458 一文读懂Faster RCNN 作者:白裳

代码

先贴上一份GitHub代码,有空再复现一下。


以上为个人的浅见,水平有限,如有不对,望大佬们指点。

未经本人同意,请勿转载,谢谢。

相关文章:

  • 2021-09-17
  • 2021-09-17
  • 2021-06-01
  • 2021-10-13
  • 2021-11-16
  • 2021-09-02
  • 2021-12-29
  • 2021-07-15
猜你喜欢
  • 2021-09-15
  • 2021-08-02
相关资源
相似解决方案