目录
- 摘要
- Abstract
- 一、CNN复习
- 二、目标检测
- 2.1 背景
- 2.2 目标检测发展脉络
- 2.2.1传统目标检测算法
- 2.2.2 Anchor-Based中的Two-stage目标检测算法
- 三、文献阅读:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
- 3.1 摘要
- 3.2 背景
- 3.3 解决方案
- 3.4 Faster R-CNN
摘要
Abstract
一、CNN复习
一个卷积神经网络主要由以下5层组成:
数据输入层/ Input layer
卷积计算层/ CONV layer
ReLU激励层 / ReLU layer
池化层 / Pooling layer
全连接层 / FC layer
- 数据输入层
该层要做的处理主要是对原始图像数据进行预处理,其中包括:
去均值:把输入数据各个维度都中心化为0,如下图所示,其目的就是把样本的中心拉回到坐标系原点上。
归一化:幅度归一化到同样的范围,如下所示,即减少各维度数据取值范围的差异而带来的干扰,比如,我们有两个维度的特征A和B,A范围是0到10,而B范围是0到10000,如果直接使用这两个特征是有问题的,好的做法就是归一化,即A和B的数据都变为0到1的范围。
PCA/白化:用PCA降维;白化是对数据各个特征轴上的幅度归一化
去均值与归一化效果图:
去相关与白化效果图:
2. 卷积计算层
这一层就是卷积神经网络最重要的一个层次,也是“卷积神经网络”的名字来源。
在这个卷积层,有两个关键操作:
局部关联。每个神经元看做一个滤波器(filter)
窗口(receptive field)滑动, filter对局部数据计算
先介绍卷积层遇到的几个名词:
深度/depth(解释见下图)
步幅/stride (窗口一次滑动的长度)
填充值/zero-padding
还记得我们在第一篇中提到的过滤器、感受野和卷积吗?很好。现在,要改变每一层的行为,有两个主要参数是我们可以调整的。选择了过滤器的尺寸以后,我们还需要选择步幅(stride)和填充(padding)。
步幅控制着过滤器围绕输入内容进行卷积计算的方式。在第一部分我们举的例子中,过滤器通过每次移动一个单元的方式对输入内容进行卷积。过滤器移动的距离就是步幅。在那个例子中,步幅被默认设置为1。步幅的设置通常要确保输出内容是一个整数而非分数。让我们看一个例子。想象一个 7 x 7 的输入图像,一个 3 x 3 过滤器(简单起见不考虑第三个维度),步幅为 1。这是一种惯常的情况。
所以,正如你能想到的,感受野移动了两个单元,输出内容同样也会减小。注意,如果试图把我们的步幅设置成 3,那我们就会难以调节间距并确保感受野与输入图像匹配。正常情况下,程序员如果想让接受域重叠得更少并且想要更小的空间维度(spatial dimensions)时,他们会增加步幅。
填充值是什么呢?
在此之前,想象一个场景:当你把 5 x 5 x 3 的过滤器用在 32 x 32 x 3 的输入上时,会发生什么?输出的大小会是 28 x 28 x 3。注意,这里空间维度减小了。如果我们继续用卷积层,尺寸减小的速度就会超过我们的期望。在网络的早期层中,我们想要尽可能多地保留原始输入内容的信息,这样我们就能提取出那些低层的特征。比如说我们想要应用同样的卷积层,但又想让输出量维持为 32 x 32 x 3 。为做到这点,我们可以对这个层应用大小为 2 的零填充(zero padding)。零填充在输入内容的边界周围补充零。如果我们用两个零填充,就会得到一个 36 x 36 x 3 的输入卷。
如果我们在输入内容的周围应用两次零填充,那么输入量就为 32×32×3。然后,当我们应用带有 3 个 5×5×3 的过滤器,以 1 的步幅进行处理时,我们也可以得到一个 32×32×3 的输出
如果你的步幅为 1,而且把零填充设置为
K 是过滤器尺寸,那么输入和输出内容就总能保持一致的空间维度。
计算任意给定卷积层的输出的大小的公式是
其中 O 是输出尺寸,K 是过滤器尺寸,P 是填充,S 是步幅。
二、目标检测
2.1 背景
目标检测任务是找出图像或视频中人们感兴趣的物体,并同时检测出它们的位置和大小。不同于图像分类任务,目标检测不仅要解决分类问题,还要解决定位问题,是属于Multi-Task的问题。如下图1-1所示:
作为计算机视觉的基本问题之一,目标检测构成了许多其它视觉任务的基础,例如实例分割,图像标注和目标跟踪等等;从检测应用的角度看:行人检测、面部检测、文本检测、交通标注与红绿灯检测,遥感目标检测统称为目标检测的五大应用。
2.2 目标检测发展脉络
目标检测的发展脉络可以划分为两个周期:传统目标检测算法时期(1998年-2014年)和基于深度学习的目标检测算法时期(2014年-至今)。而基于深度学习的目标检测算法又发展成了两条技术路线:Anchor based方法(一阶段,二阶段)和Anchor free方法。下图2-1展示了从2001年至2021年目标检测领域中,目标检测发展路线图。
2.2.1传统目标检测算法
不同于现在的卷积神经网络可以自动提取高效特征进行图像表示,以往的传统目标检测算法主要基于手工提取特征。传统检测算法流程可概括如下:
选取感兴趣区域,选取可能包含物体的区域
对可能包含物体的区域进行特征提取
对提取的特征进行检测分类
Viola Jones Detector
VJ[1] (Viola Jones)检测器采用滑动窗口的方式以检查目标是否存在窗口之中,该检测器看起来似乎很简单稳定,但由于计算量庞大导致时间复杂度极高,为了解决该项问题,检测器通过合并三项技术极大提高了检测速度,这三项技术分别是:1)特征的快速计算方法-积分图,2)有效的分类器学习方法-AdaBoost,以及3)高效的分类策略-级联结构的设计。
HOG Detector
HOG[2](Histogram of Oriented Gradients)检测器于2005年提出,是当时尺度特征不变性(Scale Invariant Feature Transform)和形状上下文(Shape Contexts)的重要改进,为了平衡特征不变性(包括平移,尺度,光照等)和非线性(区分不同的对象类别),通过在均匀间隔单元的密集网格上计算重叠的局部对比度归一化来提高检测准确性,因此检测器是基于本地像素块进行特征直方图提取的一种算法,它在目标局部变形和受光照影响下都有很好的稳定性。为后期很多检测方法奠定了重要基础,相关技术被广泛应用于计算机视觉各大应用。
DPM Detector
作为VOC 2007-2009目标检测挑战赛的冠军,DPM[3] (Deformable Parts Model)是目标检测传统算法中当之无愧的SOTA(State Of The Art)算法。于2008年提出,相比于,作了很多改进,因此该算法可以看作的延申算法。算法由一个主过滤器(Root-filter)和多个辅过滤器(Part-filters)组成,通过硬负挖掘(Hard negative mining),边框回归(Bounding box regression)和上下文启动(Context priming)技术改进检测精度。作为传统目标检测算法的SOTA,方法运算速度快,能够适应物体形变,但它无法适应大幅度的旋转,因此稳定性差。
局限性
基于手工提取特征的传统目标检测算法主要有以下三个缺点:
识别效果不够好,准确率不高
计算量较大,运算速度慢
可能产生多个正确识别的结果
2.2.2 Anchor-Based中的Two-stage目标检测算法
基于手工提取特征的传统目标检测算法进展缓慢,性能低下。直到2012年卷积神经网络(Convolutional Neural Networks, CNNs)的兴起将目标检测领域推向了新的台阶。基于CNNs的目标检测算法主要有两条技术发展路线:anchor-based和anchor-free方法,而anchor-based方法则包括一阶段和二阶段检测算法(二阶段目标检测算法一般比一阶段精度要高,但一阶段检测算法速度会更快)。
二阶段检测算法主要分为以下两个阶段
Stage1:从图像中生成region proposals
Stage2:从region proposals生成最终的物体边框。
RCNN
【简介】 RCNN[4]由Ross Girshick于2014年提出,RCNN首先通过选择性搜索算法Selective Search从一组对象候选框中选择可能出现的对象框,然后将这些选择出来的对象框中的图像resize到某一固定尺寸的图像,并喂入到CNN模型(经过在ImageNet数据集上训练过的CNN模型,如AlexNet)提取特征,最后将提取出的特征送入到分类器来预测该对象框中的图像是否存在待检测目标,并进一步预测该检测目标具体属于哪一类。
【性能】 RCNN算法在VOC-07数据集上取得了非常显著的效果,平均精度由33.7%(DPM-V5, 传统检测的SOTA算法)提升到58.5%。相比于传统检测算法,基于深度学习的检测算法在精度上取得了质的飞跃。
【不足】 虽然RCNN算法取得了很大进展,但缺点也很明显:重叠框(一张图片大2000多个候选框)特征的冗余计算使得整个网络的检测速度变得很慢(使用GPU的情况下检测一张图片大约需要14S)。
SPPNet
【简介】 SPPNet[5]提出了一种空间金字塔池化层(Spatial Pyramid Pooling Layer, SPP)。它的主要思路是对于一副图像分成若干尺度的图像块(比如一副图像分成1份,4份,8份等),然后对每一块提取的特征融合在一起,从而兼顾多个尺度的特征。SPP使得网络在全连接层之前能生成固定尺度的特征表示,而不管输入图片尺寸如何。当使用SPPNet网络用于目标检测时,整个图像只需计算一次即可生成相应特征图,不管候选框尺寸如何,经过SPP之后,都能生成固定尺寸的特征表示图,这避免了卷积特征图的重复计算。
【性能】 相比于RCNN算法,SPPNet在Pascal-07数据集上不牺牲检测精度(VOC-07, mAP=59.2%)的情况下,推理速度提高了20多倍。
【不足】 和RCNN一样,SPP也需要训练CNN提取特征,然后训练SVM分类这些特征,这需要巨大的存储空间,并且多阶段训练的流程也很繁杂。除此之外,SPPNet只对全连接层进行微调,而忽略了网络其它层的参数。
为了解决以上存在的一些不足,2015年R. Girshick等人提出Fast RCNN
Fast RCNN
【简介】 Fast RCNN[6]网络是RCNN和SPPNet的改进版,该网路使得我们可以在相同的网络配置下同时训练一个检测器和边框回归器。该网络首先输入图像,图像被传递到CNN中提取特征,并返回感兴趣的区域ROI,之后再ROI上运用ROI池化层以保证每个区域的尺寸相同,最后这些区域的特征被传递到全连接层的网络中进行分类,并用Softmax和线性回归层同时返回边界框。
【性能】 Fast RCNN在VOC-07数据集上将检测精度mAP从58.5%提高到70.0%,检测速度比RCNN提高了200倍。
【不足】 Fast RCNN仍然选用选择性搜索算法来寻找感兴趣的区域,这一过程通常较慢,与RCNN不同的是,Fast RCNN处理一张图片大约需要2秒,但是在大型真实数据集上,这种速度仍然不够理想。
那么问题来了: “我们可以使用CNN模型来直接生成候选框吗?”,基于此,Faster RCNN的提出完美回答这一问题。
Faster RCNN
【简介】 Faster RCNN[7]是第一个端到端,最接近于实时性能的深度学习检测算法,该网络的主要创新点就是提出了区域选择网络用于申城候选框,能几大提升检测框的生成速度。该网络首先输入图像到卷积网络中,生成该图像的特征映射。在特征映射上应用Region Proposal Network,返回object proposals和相应分数。应用Rol池化层,将所有proposals修正到同样尺寸。最后,将proposals传递到完全连接层,生成目标物体的边界框。
【性能】 该网络在当时VOC-07,VOC-12和COCO数据集上实现了SOTA精度,其中COCO mAP@.5=42.7%, COCO mAP@[.5,.95]=21.9%, VOC07 mAP=73.2%, VOC12 mAP=70.4%, 17fps with ZFNet
【不足】 虽然Faster RCNN的精度更高,速度更快,也非常接近于实时性能,但它在后续的检测阶段中仍存在一些计算冗余;除此之外,如果IOU阈值设置的低,会引起噪声检测的问题,如果IOU设置的高,则会引起过拟合。
三、文献阅读:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
3.1 摘要
先进的目标检测网络依赖于区域建议算法来假设目标位置。SPPnet和Fast R-CNN等技术的进步降低了这些检测网络的运行时间,使得候选区域计算成为瓶颈。在这项工作中,我们引入了一个区域建议网络( RPN ),它与检测网络共享全图卷积特征,从而实现了几乎无成本的区域建议。RPN是一个全卷积网络,它同时预测每个位置的对象边界和对象性分数。对RPN进行端到端的训练,生成高质量的区域提议,并由Fast R - CNN用于检测。我们进一步通过共享它们的卷积特征将RPN和Fast R - CNN合并到一个单一的网络中-使用最近流行的具有"注意力"机制的神经网络术语,RPN组件告诉统一网络在哪里看。对于非常深的VGG - 16模型,我们的检测系统在GPU上的帧率为5fps (包括所有步骤),同时在PASCAL VOC 2007,2012和MS COCO数据集上达到了最先进的目标检测精度,每个图像只有300个候选框。
3.2 背景
最近在目标检测方面的进展是由区域建议方法和基于区域的卷积神经网络( RCNNs )的成功推动的[ 5 ]。虽然基于区域的CNN如最初在中开发的那样在计算上很昂贵,但由于在提案之间共享卷积,它们的成本已经大大降低。最新的化身Fast R- CNN,在忽略区域建议所花费的时间的情况下,使用非常深的网络实现了接近实时的速率。目前,提案是最先进的检测系统中的测试时间计算瓶颈。
区域推荐方法通常依赖于廉价的特征和经济的推理方案。选择性搜索是最流行的方法之一,它基于工程化的低层特征贪婪地合并超像素。然而,与高效的检测网络相比,选择性搜索的速度要慢一个数量级,在CPU实现中每幅图像的速度为2秒。Edge Boxes目前在提案质量和速度之间提供了最佳折衷,每张图片0.2秒。尽管如此,区域建议步骤仍然消耗与检测网络一样多的运行时间。
3.3 解决方案
人们可能会注意到,基于区域的快速CNN利用了GPU的优势,而研究中使用的区域建议方法是在CPU上实现的,因此这种运行时比较是不公平的。加速提案计算的一个显而易见的方法是将其重新实现为GPU。这可能是一个有效的工程解决方案,但重新实现忽略了下游的检测网络,因此错过了共享计算的重要机会。
在本文中,我们展示了使用深度卷积神经网络的算法更改计算提案-导致一个优雅和有效的解决方案,其中提案计算在给定检测网络的计算量的情况下几乎是免费的。为此,我们引入了新颖的区域建议网络( RPN ),它与最先进的目标检测网络共享卷积层。通过在测试时共享卷积,计算提案的边际成本是很小的(例如,每幅图像10ms)。
3.4 Faster R-CNN
本文介绍了Faster R-CNN模型,这是一种基于区域的目标检测网络。该模型由两个主要部分组成:区域建议网络(RPN)和快速R-CNN检测网络。RPN是一个全卷积网络,可以预测图像中每个位置的物体边界和物体得分。RPN与Fast R-CNN网络共享卷积特征,支持无成本区域提议。RPN组件使用带有“注意力”机制的神经网络概念,告诉统一网络去哪里看。该模型在各种数据集上实现了最先进的目标检测精度,包括PASCAL VOC和MS COCO,在GPU上的帧率为5fps。
RPN技术的引入,极大地提升了目标检测的速度和准确性,使得目标检测算法在实际应用中取得了显著的进步。
RPN的核心思想是利用卷积神经网络(CNN)的特征共享机制,将区域提议的生成与后续的目标检测任务紧密结合。具体来说,RPN是一个全卷积网络,它在CNN的特征图上并行地预测目标边界和对象性得分。这种设计使得RPN能够在几乎不增加计算成本的情况下,生成高质量的区域提议。
RPN的基本结构包括一个3x3的卷积层,用于提取特征,以及两个平行的1x1的卷积层,分别用于预测边界框的坐标和对象性得分。在训练过程中,RPN通过端到端的方式进行训练,以生成高质量的区域提议。这些提议随后被传递给Fast R-CNN进行目标检测。
此外,RPN还引入了一种称为“锚点”(anchors)的机制,用于处理不同尺度和纵横比的目标。在每个滑动窗口位置,RPN预设了多个不同尺度和纵横比的锚点,以覆盖可能的目标形态。这使得RPN能够更准确地预测目标的位置和大小。
通过与Fast R-CNN的结合,RPN进一步提高了目标检测的准确性。通过将RPN和Fast R-CNN合并为一个单一的网络,并共享它们的卷积特征,可以实现更高效的计算。这种合并的方式使得整个检测网络能够在关注重要区域的同时,减少不必要的计算开销。
在实验结果方面,使用RPN的Faster R-CNN在多个数据集上取得了领先的目标检测性能。在PASCAL VOC 2007、2012和MS COCO等数据集上,Faster R-CNN仅使用300个提议就能达到最先进的检测精度。此外,在ILSVRC和COCO2015竞赛中,Faster R-CNN和RPN也是多个赛道第一名获奖作品的基础。
总的来说,RPN技术通过结合特征共享、锚点机制和与Fast R-CNN的合并,实现了高效且准确的目标检测。它的引入不仅提高了目标检测的速度和精度,还为后续的目标检测算法研究提供了重要的启示和参考。