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

栏目: 数据库 · 发布时间: 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 用于目标分割的架构图:

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

实验结果:

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

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

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

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

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

作者简介:

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

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


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

查看所有标签

猜你喜欢:

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

硅谷增长黑客实战笔记

硅谷增长黑客实战笔记

曲卉 / 机械工业出版社 / 2018-4-10 / 65.00元

增长黑客这个词源于硅谷,简单说,这是一群以数据驱动营销、以迭代验证策略,通过技术手段实现爆发式增长的新型人才。近年来,互联网公司意识到这一角色可以发挥四两拨千斤的作用,因此对该职位的需求也如井喷式增长。 本书作者曾在增长黑客之父肖恩•埃利斯麾下担任增长负责人,用亲身经历为你总结出增长黑客必备的套路、内力和兵法。本书不仅有逻辑清晰的理论体系、干货满满的实践心得,还有Pinterest、SoFi......一起来看看 《硅谷增长黑客实战笔记》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

随机密码生成器
随机密码生成器

多种字符组合密码

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具