目标检测之FPN、AugFPN、NAS-FPN
针对小目标的检测有提升的文章。 未完待续~
Feature Pyramid Networks for Object Detection
FPN是一种多尺度的目标检测算法。大多数目标检测算法都是采用顶层特征来做预测的,但是我们知道:低层的特征语义信息较少,但是位置信息丰富;高层的特征语义信息丰富,位置信息粗略。虽然也有些多尺度特征融合的方法,但是一般采用融合后的特征做预测,但是FPN是在不同特征层独立进行预测的。
4种利用特征的形式:
(a)图像金字塔:将图像做成不同的scale,不同scale的图像生成对应的不同scale的特征。缺点在于时间成本高。有些算法会在测试时候采用图像金字塔。
(b)像SPP net,Fast RCNN,Faster RCNN是采用这种方式,即仅采用网络最后一层的特征。
(c)像SSD(Single Shot Detector)采用这种多尺度特征融合的方式,没有上采样过程,即从网络不同层抽取不同尺度的特征做预测,这种方式不会增加额外的计算量。作者认为SSD算法中没有用到足够低层的特征(在SSD中,最低层的特征是VGG网络的conv4_3),而在作者看来足够低层的特征对于检测小物体是很有帮助的。
==(d)==本文作者是采用这种方式,顶层特征通过上采样和低层特征做融合,而且每层都是独立预测的。
如图一个带有skip connection的网络结构在预测的时候是在finest level(自顶向下的最后一层)进行的,简单讲就是经过多次上采样并融合特征到最后一步,拿最后一步生成的特征做预测。
下面一个网络结构和上面的类似,区别在于预测是在每一层中独立进行的。
作者的主网络采用ResNet。
算法结构分为三部分:
- 自底向上的线路
- 自顶向下的线路
- 横向连接(lateral connection)
图中放大的区域就是横向连接,这里1*1的卷积核的主要作用是减少卷积核的个数,也就是减少了feature map的个数,并不改变feature map的尺寸大小。
自底向上:网络的前向过程。在前向过程中,feature map的大小在经过某些层后会改变,而在经过其他一些层的时候不会改变,作者将不改变feature map大小的层归为一个stage,因此每次抽取的特征都是每个stage的最后一个层输出,这样就能构成特征金字塔。
自顶向下:采用上采样(upsampling)进行,而横向连接则是将上采样的结果和自底向上生成的相同大小的feature map进行融合(merge)。在融合之后还会再采用3*3的卷积核对每个融合结果进行卷积,目的是消除上采样的混叠效应(aliasing effect)。并假设生成的feature map结果是P2,P3,P4,P5,和原来自底向上的卷积结果C2,C3,C4,C5一一对应。
作者一方面将FPN放在RPN网络中用于生成proposal,原来的RPN网络是以主网络的某个卷积层输出的feature map作为输入,简单讲就是只用这一个尺度的feature map。但是现在要将FPN嵌在RPN网络中,生成不同尺度特征并融合作为RPN网络的输入。在每一个scale层,都定义了不同大小的anchor,对于P2,P3,P4,P5,P6这些层,定义anchor的大小为322,642,1282,2562,512^2,另外每个scale层都有3个长宽对比度:1:2,1:1,2:1。所以整个特征金字塔有15种anchor。
正负样本的界定和Faster RCNN差不多:如果某个anchor和一个给定的ground truth有最高的IOU或者和任意一个Ground truth的IOU都大于0.7,则是正样本。如果一个anchor和任意一个ground truth的IOU都小于0.3,则为负样本。
看看加入FPN的RPN网络的有效性,如下表Table1。网络这些结果都是基于ResNet-50。评价标准采用AR,AR表示Average Recall,AR右上角的100表示每张图像有100个anchor,AR的右下角s,m,l表示COCO数据集中object的大小分别是小,中,大。feature列的大括号{}表示每层独立预测。
- 从(a)(b)(c)的对比可以看出FRN的作用确实很明显。另外(a)和(b)的对比可以看出高层特征并非比低一层的特征有效。
- (d)表示只有横向连接,而没有自顶向下的过程,也就是仅仅对自底向上(bottom-up)的每一层结果做一个11的横向连接和33的卷积得到最终的结果,有点像Fig1的(b)。从feature列可以看出预测还是分层独立的。作者推测(d)的结果并不好的原因在于在自底向上的不同层之间的semantic gaps比较大(只做横向连接不好的原因)。
- (e)表示只有自顶向下的过程,但是没有横向连接,即向下过程没有融合原来的特征。这样效果也不好的原因在于目标的location特征在经过多次降采样和上采样过程后变得更加不准确。
- (f)采用finest level层做预测(参考Fig2的上面那个结构),即经过多次特征上采样和融合到最后一步生成的特征用于预测,主要是证明金字塔分层独立预测的表达能力。显然finest level的效果不如FPN好,原因在于PRN网络是一个窗口大小固定的滑动窗口检测器,因此在金字塔的不同层滑动可以增加其对尺度变化的鲁棒性。另外(f)有更多的anchor,说明增加anchor的数量并不能有效提高准确率。
另一方面将FPN用于Fast R-CNN的检测部分。除了(a)以外,分类层和卷积层之前添加了2个1024维的全连接层。细节地方可以等代码出来后再研究。
实验结果如下表Table2,这里是测试Fast R-CNN的检测效果,所以proposal是固定的(采用Table1(c)的做法)。与Table1的比较类似,
- (a)(b)(c)的对比证明在基于区域的目标卷积问题中,特征金字塔比单尺度特征更有效。
- (c)(f)的差距很小,作者认为原因是ROI pooling对于region的尺度并不敏感。因此并不能一概认为(f)这种特征融合的方式不好
博主个人认为要针对具体问题来看待,像上面在RPN网络中,可能(f)这种方式不大好,但是在Fast RCNN中就没那么明显。
在这里插入图片描述
同理,将FPN用于Faster RCNN的实验结果如下表Table3。
Table4是和近几年在COCO比赛上排名靠前的算法的对比。注意到算法在小物体检测上的提升是比较明显的。
另外作者强调这些实验并没有采用其他的提升方法(比如增加数据集,迭代回归,hard negative mining),因此能达到这样的结果实属不易。
总结
作者提出的FPN(Feature Pyramid Network)算法同时利用低层特征高分辨率和高层特征的高语义信息,通过融合这些不同层的特征达到预测的效果。并且预测是在每个融合后的特征层上单独进行的,这和常规的特征融合方式不同。
AugFPN: Improving Multi-scale Feature Learning for Object Detection
论文地址
顾名思义,AugFPN就是在经典FPN结构的基础上做了改进。FPN网络的最大贡献就是把多尺度特征金字塔网络引入到了Faster RCNN等检测网络中,从而有效的提升了网络的检测性能
Abstract
经典的FPN网络通过利用多尺度特征学***提升了检测网络的检测性能,然而这种设计本身背后就存在一些缺陷,使得多尺度的特征不能被网络完全的利用起来。
本文通过提出一种新的特征金字塔网络结构AugFPN,可以有效的克服这些缺陷。
AugFPN的创新之处在于三个组成成分,分别是:
- Consistent Supervision(一致性监督):缩小了特征融合前不同尺度特征之间的语义差距
- Residual Feature Augumentation (残差特征增强):通过残差特征增强提取比率不变的上下文信息,减少特征映射在最高金字塔层次的信息丢失
- Soft ROI Selection(软RoI选择):自适应地学习更好的RoI特征
至于这三个模块是如何克服FPN的缺陷的,下文会有详细的分析。最后就是使用了AugFPN,无论是在大的backbone,还是小的backbone,是one-stage检测,还是two-stage检测网络上,都在coco数据集上取得了明显的涨点。
FPN结构存在的缺陷
FPN从结构上可以划分为三个部分,即分别是:
- before feature fusion
- top- down feature fusion
- after feature fusion
FPN的三个缺陷也正好对应着这三个阶段:
1. 特征混合之前
我们知道,FPN在特征混合之前,backbone的不同stage学习到的特征需要先经过11卷积进行一个降维,降到通道数相同才能进行特征相加。然而不同stage学习到的特征感受野是不一样的,包含的语义信息也不同。把两个语义信息差距较大的特征直接相加,势必会减弱多尺度特征的表达能力
简言之:特征求和前不同层次特征之间的语义差异
2. 自顶向下的特征融合
自顶向下的特征融合过程就是将顶层的高级特征和底层的低级特征相融合的过程,这样虽然底层的特征得到了来自顶层的高级特征的加强,然而由于**顶层的特征经过11降维,势必会造成信息损失**。
简言之:金字塔顶层层次特征的信息丢失
3. 特征混合之后
我们知道,FPN中每个候选区域(ROI)的特征都是根据proposal的尺度来决定相应的特征图从哪一层选择,然而那些忽略的层也是包含着丰富信息的,它们对最终的分类和回归结果也有着影响。直接忽略了其它层的特征势必会影响到最终的检测结果。
简言之:RoIs的启发式分配策略
AugFPN对应结构
针对FPN中存在的这三个缺陷,这篇论文依次提出三个结构用于解决这三个缺陷。
- Consistent Supervision
作者对混合之后的特征图M2-M5做了一个监督。具体做法是,对RPN网络得到的每一个候选区域都分别映射到M2~M5上得到相应的feature map,然后直接对这些feature map做分类和回归,可以得到一个损失函数。将这一损失和网络本身的损失做一个加权求和。由于在测试阶段,这个分支是不参与计算的,所以Consistent Supervision对模型最终的参数和计算量没有影响。 - Residual Feature Augmentation
由于FPN特征融合之前需要先进行1x1的特征降维,这会导致M5的信息损失。为了避免这种信息损失,作者提出了一种很巧妙的办法。因为C5的信息是没有损失的,如果能够将C5的信息融合到M5上,就可以有效减少这种信息损失了。为此作者提出了ASF的结构,如Figure 3(a)所示。首先按照比例不变,对C5进行自适应池化操作,然后对每个尺度的特征图进行1*1降维,然后对降维后的特征进行上采样,对上采样之后的特征按照学习到的权重进行相加,把相加完之后的特征称之为M6,再将M6和M5进行相加作为最终的没有损失的M5。
- Soft RoI Selection
FPN中ROI对应的特征是根据ROI的尺度选择对应提取的层,一般小的ROI对应低级特征,大的ROI对应高级特征(我的理解,高级感受野更大,负责检测大的目标)。然而事实上,这并不是一种最优的办法。因为有时候两个相同大小的ROI可能会被分到不同层的特征,即使某个ROI被分到了某一层,但其实其它层的特征也包含着描述这个ROI的信息。因此,论文提出了一种Soft RoI Selection的办法。具体做法是,对于任意一个ROI,我们都会提出它在不同层的特征图上所对应的特征,然后利用网络本身学习权重参数,将这些不同层上的特征进行求和作为这个ROI最终的特征,这一结构和Residual Feature Augmentation中使用的自适应求和操作是一样的。
总结
本文先分析了FPN的三点缺陷,然后针对这三点缺陷依次提出三种解决策略。
NAS-FPN: Learning Scalable Feature Pyramid Architecture for Object Detection
Summary
目前最先进的卷积结构用于目标检测是手工设计的。
在这里,我们的目标是一个更好的学习可扩展特征金字塔结构,用于目标检测。在一个覆盖所有交叉尺度连接的可扩展搜索空间中,采用神经网络结构搜索,发现了一种新的特征金字塔结构。架构名为NAS-FPN,由自顶向下和自下而上的连接组合而成,可以跨范围地融合特性。
为了发现一个更好的FPN架构,作者充分利用了神经网络搜索技术[Neural architecture search with rein- forcement learning.],使用强化学习训练了一个控制器来在给定的搜索空间中选择最好的模型结构。控制器使用在搜索空间内子模型的准确率来作为更新参数的反馈信号(reward signal)。因此,通过这样的试错,控制器会学到越来越好的结构,搜索空间在架构成功搜索的过程中起到了很重要的作用。对于FPN的可拓展性,在搜索的过程中,作者强制让FPN重复N次然后concatenation到一起形成一个大的架构。
一句话解释:FPN就是用来特征融合的层,之前都是手工设计,现在尝试神经网络搜索设计!其实就是优化FPN。
NAS-FPN使用强化学习的方式对FPN网络自动搜索,在coco数据集上得到了最好的FPN结果。可以理解为连连看,然后连出一个最好的。如下图:a图为原始的FPN, 好看整齐。然后在一步一步搜索的reward下,结构组件变化。由b—>f变为最终的结果。虽然不好看。