为了检测到变化尺寸的目标,基于特征金字塔的检测器,在不同特征层之间,基于在k特征图上的决策,例如下图(a)所示,基线检测器使用在特征层 上的特征图X_l 。
其中l=n-k+1, \ldots, n 。其中X_{1: n-k}\left(=\left[X_{1}, X_{2}, \ldots, X_{n-k}\right]\right) 是骨干网络产生的特征图,X_{n-k+1: n} 是从后来的卷积层由底向上得到。
B_{l}(\cdot)代表了第l个卷积层执行的操作。D_{l}(\cdot) 代表检测子网络,通常采用一个单一的3 \times 3 的卷积层来产生分类和框回归的输出。由于从金字塔层输入的深度不同,较浅的底层特征缺乏语义信息。
为了减少不同金字塔层之间的语义差距,有一些工作提出了使用横向连接的自顶向下结构,如图(c)所示。这种结构使用增加分辨率的方式使来自顶层的语义信息传播到底层。通过横向连接保持较高的空间分辨率。第l层的特征图X'_l 产生的方式为
X_{l}^{\prime}=L_{l}\left(X_{l}\right) \oplus T_{l}\left(X_{l+1}^{\prime}\right)
\text { Detection Outputs }=D_{l}\left(X_{l}^{\prime}\right)
其中l=n-k+1, \ldots, n ,L_{l}(\cdot) 是第l层的横向连接,T_{l}(\cdot) 是第l的自顶向下的连接。操作符\oplus 代表两个特征图的组合,例如通道连接和相加。不同的方法仅仅采用了不同的T_{l}(\cdot) 和T_l(\cdot) 。对特征金字塔这些方法比较抽象,他们依然有一些限制。因为自顶向下的连接以没有方向的方式传播语义,这些语义在各层上是不均匀分布的。结果是金字塔特征层之间的语义分隔依然存在。接下来,在所有特征层上,特征的单向连接处理对产生增加语义信息的能力有限制。为了解决这个问题我们开发了一个使用biLSTM在所有特征层之间以单向横向连接产生深度融合的语义。接下来的章节将展示我们提出方法的细节。
ScarfNet用两步来解决语义信息的不符:(1)、使用biLSTM来组合打散的语义信息。(2)、使用逐通道注意模块将融合的特征重新分布到每个特征层。整个结构如下图所示:
将第k个金字塔特征X_{n-k+1: n} 作为输入,ScarfNet产生第l个特征图X'_l 为:
\begin{aligned} X_{l}^{\prime}=& \operatorname{ScarfNet}_{l}\left(X_{n-k+1: n}\right) \\ =& X_{l} \oplus \operatorname{ArNet}_{l}\left(\operatorname{ScNet}\left(X_{n-k+1: n}\right)\right) \\ & \text { Detection Outputs }=D_{l}\left(X_{l}^{\prime}\right) \end{aligned}
其中l=n-k+1, \ldots, n ,如式(6)所示ScarfNet由两部分组成:语义重组网络(ScNet)和注意重分布网络(ArNet)。首先,ScNet通过biLSTM来融合金字塔特征X_{n-k+1: n} ,并且用融合的语义产生输出特征。第二,ArNet收集从biLSTM的输出特征,并且用逐通道注意力来产生高质量的语义多尺度特征,连接到原始的特征金子塔上。最终,结果特征图用检测子网络D_{l}(\cdot) 单独处理来产生最终的检测结果。
通过ScNet产生的特征图X_{n-k+1: n}^{f} 为:
X_{n-k+1: n}^{f}=\operatorname{ScNet}\left(X_{n-k+1: n}\right)
X_l^f是第l层的输出特征图,细节如下图所示,描述了ScNet的细节。ScNet使用biLSTM在不同的金字塔之间均匀的融合打散的特征。biLSTM通过门函数,在多尺度层上选择融合语义信息。ScNet有匹配模块和biLSTM组成。匹配模块首先对金字塔特征X_{n-k+1: n} 的尺寸进行变换,使他们的尺寸相同。然后使用1\times 1 的卷积层来调整通道维度。结果,匹配模块产生通道数和尺寸都相同的特征图。尺寸变换操作通过双线性插值来完成。biLSTM和参考文献[23]相同。基于全局池化的结果,对输入连接和门参数的计算使用卷积层,来显著的节省计算。
特别地,biLSTM的操作可以简化为:
\begin{array}{c} \bar{X}_{l}=\text { GlobalAveragePooling }\left(X_{l}\right) \\ \bar{X}_{l-1}^{f}=\text { GlobalAveragePooling }\left(X_{l-1}^{f}\right) \\ i_{l}=\sigma\left(W_{x i} \bar{X}_{l}+W_{x^{f} i} \bar{X}_{l-1}^{f}+b_{i}\right) \\ f_{l}=\sigma\left(W_{x f} \bar{X}_{l}+W_{x^{f} f} \bar{X}_{l-1}^{f}+b_{f}\right) \\ o_{l}=\sigma\left(W_{x o} \bar{X}_{l}+W_{x^{f} o} \bar{X}_{l-1}^{f}+b_{o}\right) \\ G_{l}=\tanh \left(W_{x c} * X_{l}+W_{x^{f} c} * X_{l-1}^{f}+b_{c}\right) \\ C_{t}=X_{l} \circ C_{l-1}+i_{l} \circ G_{l} \\ X_{l}^{f}=o_{l} \circ \tanh \left(C_{l}\right) \end{array}
其中 \circ 代表哈达玛积,biLSTM的状态在前向和后向都更新。上式为前向更新,后向更新的表达式类似。
ArNet产生高层的语义特征图,连接到原始的金字塔特征图X_l 上,表达式为:
X_{l}^{\prime}=X_{l} \oplus \operatorname{ArNet}_{l}\left(X_{n-k+1: n}^{f}\right)
操作符\oplus 代表主通道连接。ArNet的具体结构如图4所示。ArNet连接biLSTM的输出X_{n-k+1: n}^{f} ,对他们应用逐通道注意力机制。注意力机制的权重通过构建1\times 1 的向量获得,具体方式为使用全局平均池化,并且将将它传递到两个全连接层,最后再接一个sigmoid函数。注意,这些逐通道注意力模块允许选择将语义传播到金字塔的每层。一旦注意力的权重使用了,匹配模块将特征图的结果进行下采样,并且应用1\times 1 的卷积来匹配通道维数,利用这些原始的金字塔特征。最终,输出的匹配模块连接到原始的特征图X_l 上,来产生高的语义特征X'_l 。