深度学习【53】物体检测:Feature Pyramid Networks for Object Detection

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/linmingan/article/details/81095421

该论文的思想其实跟DSSD很像,都是使用多尺度特征图融合来提升物体检测的性能。这篇文章将特征金字塔网络结构(FPN)用在R-CNN系列上面后,mAP有不小提升,但是速度上倒是下降了一点。
我们首先看看什么是FPN,下图是FPN与目前的一些方法的比较:
这里写图片描述
图中(a)使用的图像金字塔进行物体检测;(b)YOLOv2使用的方法,只有网络最后一层用来检测;(c)SSD使用的方法,网络中有多层特征图用来检测;(d)FPN使用的方法,一样的有多层特征图用来检测,但是是经过上采样后与相应的层融合后再用来检测。

ok,现在看看细节。

Bottom-up pathway

Bottom-up pathway是由一系列的特征图构成,这些特征图是基础网络中每个阶段(特征图大小相同的属于同一阶段)中最后的输出。在resNet中,论文使用的是conv2,conv3,conv4,conv5,分别用 { C 2 , C 3 , C 4 , C 5 } 来表示,对应的步长为{4,8,16,32}。由于conv1的特征图太大,十分占内存,因此论文没有使用。

Top-down pathway and lateral connections

这是部分是一系列的特征图上采样模块。具体的先看图:
这里写图片描述

由图中的左边是Bottom-up pathway,右边就是Top-down pathway。Top-down pathway的最小特征图(对应P_5),来自Bottom-up pathway的最小特征图(resNet中的 C 5 ),中间还经过了一个1*1的卷积。然后对 P 5 进行上采样,放大2倍;与此同时,Bottom-up pathway中的 C 4 经过一个1*1卷积后与经过上采样的 P 5 相加得到 P 4 。以此类推我们可以得到与 { C 2 , C 3 , C 4 , C 5 } 相对应的 { P 2 , P 3 , P 4 , P 5 }

在得到 { P 2 , P 3 , P 4 , P 5 } 后我们就可以用这些特征图当做RPN了(这样就有了多个RPN网络)。为了减少计算,每个特征图中的分类和回归参数是共享的。这样就要求${P_2,P_3,P_4,P_5}中的通道数要一样,论文设置为256个通道。

应用

在原始的RPN中,在基础网络的最后一层会加入一个3*3的卷积层,然后跟着两个1*1卷积(分别用来分类和回归),这样的设计我们称只为head。是否是物体的判断以及bbox的回归与一系列的固定框(anchors)相联系。这些anchor是一些预先固定好大小、宽高比的框。
我们用FPN代替了只有一个尺度的特征图作为FPN,同样后面也加入3*3和1*1卷积。同时特征金字塔的每一层的anchor没有使用multi-scale,而是每一层固定使用一个scale,以及不同的宽高比。具体的, { P 2 , P 3 , P 4 , P 5 } 对应的scale为 { 32 2 , 64 2 , 128 2 , 256 2 , 512 2 } ,然后每个scale有宽高比{1:2,1:1,2:1},这样一来总共有15个anchor。

我们利用IoU来确定训练样本,如果某一anchor与真实box的IoU大于0.7,则为正样本;小于0.3为负样本。我们并没有显示的将不同尺度的真实box与特征金字塔相关联起来,而是将真实box与anchor相关联,这其实已经将不同尺度的真实box与不同的特征金字塔层相关联起来了。

我们之前提到,用来分类和回归的参数是共享的。我们也尝试了没有共享的情况,但是发现精度都差不多。这表明,特征金字塔中不同的层有着相同的语义信息。这与基于图像金字塔的物体检测的优势相同。

实验结果

结果上还是很不错的。
这里写图片描述

猜你喜欢

转载自blog.csdn.net/linmingan/article/details/81095421
今日推荐