Detection论文总结(1)Feature Pyramid Networks for Object Detection

文章地址:arxiv

Feature Pyramid Networks for Object Detection

首先,特征金字塔对于不同尺度的检测问题来说是非常基本的组件,而不同大小的目标往往对应在不同的特征层当中。然而,在最近的一些深度学习检测模型中很少运用它,因为将不同尺度的图片依次计算是很费时费资源的,所以最近的一些模型很少用到这个方法。我们设计了一个top-down有lateral connections的结构FPN来利用很少的额外资源计算特征金字塔。在Faster RCNN模型上测试可以得到胜过COCO2016的冠军,并有6FPS的处理速度。

引言

识别不同大小的物体一向目标检测领域的一大挑战,而特征金字塔则是解决这个问题的一个基本方法,每一层对应不同尺寸的物体。在手工提取特征时代特征金字塔就应用得十分普遍。虽然后来的卷积神经网络在尺度上更具有鲁棒性,但依然需要特征金字塔来获得更准确的结果。ImageNet和COCO上所有顶级模型都在特征金字塔上进行了多尺度测试。其主要优势在于,它是一种多尺度特征表示,且每一尺度上语义信息都特别强烈

然而,这种方式一个最大的问题在于其测试时间(Inference time)大大增加,在实际场景下应用受阻;训练时存储占用太多,端到端训练不现实;如果仅在测试时使用特征金字塔,又会导致训-测不统一。因此Fast & Faster RCNN默认都不使用它。

除了分别计算每层特征外,可以利用CNN不同层输出的不同大小的中间特征。但是,由于深度的不同,这些特征之间存在着语义表示能力的偏差。高分辨率的特征图往往伴随着低级别的特征,这会损害其模型的识别能力。SSD的方案是放弃低级特征,从达到特定深度的某一层才开始利用特征,但是这样不利于识别小物体

本文的目标是要建立一个模型,可以得到一个特征金字塔,使其中每一层都具有相同丰富的表示能力,并且只附加了很少的推断时间,然后可以在每一层分别作出预测。

相关研究

SIFT与HOG是之前常用的人设特征,基本都是在图片金字塔上密集运算得到特征金字塔,而其快速计算方法则是计算顶层之后再做插值计算下层。利用多层特征的网络也不在少数,如分割的FCN,SSD等等,还有像U-Net等网络研究关于双向与跳跃连接的内容。

特征金字塔网络

文章希望构建一个每一层都有强语义信息的特征金字塔,以滑动窗RPNregion-based检测器为例。同时在第6节也讨论了实例分割方面的问题。文章以单尺度图片输入,用一个全卷积网络输出不同层次的特征,这个过程与总面积backbone是相独立的。文中所用的网络结构是ResNets。模型结构包括从底向上的通道,从上而下的通道,和横向连接

  • 前向网络就是backbone主干网络,其中输出了每次尺度变化2倍的多个特征图。有许多不同的位置输出相同的分辨率,我们称这些层是在同一个stage。对于我们的特征金字塔,我们取一个stage的最后一个输出层的特征,毕竟最深层有最强的表现力。对ResNets而言,我们取conv2-5的输出,不取conv1是因为它的存储占用太大了。
  • 反向重构与横向连接。通过上采样我们将低分辨率特征图变为高分辨率,使其具有更强语义。简单起见我们用了最近邻上采样方法。然而考虑到在多次上下采样之后定位上会出现偏差,我们利用横向连接来细化其具体每个位置的信息,此处用一个1x1的卷积可以修正通道维度(我个人觉得还有数据分布的问题)。我们会给每一个相加之后的特征图进行一个3x3的卷积得到最后的特征图,这样可以减少上下采样的叠加影响。所有额外的Conv层都是256通道,并且没有激活函数,这个实验验证影响不大。

作者表示simplicity是他们很看重的一点,虽然用比如多层Res块来当作连接可能效果会有所提升,但是他们还是选择了以上较简单的方法。

应用

在应用时,他们同时将FPN放到了RPN里进行Proposal和Fast RCNN里进行目标检测。对原模型,他们作出了尽可能少的修改

RPN应用

RPN就是一个滑动窗口法的目标检测器,在原始的设定里面,就直接用一个3x3的窗在单卡尺度的特征图上滑动作二分类与bbox的回归。这个通过一个3x3卷积加两个分别的1x1卷积实现。我们将单尺度改为用同一个卷积头在不同尺度的特征图上滑动。因此,我们也不需要多尺度的anchor了,但是还需要不同比例的anchor。利用IoU将gt赋给各个anchor:大于0.7为正例,小于0.3为反例。

实验中,我们试过在不同的特征图上用不同的检测头,但是效果不好。说明所有的特征图有着类似的语义信息。也说明了RPN可以自然地加上RPN。

Fast RCNN应用

Fast RCNN在RoI内提取特征,之前都是在单特征图上提取的,我们需要解决的第一个问题就是每个RoI分别从哪个特征图上提取特征。我们利用RoI的大小,RoI越大,取越高层的特征。
k = ⌊ k 0 + l o g 2 ( w h / 224 ) ⌋ k=\left \lfloor k_0+log_2(\sqrt{wh}/224) \right \rfloor k=k0+log2(wh /224)
224是ImageNet预训练的大小,而 k 0 k_0 k0是全图224x224所应该对应的特征图。RoI越小,k也就越小,会指向一个分辨率更高的特征图。

以前人们在conv4作预测时,会取一个类conv5结构的检测头。但是由于我们的特征图已经经过FPN把语义信息补全了,所以我们可以在RoI-Pooling后简单地用两个FC解决问题,更加轻便。

目标检测上的试验

(待更新)

对RPN网络,作者的评价指标是COCO版本的AR,以及大中小三种尺度物品的AR,并对每张图片取100或1000个proposal分别给出结果。RPN网络是end2end训练的,详细配置略。

结果上来说,首先,肯定是比Baseline好的(8P),尤其是在小物体的AR上高的更多(12.9P)。如果去掉反向重构的部分则只与baseline差不多,大概是由于语义差造成的吧,这个问题还不能用层独立检测头来修正——反而还有所下降。如果去掉横向连接的话,其定位精度会严重下降。而如果不用金字塔,只用分辨率最高的特征图虽然比Baseline高,但是比金字塔方案要低,说明金字塔提高了对尺度的鲁棒性。

对Fast RCNN,我们用RPN训练结果得到的固定RoI进行训练,但是并不继承其特征。首先在一般情况下,我们简单的检测头并不能达到baseline里面把所有conv5都当作检测头的方法的精度高,但是用上FPN之后就不一样了。论文也验证了去掉反向重构和横向连接的影响,得到了类似的结论,只是在只用P2最高分辨率时AP下降不多,猜想是由于RoIpooling对尺度不敏感的原因。

后来在整个Faster RCNN模型下训练,在共享特征时有更好的结果,我觉得它说的应该是指alt-opt的训练方法。文章表示自己没有计算图像金字塔就获得了这么好的结果,并且也没有用很多小trick。

实例分割

结论

本文提供了一个不需要图片金字塔就可以计算特征金字塔的简易算法。所以说虽然Conv表示能力很强,但是我们还是要花心思来解决物品的尺度问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值