本文主要是介绍论文笔记:FPN,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
对于尺寸相差较大的目标的识别,一直是计算机视觉中的一个重大挑战。
特征金字塔基于图像金字塔建立,特征金字塔具有尺度不变性因为物体的大小可以通过改变在金字塔中的层数来实现。这项性能使得一个模型通过在金字塔中扫描位置和层数来见测尺度规模跨度较大的一系列物体。作者提出,将图像金字塔每一层特征化的主要优势在于可以产生一个所有层(包括高分辨率层)具有强语意信息的多尺度特征表示。
将图像金字塔每一层特征化会使得inference时间显著增加,而不适用于实际应用。在图像金字塔上训练更深的端到端网络收存储空间限制而不可行。由于这些原因,Fast和Faster RCNN没有用图像特征金字塔。
作者还指出,SSD为了避免利用低层特征而放弃了重复利用计算过的层并且从网络中的较高层建立金字塔并加上几个附加层。因此损失了重用特征层中高分辨率图片的机会。
针对这些,作者提出了利用卷积金字塔特征分层的优势同时建立一个在所有尺度有着强语意的特征金字塔。将低分辨率,强语意特征和高分辨率,弱语意特征通过自顶向下的路径和侧边连接结合,同时不牺牲表达强度,速度和所需空间。
上图给出了4种金字塔(特征图用蓝框标出,越粗的框表示越强的语意特征)。
(a)将图像做成不同的scale,然后不同scale的图像独立计算生成对应的不同scale的特征。这种方法的缺点在于增加了时间成本。
(b)最近的检测系统(如SPP net,Fast RCNN,Faster RCNN等),仅采取网络最后一层的特征
(c)像SSD采用这种多尺度特征融合的方式,没有上采样过程,即从网络不同层抽取不同尺度的特征做预测,这种方式不会增加额外的计算量。作者认为SSD算法中没有用到足够低层的特征(在SSD中,最低层的特征是VGG网络的conv4_3),而在作者看来足够低层的特征对于检测小物体是很有帮助的。
(d)本文作者是采用这种方式,顶层特征通过上采样和低层特征做融合,而且每层都是独立预测的(具体见下图)。
图上半部分是一个带有skip connection的自顶向下的结构,在最后一层(最底层)进行预测,即经过多次上采样并融合特征到最后一步,拿最后一步生成的特征做预测。
下半部分则是作者提出的模型,在所有层独立地进行预测。
结合图像金字塔,使用DNN作为目标检测器,利用多层特征结合计算预测信息等方法,为了利用卷积网络金字塔结构每层都有语意信息的优势,而建立一个整体拥有强语意信息的特征金字塔,作者提出了FPN。
FPN用单一尺寸的图片作为输入,以fully connection的形式在多层数出大小成比例的特征图。这样加强了脊柱卷积结构的独立性。作者采用ResNet,同时包含一个自底向上和一个自顶向下的通道,和横向连接。
自底向上是脊柱卷积网络的前向传播过程。在前向过程中,feature map的大小在经过某些层后会改变,而在经过其他一些层的时候不会改变,作者将不改变feature map大小的层归为一个stage,因此每次抽取的特征都是每个stage的最后一个层输出,这样就能构成特征金字塔。在本文使用的ResNet结构中,FPN用每一个stage的最后一个residual block作为输出。
自顶向下的过程采用上采样(upsampling)进行,用空间上粗糙的但是语意更强的高层金字塔的feature map产生更高分辨率的feature map。而横向连接则是将上采样的结果和自底向上生成的相同大小的feature map进行融合(merge)。如上图所示,上采样过程用2作为因子,与对应的map(经过1*1卷积核处理以减少维度)以相加的形式融合。在融合之后还会再采用3*3的卷积核对每个融合结果进行卷积,目的是消除上采样的混叠效应(aliasing effect)(这里看了相关介绍还是没看懂这里的意思,https://www.cnblogs.com/doctorbill/articles/3820088.html , https://blog.csdn.net/daduzimama/article/details/80182108)。并假设生成的feature map结果是P2,P3,P4,P5,和原来自底向上的卷积结果C2,C3,C4,C5一一对应。
作者将FPN应用于RPN的proposal生成和Fast RCNN的目标检测。
对于将FPN应用于RPN,将RPN中原来的单一尺寸的feature map替换为FPN,并对特征金字塔中的每一层附加一个相同涉及的head(3*3conv和两个sibling 1*1的conv)。因为这个head对金字塔所有层的所有未至都会进行滑动,因此没必要在一个相同的层上设置多尺寸的anchor。最终设计将{32*32,64*64,128*128,256*256,512*512}尺寸分别用于{P2,P3,P4,P5,P6}上,设置{1:1,1:2,2:1}三种宽高比,金字塔中共15种anchor。
上图的feature map在此处换为图像金字塔
值得一提的是,head的参数在特征金字塔中的所有层级是共享的,作者对比了不共享的head发现,共享head表现更好,暗示了所有层级有相似强度的语意信息。
对于FPN应用于Fast RCNN,是一个基于区域的目标检测器,利用Region-of-Interest (RoI)Pooling提取特征。Fast RCNN主要用于单一尺寸的feature map。引用FPN时,对金字塔层级指派不同尺寸的RoI。对于层,在输入图片上指派宽为w高为h的RoI:
其中224为ImageNet预训练的size,k0是w*h=224*224的RoI应该分派到的目标层。基于ResNet的Faster RCNN使用第四层作为单一尺寸的feature map,印次这里设k0=4。直觉上来看,这个等式表明了如果RoI的尺寸变小,则应该分配到更高分辨率的层。
整体步骤如下(借用别人的图):
部分笔记参考于
https://blog.csdn.net/u014380165/article/details/72890275/
https://blog.csdn.net/WZZ18191171661/article/details/79494534
这篇关于论文笔记:FPN的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!