【目标检测】对FPN(特征金字塔网络)论文的理解

  这篇paper我认为算是对用卷积神经网络进行目标检测的一种改进,通过提取多尺度的特征信息进行融合,进而提高目标检测的精度,特别是在小物体检测上的精度。

  文章的思想比较简单,主要是利用特征金字塔对不同层次的特征进行尺度变换之后,再进行信息融合,从而可以提取到比较低层的信息,也就是相对顶层特征来说更加详细的信息。顶层特征在不断卷积的过程中可能忽略了小物体的一些信息,特征金字塔通过不同层次的特征融合,使得小物体的信息也能够比较完整的反映出来。这个方法可以广泛地应用在针对小物体的检测上。

目录

一 背景介绍

二 Why需要FPN

三 FPN算法

 四 RPN with FPN

实现流程

实验

五 Fast-RCNN with FPN

  实现流程

 实验

六 总结


一 背景介绍

  我们知道,RCNN系列算法都是在顶层的特征图上提取特征,从而进行目标识别的。但是这样做存在一个弊端,就是顶层特征在不断卷积之后,可能忽略了小物体的信息,这就导致了目标检测精度的下降。如果可以结合多层级的特征,就可以大大提高多尺度目标的检测性。

  传统的提取多层级特征的方法就是构造图像金字塔,(通过高斯滤波)图像金字塔是一种以多分辨率来解释图像的有效且简单的方法。通过改变图像的尺寸,将一层层的图像比喻成金字塔,金字塔上层的图像尺寸越小,分辨率越低。

                     

  利用cnn网络在图片金字塔上进行特征提取,可以构造出特征金字塔。得到特征金字塔后下一步就是在特征金字塔上进行目标识别。(faster-RCNN根据ROI的大小选择ROI对应的特征映射最接近的224*224来进行特征提取,说可以提高精度)但是这种方法的运算耗时过大,需要的计算能力较高,往往只在测试的时候使用。

  但是图像金字塔并非唯一构造特征金字塔的方式。CNN计算的时候本身就存在多层特征图,且不同层的特征尺度不同,形似金字塔。如果可以利用这个金字塔结构进行目标检测,不仅没有增加额外的计算工作,也可以利用到低层特征。SSD方法就使用了这种方法。

  上图展示了这个过程,从网络的不同层提取不同尺度的特征做预测,这种方式不会增加额外的计算量。但作者认为SSD算法中没有用到足够低层的特征,(在SSD中,最底层的特征是VGG网络的conv4_3),而在作者看来足够低层的特征对于检测小物体是很有帮助的。

二 Why需要FPN

  实验表明,浅层的网络更关注于细节信息(语义特征少,目标位置精细),高层的网络更关注于语义信息(语义特征多,目标位置粗略),而高层的语义信息能够帮助我们准确的检测出目标,因此RCNN系列通过最高层的特征图来进行特征提取,但是这种做法忽略了细节信息,这些信息在一定程度上可以提升检测的精度。

  因此作者提出了FPN算法。做法很简单,把低分辨率、具有高语义信息的高层特征以及高分辨率、具有低层语义信息的低层特征进行自上而下的侧边连接,使得所有尺度下的特征都具有丰富的语义信息。

如上图所示,我们可以看到我们的图像中存在不同尺寸的目标,而不同的目标具有不同的特征,利用浅层的特征就可以将简单的目标的区分开来;利用深层的特征可以将复杂的目标区分开来;图中我们在第1层(请看绿色标注)输出较大目标的实例分割结果,在第2层输出次大目标的实例检测结果,在第3层输出较小目标的实例分割结果。检测也是一样,我们会在第1层输出简单的目标,第2层输出较复杂的目标,第3层输出复杂的目标。

三 FPN算法

  作者的算法结构可以分为三个部分:自下而上的卷积神经网络(上图左),自上而下过程(上图右)和特征与特征之间的侧边连接。

  自下而上的部分其实就是卷积神经网络的前向过程。在前向过程中,特征图的大小在经过某些层后会改变,而经过某些层后不会改变,作者将不会改变的层做为一个stage,因此每次抽取的特征都是这个stage的最后一层的输出,这样就能构成特征金字塔了。具体来说,对于ResNets,作者使用了每个stage的最后的一个残差结构的特征激活输出。将这些残差模块输出表示为{C2, C3, C4, C5},对应于conv2,conv3,conv4和conv5的输出。

  自上而下的过程采用上采样的方式进行。上采样几乎都是采用内插值方法,即在原有图像像素的基础上在像素点之间采用合适的插值算法插入新的元素,从而扩大原图像的大小。通过对特征图进行上采样,使得上采样后的特征图具有和下一层的特征图相同的大小。

  侧边连接从根本上说就是将上采样的结果和自下而上生成的特征图进行融合,做法是将自下而上生成的特征图进行1*1的卷积(目的是与上采样的结果具有相同的channels),与上采样的结果进行融合得到了一个新的特征图,这个新的特征图融合了不同层的特征,具有更加丰富的语义信息。在融合之后还会再采用3*3的卷积核对每个融合结果进行卷积,目的是消除上采样的混叠效应。如此以来就得到了一个新的特征图。这样一层层的迭代下去,就能得到一个个新的特征图。假设生成的特征图结果是P2,P3,P4,P5,它们和原来自底向上的卷积结果C2,C3,C4,C5一一对应。金字塔结构中所有层级共享分类层(回归层)。

  
四 RPN with FPN

RPN是Faster-RCNN中用于产生区域的子网络,RPN在特征图上应用9种不同的anchors然后进行二进制的边界预测和回归。考虑到我们已经有了一些包含不同语义信息的特征图,越是低层的特征图包含的信息就越复杂。因此作者认为没有必要在所有的特征图上都应用9种不同尺度的anchor,可以在低层特征图中应用尺度较小的anchor,在高层特征图中应用尺度较大的anchor。{P2, P3, P4, P5, P6}分别对应的anchor尺度为{32^2,62^2,128^2,256^2}。文章中依然采用了{1:2, 1:1, 2:1}三种比例。
也就是一个ROI对应了15个anchors。

实现流程

 

实验

作者基于coco数据集,在RPN网络中构架了特征金字塔。(coco数据集上有更多的小物体, 以及更多的数据 (14万) 标注)在RPN中使用的特征提取网络是ResNets网络。为了证明RPN的效果,作者将以下三种网络进行了对比,分别是1 删除自上而下路径的网络 2 删除了横向连接的网络 3 采用生成的最后一层做预测, 作者以AR(召回率)作为评判标准,分别比较了在小物体/中型物体/大型物体上的召回率。实验结果如下图。

上图中的a/b/c部分将FPN目标识别结果和基于ResNets网络生成的特征图进行目标识别的结果进行了对比。相比于直接在ResNets网络生成的特征图上进行目标识别,在小物体的识别上,FPN直接将目标识别的召回率提高了13%,在大/中型物体上的召回率也提高了4%-5%。

    图中的b/c/d分别展示了当删除自上而下路径的网络/删除横向连接的网络/只用生成的最后一层做预测等三种网络的召回率。这三种网络的效果都不如FPN网络,作者分析了其中的原因。

    • 当删除了自上而下的路径,由于金字塔不同层次之间存在较大的语义差距,因此检测效果相对较差。
    • 当删除了横向连接,由于这些特征都被上采样和下采样了好几次,因此相对来说性能不够精确。
    •采用最后一层做预测:PRN网络是一个窗口大小固定的滑动窗口检测器,因此在金字塔的不同层滑动可以增加其对尺度变化的鲁棒性。
 

五 Fast-RCNN with FPN

  Fast-RCNN中的ROI pooling层使用region proposal的结果和特征图做为输入。经过特征金字塔,我们得到了许多特征图,作者认为,不同尺度的特征图上包含的物体大小也不同,因此,不同尺度的ROI,使用不同特征层中的映射做为ROI的输入。大尺度的就使用靠顶层的特征图比如P5,小尺度的ROI就使用靠低层的特征图,比如P2。确定不同ROI对应的不同特征层的公式如下:

224是ImageNet的标准输入,k0是基准值,设置为5,代表P5层的输出(原图大小就用P5层),w和h是ROI区域的长和宽,假设ROI是112 * 112的大小,那么k = k0-1 = 5-1 = 4,意味着该ROI应该使用P4的特征层。k值做取整处理。这意味着如果RoI的尺度变小(比如224的1/2),那么它应该被映射到一个精细的分辨率水平。

  实现流程

 

首先,选择一张需要处理的图片,然后对该图片进行预处理操作;
然后,将处理过的图片送入预训练的特征网络中(如ResNet等),即构建所谓的bottom-up网络;
接着,构建对应的top-down网络(上采样,侧边连接)
接着,在P5,P4,P3,P2上面分别进行RPN操作,即一个3x3的卷积后面分两路,分别连接一个1x1的卷积用来进行分类和回归操作;
接着,将上一步获得的候选ROI按照ROI大小根据上面的计算公式从不同的层上面提取特征分别进行ROI Pool操作(固定为7x7的特征);
最后,在上一步的基础上面连接两个1024层的全连接网络层,然后分两个支路,连接对应的分类层和回归层;


 实验

作者基于coco数据集,采用ResNet-50 网络在fast rcnn中构建了特征网络金字塔。评价标准和进行对比的网络与上个实验一致。

 图中表明,FPN网络具有最好的召回率。最后一行是只采用最后一层特征进行预测得到的召回率,与FPN网络不相上下,作者在这里表明,不能认为只采用最后一层特征图就一定得到较差的结果。

 

六 总结

为什么FPN能够很好的处理小目标?

如上图所示,对于RPN生成的该小目标的ROI,FPN根据其size将其送入到靠近低层的特征图中,低层的特征图包含了丰富的上层语义信息并且分辨率较高,即在更大的特征映射上操作可以包含更多小目标的有用信息。

FPN 构架了一个可以进行端到端训练的特征金字塔;
通过CNN网络的层次结构高效的进行强特征计算;
通过结合bottom-up与top-down方法获得较强的语义特征,提高目标检测和实例分割在多个数据集上面的性能表现;
FPN这种架构可以灵活地应用在不同地任务中去,包括目标检测、实例分割等;
 

参考blogs:https://blog.csdn.net/WZZ18191171661/article/details/79494534#commentBox

https://blog.csdn.net/weixin_40683960/article/details/79055537

https://blog.csdn.net/xyj1536214199/article/details/80895716

 

 

FPN Pytorch实现

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值