特征金字塔特征用于目标检测

栏目: 数据库 · 发布时间: 7年前

内容简介:特征金字塔特征用于目标检测

前言:

这篇文章主要使用 特征金字塔网络 来融合多层特征,改进了CNN特征提取。作者也在流行的 Fast Faster R-CNN 上进行了实验,在 COCO 数据集上测试的结果现在排名第一,其中隐含的说明了其在 小目标检测 上取得了很大的进步。其实整体思想比较简单,但是实验部分非常详细和充分。

摘要:

特征金字塔是多尺度目标检测系统中的一个基本组成部分。近年来 深度学习 目标检测特意回避金字塔特征表示,因为 特征金字塔在计算量和内存上很昂贵。所以作者利用了深度卷积神经网络固有的多尺度、多层级的金字塔结构去构建特征金字塔网络。使用一种自上而下的侧边连接,在所有尺度构建了高级语义特征图,这种结构就叫 特征金字塔网络 FPN )。其在特征提取上改进明显,把 FPN 用在 Faster R-CNN 上,在 COCO 数据集上,结果超过了目前所有的单模型(single-model)检测方法,而且在GPU上可以跑到5 FPS。

概述:

多尺度目标检测是 计算机视觉 领域的一个基础且具挑战性的课题。在图像金字塔基础上构建的特征金字塔(featurized image pyramids ,图1(a))是传统解决思路,具有一定意义的尺度不变性。直观上看,这种特性使得模型可以检测大范围尺度的图像。

Featurized image pyramids 主要在人工特征中使用,比如DPM就要用到它产生密集尺度的样本以提升检测水平。目前人工特征式微,深度学习的CNN特征成为主流,CNN特征的鲁棒性很好,刻画能力强。即使如此,仍需要金字塔结构去进一步提升准确性,尤其在多尺度检测上。金字塔结构的优势是其产生的特征每一层都是语义信息加强的,包括高分辨率的低层。

对图像金字塔每一层都处理有很大的局限性,首先运算耗时会增加4倍,训练深度网络的时候太吃显存,几乎没法用,即使用了,也只能在检测的时候。因为这些原因,Fast/Faster R-CNN 都没使用featurized image pyramids 。

图像金字塔并不是多尺度特征表征的唯一方式,CNN计算的时候本身就存在多级特征图(feature map hierarchy),且不同层的特征图尺度就不同,形似金字塔结构(图1(b))。结构上虽不错,但是前后层之间由于不同深度(depths)影响,语义信息差距太大,主要是高分辨率的低层特征很难有代表性的检测能力。

SSD方法在借鉴利用featurized image pyramid上很是值得说,为了避免利用太低层的特征,SSD从偏后的conv4_3开始,又往后加了几层,分别抽取每层特征,进行综合利用(图1(c))。但是SSD对于高分辨率的底层特征没有再利用,而这些层对于检测小目标很重要。 

特征金字塔特征用于目标检测

这篇文章的特征金字塔网络(图1(d))做法很简单,如下图所示。 把低分辨率、高语义信息的高层特征和高分辨率、低语义信息的低层特征进行自上而下的侧边连接,使得所有尺度下的特征都有丰富的语义信息 。这种结构是在CNN网络中完成的,和前文提到的基于图片的金字塔结构不同,而且完全可以替代它。

本文特征金字塔网络自上而下的结构,和某些论文有一定的相似之处,但二者目的不尽不同。作者做了检测和分割实验, COCO数据集 的结果超过了现有水平,具体结果参见实验部分。 值得说的是,本方法在训练的时间和显存使用上都是可接受的,检测的时间也没增加。

特征金字塔特征用于目标检测

图1. (a)使用图像金字塔建立特征金字塔,每个独立的图像尺度上计算特征,这计算特别缓慢;(b)最近的检测系统已选择只使用单尺度特征,以便更快的检测;(c)另一种是利用金字塔特征层次计算的ConvNet当作一个特征化的图像金字塔;(d)提出的特征金字塔网络(FPN)如(b)和(c),但更准确。在这个图中,特征图由蓝色轮廓和较粗的轮廓表示更高层次的特征。

特征金字塔网络:

文章的目标是利用CNN的金字塔层次结构特性(具有从低到高级的语义),构建具有高级语义的特征金字塔。得到的特征金字塔网络( FPN )是通用的,但在文中,作者先在 RPN网络 Fast R-CNN 中使用这一成果,也将其用在instance segmentation proposals 中。

该方法将任意一张图片作为输入,以全卷积的方式在多个层级输出成比例大小的特征图,这是独立于CNN骨干 架构 (本文为 ResNets )的。具体结构如图图 2。 

特征金字塔特征用于目标检测

图2 Top:一个自上而下的架构与skip连接,其预测是在最好的层;Bottom:模型有一个类似的结构,但利用它作为一个特征金字塔,在各级独立作出预测。

自下而上的路径:

CNN 的前馈计算就是自下而上的路径,特征图经过卷积核计算,通常是越变越小的,也有一些特征层的输出和原来大小一样,称为相同网络阶段(same network stage )。对于本文的特征金字塔,作者为每个阶段定义一个金字塔级别, 然后选择每个阶段的最后一层的输出作为特征图的参考集。 这种选择是很自然的,因为每个阶段的最深层应该具有最强的特征。具体来说,对于Res-Nets,作者使用了每个阶段的最后一个残差结构的特征激活输出。将这些残差模块输出表示为{C2, C3, C4, C5},对应于conv2,conv3,conv4和conv5的输出,并且注意它们相对于输入图像具有{4, 8, 16, 32}像素的步长。 考虑到内存占用,没有将conv1包含在金字塔中。

自上而下的路径和横向连接:

自上而下的路径(the top-down pathway )是如何去结合低层高分辨率的特征呢?方法就是把更抽象,语义更强的高层特征图进行上采样,然后把该特征横向连接(lateral connections )至前一层特征,因此高层特征得到加强。值得注意的是, 横向连接的两层特征在空间尺寸上要相同 。这样做主要是为了利用底层的定位细节信息。

图 3显示连接细节。把高层特征做2倍上采样(最邻近上采样法),然后将其和对应的前一层特征结合(前一层要经过1 * 1的卷积核才能用,目的是改变channels,是要和后一层的channels相同),结合方式就是做像素间的加法。重复迭代该过程,直至生成最精细的特征图。迭代开始阶段,作者在C5层后面加了一个1 * 1的卷积核来产生最粗略的特征图,最后作者用3 * 3的卷积核去处理已经融合的特征图(为了消除上采样的混叠效应),以生成最后需要的特征图。{C2, C3, C4, C5}层对应的融合特征层为{P2, P3, P4, P5},对应的层空间尺寸是相通的。

特征金字塔特征用于目标检测

图3 一个building  block ,说明横向连接和自上而下的途径,合并的加法

金字塔结构中所有层级共享分类层(回归层),就像featurized image pyramid 中所做的那样。作者固定所有特征图中的维度(通道数,表示为d)。作者在本文中设置d=256,因此所有额外的卷积层(比如P2)具有256通道输出。 这些额外层没有用非线性,而非线性会带来一些影响。

实际应用:

本文方法在理论上早 CNN 中是通用的,作者将其首先应用到了 RPN Fast R-CNN 中,应用中尽量做较小幅度的修改。

Faster R-CNN+Resnet-101

FPN 如何应用在 RPN Fast R-CNN  合起来就是 Faster R-CNN )?首先要明白 Faster R-CNN + Resnet-101 的结构。

直接理解就是把 Faster-RCNN 中原有的 VGG 网络换成 ResNet-101 ResNet-101 结构如下图:  

特征金字塔特征用于目标检测

Faster-RCNN 利用conv1到conv4-x的91层为共享卷积层,然后从conv4-x的输出开始分叉,一路经过 RPN 网络进行区域选择,另一路直接连一个 ROI   Pooling 层,把 RPN 的结果输入 ROI Pooling 层,映射成7 * 7的特征。然后所有输出经过conv5-x的计算,这里conv5-x起到原来全连接层(FC)的作用。最后再经分类器和边框回归得到最终结果。整体框架用下图表示: 

特征金字塔特征用于目标检测

RPN中的特征金字塔网络

RPN Faster R-CNN 中用于区域选择的子网络,具体原理就不详细解释了,可阅读论文和参考博客:faster-rcnn 之 RPN网络的结构解析 。

RPN 是在一个13 * 13 * 256的特征图上应用9种不同尺度的anchor,本文另辟蹊径,把特征图弄成多尺度的,然后固定每种特征图对应的anchor尺寸。也就是说,在每一个金字塔层级应用了单尺度的anchor,{P2, P3, P4, P5, P6}分别对应的anchor尺度为{32^2, 64^2, 128^2, 256^2, 512^2 },当然目标不可能都是正方形,本文仍然使用三种比例{1:2, 1:1, 2:1},所以金字塔结构中共有15种anchors。 

训练中,把重叠率( IoU )高于0.7的作为正样本,低于0.3的作为负样本。特征金字塔网络之间有参数共享,其优秀表现使得所有层级具有相似程度的语义信息。具体性能在实验中评估。

Fast R-CNN 中的特征金字塔网络

Fast R-CNN 的具体原理也不详解了,参考我的 知乎 或者 开发者头条  ,其中很重要的是 ROI Pooling 层,需要对不同层级的金字塔制定不同尺度的 ROI

ROI Pooling 层使用region proposal的结果和中间的某一特征图作为输入,得到的结果经过分解后分别用于分类结果和边框回归。

然后作者想的是,不同尺度的 ROI 使用不同特征层作为 ROI pooling 层的输入,大尺度 ROI 就用后面一些的金字塔层,比如P5;小尺度 ROI 就用前面一点的特征层,比如P4。那怎么判断 ROI 改用那个层的输出呢?这里作者定义了一个系数Pk,其定义为: 

特征金字塔特征用于目标检测

224是ImageNet的标准输入,k0是基准值,设置为5,代表P5层的输出(原图大小就用P5层),w和h是 ROI 区域的长和宽,假设 ROI 是112 * 112的大小,那么k = k0-1 = 5-1 = 4,意味着该 ROI 应该使用P4的特征层。k值应该会做取整处理,防止结果不是整数。

然后,因为作者把conv5也作为了金字塔结构的一部分,那么从前全连接层的那个作用怎么办呢?这里采取的方法是增加两个1024维的轻量级全连接层,然后再跟上分类器和边框回归,认为这样还能使速度更快一些。

这个是 FPN 用于目标分割的架构图:

特征金字塔特征用于目标检测

实验结果:

特征金字塔特征用于目标检测

特征金字塔特征用于目标检测

特征金字塔特征用于目标检测

特征金字塔特征用于目标检测

特征金字塔特征用于目标检测

作者简介:

闵茹来自上海某高校的研究生(不愿透露个人详细信息),她主要方向是多目标检测。她将本次共享投稿在我们《读者也是作者》专栏,在此非常感谢她对“计算机视觉战队”平台的支持,希望今天的分享可以给大家带来一些帮助,也希望更多的读者在本专栏分享更多的知识和感想,谢谢!

特征金字塔特征用于目标检测


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Code

Code

Charles Petzold / Microsoft Press / 2000-10-21 / USD 29.99

Paperback Edition What do flashlights, the British invasion, black cats, and seesaws have to do with computers? In CODE, they show us the ingenious ways we manipulate language and invent new means of ......一起来看看 《Code》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码