前言
用金字塔形式的多尺度表示来解决目标检测中的多尺度问题是一种常用的方法,SSD和FPN都是这种金字塔形式的特征表示。但SSD中的bottom-up通路仅能在深层中学到更强的语义特征,而浅层中的语义特征很难捕获,因此SSD在检测小目标时比较无力。FPN虽然通过横向连接使得每个层级的特征图都包含很强的语义特征,但它实际上等价于特征层级的线性结合,从而很难捕获高度非线性的信息,以至于不能很好的应对更加复杂的情况。
本文以一种高度非线性的方式,将特征金字塔的构造过程重塑为特征的重构过程。具体来说就是,本文在构造特征金字塔时,会采用全局注意(global attention) 以强调整个图像的全局信息,然后采用局部重构(local reconfiguration) 对感受野内的局部块进行建模。通过这种方式生成的特征金字塔表示能够将强烈的语义信息扩展到所有尺度。与SSD和FPN以及FPN的变体相比,本文的特征金字塔结构具有以下优点:
- 全局-局部重构是一种非线性变换,具有更高的表达能力;
- 金字塔中所有层级的生成是同时进行的,比逐层变换(比如横向连接)更有效。
方法实现
如上图所示是本文提出的特征金字塔构建网络,首先将多个不同的特征图进行结合,形成特征层级,然后通过非线性变换生成不同尺度的特征图,最后在这些特征图上进行检测。
给定一系列特征图,在本文中,生成第个层级的特征图可以看作是对的非线性变换:
本文将特征变换过程分解为全局注意和局部重构两部分,它们彼此之间是互补的,因为它们处理的是不同尺度的特征层级。
1. global attention(全局注意)
给定一系列特征图,global attention模块的目标就是强调包含全局信息的特征,并在特定尺度的特征图上抑制用处不大的特征。该模块由squeeze-and-excitation block组成,主要包含两个步骤:
-
在squeeze阶段,对于第个层级,在的每个通道上进行全局池化操作得到,如果有个通道,那么式(6)会产生个输出,记为;
-
在excitation阶段,将输入到两个全连接层中,后跟sigmoid**层:
-
最终squeeze-and-excitation block的输出是将与中对应层级的特征做channel-wise上的相乘:
从而得到经过global attention模块处理后的特征图为:
经过SE(squeeze-and-excitation)block处理的特征会更具有判别性,并且包含更多全局信息。
2. 局部重构(local reconfiguration)
local reconfiguration模块在上进行滑动操作,将中特征图的一小个一小个局部区域映射到输出特征图上的一个局部区域中,也就是对感受野内的局部块进行建模。作者设计了一个残差块进行局部重构,如下图所示:
一次局部重构可以被定义为:
是一个线性变换,用来使维数相匹配。
本文设计的残差连结与ResNet中的是有区别的:
- 本文认为语义信息分布在特征层级中,残差块的作用是通过优化选择其它信息;ResNet中残差学习的目的是通过增加网络深度来获得准确性;
- 本文中残差学习的输入是特征层级,而ResNet中是卷积输出的一个层级。
残差函数的结构也很灵活,本文设计了三个层,当然更多的层也是可行的。由于在最后检测时,所有层级的特征都进行的是相同的操作,因此本文固定所有特征图的维度为256。
结论
本文提出一种构建特征金字塔的新形式,不过看起来还是在SSD的基础上改进的,将SSD中不同尺度的特征图合成为特征层级,然后对进行非线性变换得到特征金字塔,最后和SSD一样分别在不同层级的特征图上进行预测。