Faster RCNN网络简介

介绍

Faster RCNN网络是目标检测领域里程碑式的一个网络。这个网络的提出,真正将深度学习方法端到端的应用到目标检测领域。大幅提升了目标检测的检测速度和检测准确程度。论文的RPN、Anchor等思想对后续的论文和研究工作也有不小的影响。下面,我们一起来看一下Faster RCNN到底是如何具体进行目标检测的。

总体网络结构

在这里插入图片描述
如图所示,我们先总体介绍一下数据流是如何传输的。之后再分开每一部分进行重点介绍。

对于一张输入的彩色图片,首先经过CNN层进行特征提取。在Faster R-CNN的原始论文中,他们使用的是预训练好的VGG16网络用于特征提取。VGG网络去掉全连接层,只保留卷积的部分。这个对应的就是图中的conv layer

卷积层提取完特征之后,对于特征图的数据,分成两部分,分别进入RPN网络(候选区域选择网络),和ROI pooling网络。对于RPN而言,这个网络所做的工作是挑选出图片中可能的候选区域,区分前景和背景。这些信息用来辅助最终的目标检测的决策。ROI Pooling所要做的是收集输入的feature maps和proposals,综合这些信息后提取proposal feature maps,送入后续全连接层判定目标类别。

classifer用于做出最后判断。包括图像类别和位置。

下图可以更清晰的展示整个Faster R-CNN的网络结构。
在这里插入图片描述
下面具体对各个部分进行详细解释。conv layer没什么可解释的,直接从RPN开始。


RPN网络

介绍RPN网络之前,有必要先来谈谈目标检测问题存在的难点。这也是RPN网络提出的创新解决方案的关键所在。

做目标检测,可能存在最大的问题就是尺度变换多样。 比如说对人脸的目标检测而言,一张图片中,人脸有大有小。如何将这些大小不一的图片全部识别出来,并不算太容易。在过去,常常采用的方式是滑移窗口和图像金字塔的形式。通过滑移窗口扫描图像,以及图像金字塔的尺度变化来解决这个多尺度检测问题。然而这种方法无论是速度还是检测效果都不算好。RPN网络通过引入全卷积神经网络(FCN fully convolutional network)实现了一种端到端的候选区域提取。

对于输入图像,首先经过VGG的卷积网络进行特征提取,提取效果如图所示:
在这里插入图片描述
经过VGG网络之后,输入图像长度和宽度变窄,但是特征维度变多。

Anchor

对于目标检测而言,我们需要获取获取目标所在的位置(通常用矩形框来表示),我们这里使用 Δ x _ c e n t e r \Delta x\_center Δ y _ c e n t e r \Delta y\_center Δ w i d t h \Delta width Δ h e i g h t \Delta height 来进行表示。那么如何可以保证多尺度的预测呢?论文中介绍了一个Anchor的概念,将图片中放入很多的Anchor,并且每个Anchor都有不同尺度的纵横比。以此来实现多尺度的预测。

在这里插入图片描述
需要理解的是虽然anchors是基于卷积特征图定义的,但是最终的anchos是相对于原始图片的。由于只有卷积层和池化层,特征图的维度是原始图片的尺寸程比例关系的,即数学的表述,如果图片尺寸W*H,特征图的尺寸是w/r * h/r,其中r是下采样率(subsampling ratio)。如果在卷积特征图空间位置定义anchor,则最终的图片会是由r像素划分的anchors集,在VGG中 r =16。

按照论文中所说的,每一个Anchor都对应不同尺寸和纵横比一共有9个候选框。下图展示了这是怎样一种结构方式:
在这里插入图片描述
按照Faster RCNN原始论文中的数据,如果我们滑移步长为16个像素的话,600*800大小的图像中一共就会有1989个Anchor,每个Anchor都可以生成9个候选框,那么一幅图像一共就有1989*9=17901个候选框了。好像是有点多了,如果这样直接把这么多的候选框都扔到后面进行学习的话,整个网络的速度也不会快到哪里去。所以,我们需要先对候选框进行一些筛选。

候选框的筛选

在这里插入图片描述
首先一点是RPN并不是对所有的Anchor都生成9个候选框的。上图左侧有一个2k scores,表示的是做一个二分类,分别是前景还是背景。只有对于前景的物体才会生成候选框的。对于已经生成的候选框而言,我们需要对那4个位置进行回归的位置微调。

做完这些还不够,我们接下来还需要使用非极大值抑制(Non-maximum suppression)算法来进一步缩小候选框的数量。非极大抑制算法是用来处理Anchor的重叠候选框的算法。只保留IoU大于某一阈值的候选框,其余的候选框全部丢弃。

在原始的Faster RCNN论文中最后选择了2000个候选框送到下一阶段的ROI Pooling中了,如果你觉得太多,也可以将这个数值设置的更小一点。


ROI Pooling

RPN 处理后,可以得到一堆没有 class score 的 object proposals。待处理问题为,如何利用这些边界框 bounding boxes,并分类。

一种最简单的方法是,对每个 porposal,裁剪,并送入pre-trained base 网络,提取特征;然后,将提取特征来训练分类器. 但,这就需要对所有的 2000 个 proposals 进行计算,效率低,速度慢。

Faster R-CNN 则通过重用卷积特征图(conv feature map) 来加快计算效率. 即,采用 RoI(region of interest) Pooling 对每个 proposal 提取固定尺寸的特征图。

但是,我们为什么要用ROI Pooling,其他方法行不行呢?ROI Pooling又到底有什么好处?

先来看一个问题:对于传统的CNN(如AlexNet和VGG),当网络训练好后输入的图像尺寸必须是固定值,同时网络输出也是固定大小的vector or matrix。如果输入图像大小不定,这个问题就变得比较麻烦。有2种解决办法:

  • 从图像中crop一部分传入网络
  • 将图像warp成需要的大小后传入网络

在这里插入图片描述
可以看到无论采取那种办法都不好,要么crop后破坏了图像的完整结构,要么warp破坏了图像原始形状信息。

回忆RPN网络生成的proposals的方法:对positive anchors进行bounding box regression,那么这样获得的proposals也是大小形状各不相同,即也存在上述问题。所以Faster R-CNN中提出了RoI Pooling解决这个问题。

由于proposal是对应M × \times N尺度的,所以首先使用spatial_scale参数将其映射回(M/16) × \times (N/16)大小的feature map尺度;再将每个proposal对应的feature map区域水平分为PooledW × \times pooledH的网格;对网格的每一份都进行max pooling处理(步长为2的max pooling)。
这样处理后,即使大小不同的proposal输出结果都是PooledW × \times pooledH固定大小,实现了固定长度输出。
在这里插入图片描述


分类

对于最后的ROI Pooling的的特征,我们再接两个全连接层。之后用于回归和分类预测任务。注意这里的回归是在RPN基础之上进一步调整。相当于一个精修操作。

在这里插入图片描述

参考资料

[1] 深度学习论文翻译解析(四):Faster R-CNN: Down the rabbit hole of modern object detection
[2] 一文读懂Faster RCNN

发布了189 篇原创文章 · 获赞 233 · 访问量 36万+

猜你喜欢

转载自blog.csdn.net/Einstellung/article/details/103399746
今日推荐