【目标检测(一)】RCNN详解——深度学习目标检测的开山之作
【目标检测(二)】SPP Net——让卷积计算共享
【目标检测(三)】Fast RCNN——让RCNN模型能端到端训练
【目标检测(四)】Faster RCNN——RPN网络替代selective search
【目标检测(五)】YOLOv1——开启one-stage目标检测的篇章
【目标检测(六)】YOLOv2——引入anchor, Better, Faster, Stronger
【目标检测(七)】YOLOv3——准确率的全面提升
【目标检测(八)】一文吃透目标检测回归框损失函数——IoU、GIoU、DIoU、CIoU原理及Python代码
【目标检测(九)】FPN详解——通过特征金字塔网络进行多尺度特征融合
【目标检测(十)】RetinaNet详解——Focal Loss将one-stage算法推向巅峰
【目标检测(十一)】CenterNet——Anchor Free, NMS Free
【目标检测(十二)】FCOS——用实例分割的思想做Anchor Free的目标检测
在目标检测的发展历程中,Two-stage算法一直没有引入多尺度特征方法。后来的SSD算法证明了引入多尺度特征到目标检测的有效性,在FPN中Two-stage算法引入了多尺度,提出了特征金字塔网络,能够大幅提高目标检测的准确率。
FPN原论文:arxiv.org/pdf/1612.03…
1. Motivation
目标检测的任务分为两个部分:classification任务和localization任务。深度神经网络学习到的特征中,浅层特征学到的是物理信息,如物体的角点、边缘的细节信息,而深层特征学到的是语义信息,更加high-level和抽象化。对于分类任务来说,深层网络学到的特征可能更为重要,而对于定位任务来说,深层次和浅层次的特征同样重要,因为要想精准的定位,浅层的物理细节信息是必不可少的。FPN之前的目标检测算法,多数只采用顶层特征来做预测,所含的细节信息比较粗略,即使采用了特征融合的方法,也一般是采用融合后的特征进行预测的。FPN提出了特征金字塔网络,可以在不同的特征层上独立进行预测。
2. FPN原理
2.1 金字塔设计理念
上图中FPN列举了几种金字塔的设计思想:
- 图a表示使用几个不同尺度的图片分别输入到模型中,这样效率非常低,需要进行若干次的前向推理。
- 图b指只使用单scale维度的特征进行预测,如Faster RCNN就是采用的这种方式。
- 图c是在CNN的不同尺度上分别进行预测,在CNN网络中有了多尺度的概念,比如SSD和YOLOv3就是这么做的。
- 图d加入了一个从上到下的过程,并且高层特征层和低层特征层之间有交互(上采样+横向交互element wise相加),这个结构被作者称为特征金字塔网络。
2.2 FPN网络结构
FPN本质上就是一个UNET的结构,先下采样再上采样进行特征融合。FPN的结构主要包括三个部分:bottom-up,top-down和lateral connection。
2.2.1 Bottom-up
Bottom-up就是图片输入到网络中后,通过backbone网络来提取特征的过程,从每个module中提取出最后一层输出的特征抽出来。以ResNet为例,将卷积层conv2,conv3,conv4,conv5的输出定义为
,分别是每个module(stage)在最后残差层后的输出,这些feature map的尺寸分别是原图的
倍,以输入图像为640*640*3
为例,C2-C5尺寸分别为
,它们特征图之间尺寸和channel都是2倍的关系。
2.2.2 Top-down
Top-down是将高层的feature map经过Upsample从上往下传递,高层的特征具有丰富的语义信息,这样从上往下传播就能使具有丰富的物理信息的低层次特征也能包含丰富的语义信息,原论文中采用的是最近邻插值方法,使特征图尺寸扩大为原来的两倍。
2.2.3 Lateral Connection
lateral connection主要包括三个步骤:
(1) 对于每个stage输出的feature map
,都先进行一个1*1
的卷积统一并降低维度。
(2) 然后再将得到的特征和上一层特征上采样得到特征图
进行融合,本质就是element wise addition。注意因为在backbone中每两个抽取的特征层之间都是尺寸2倍的大小关系,而且经过了从上到下上采样和横向的1*1
的卷积统一了维度,所以是可以相加的。
(3) 相加完之后需要经过一个3*3
的卷积才能得到本层的特征输出
。论文中说明使用这个3*3
卷积的目的是为了消除上采样产生的混叠效应(aliasing effect),混叠效应应该就是指上边提到的插值生成的图像灰度不连续,在灰度变化的地方可能出现明显的锯齿状。在论文中,因为金字塔所有层的输出特征都共享classifiers/ regressors,所以输出的维度都被统一为256,即这些3*3
的卷积的channel都为256。
2.3 FPN for RPN
下图中诠释了FPN在RPN中的应用,最左边是以ResNet50为例的backbone,然后经历FPN网络,生成P2-P6特征层,其中P6只适用于Faster RCNN中的RPN,不适用于Fast RCNN,P6是由P5下采样得来的,用来预测更大尺寸的目标。针对不同的特征层,RPN和Fast RCNN的权重共享,所以P2-P6的channel都为256。P2-P6后面会接一个RPN Head,在feature map上的每个点处生成3个anchor(每种尺寸对应3个宽高比),五个特征层
分别对应尺寸为
的anchor,即总共会有15种anchors,之后再在两个分支并行的进行1*1
卷积,分别用于对anchors进行分类和回归。
这里anchor的正负样本划分与Faster RCNN保持一致,即与GT Box具有最大IOU的anchor或者IOU大于0.7的anchor都被认为是正样本,而IOU小于0.3的anchor认为是负样本。需要注意,每层的RPN head都参数共享的。
2.3 FPN for Fast RCNN Part
在Fast R-CNN 中有一个ROI Pooling层,它是使用region proposal的结果和特征图作为输入,得到的每个proposal对应的特征然后pooling,之后再分别用于分类结果和边框回归。之前Fast R-CNN使用的是单尺度的特征图,但是现在使用不同尺度的特征图(注意只用了P2-P5,而没有用P6的特征层),那么RoI需要在哪一个尺度的特征图上提取对应的特征呢? 论文认为,不同尺度的RoI应该使用不同特征层作为RoI pooling层的输入,大尺度RoI就用后面一些的金字塔层,比如P5;小尺度RoI就用前面一点的特征层,比如P4。那怎么判断RoI该用哪个层的输出呢?这里论文定义了一个计算公式:
公式中,k表示映射到哪一层的P作为特征层传入到ROI Pooling层中,初始
,w和h表示RPN给出的Region Proposal的宽和高,例如w和h都是112,则对应P3特征层和Region Proposal传入到ROI Pooling,得到一个尺寸为7*7
的特征,再经过flatten之后输入到全连接层。
3. FPN的效果和优劣势分析
3.1 FPN的效果和优点
-
对准确率的提升非常显著,尤其是小目标的准确率。如下图所示。
-
FPN可以作为一个自由可插拔的模块嵌入任何的网络结构和任务中,被业界所广泛采用。
3.2 FPN的缺点
- 计算量大,需要大量的内存:在目标检测网络中插入了一个类似UNET的巨大网络结构,不可避免的降低了网络的速度。
Reference:
今天的文章【目标检测(九)】FPN详解——通过特征金字塔网络进行多尺度特征融合分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/20797.html