DynamicHead:基于像素级路由机制的动态FPN | NIPS 2020

论文提出了细粒度动态detection head,能够基于路由机制动态地融合不同FPN层的像素级局部特征进行更好的特征表达。从设计的路由空间来看是一个十分耗时的操作,但是作者设计的高效路由器实际计算十分高效。实验结果来看,细粒度动态detection head可以即插即提点
来源:晓飞的算法工程笔记 公众号

论文: Fine-Grained Dynamic Head for Object Detection

DynamicHead:基于像素级路由机制的动态FPN | NIPS 2020_第1张图片

  • 论文地址:https://arxiv.org/abs/2012.03519
  • 论文代码:https://github.com/StevenGrove/DynamicHead

Introduction


  在目标检测算法的研究中,特征金字塔FPN是十分重要的结构,能够很好地表达目标的多尺度特征。近期也有很多FPN结构的改进研究,比如手工设计的PANet、FPG以及自动搜索的NAS-FPN、Auto-FPN。但上述的改进研究有两点问题:

  • 在训练时将训练目标粗略地分配给某个FPN层,并且认为目标区域是不可分割,层间融合也是整层进行。这种策略可能会忽略了目标分散在FPN不同层的细粒度局部特征,这些局部特征能够很好地提高目标的语义信息。
  • detection head的预测结果基于单层FPN特征,分辨率固定, 可能会忽略了重要的小区域特征。

DynamicHead:基于像素级路由机制的动态FPN | NIPS 2020_第2张图片

  为了解决上述的问题,论文提出了细粒度动态detection head,能够基于路由机制动态地融合不同FPN层的像素级局部特征进行更好的特征表达。该方法参考了粗粒度的动态网络方法,集中在像素级别进行路由选择。

Fine-Grained Dynamic Routing Space


  FPN-based目标检测网络通过主干网络获取不同分辨率特征,然后通过top-bottom pathway以及横向连接进行多尺度特征融合,最后使用简单的共享detection head对不同分辨率的特征进行结果预测。

DynamicHead:基于像素级路由机制的动态FPN | NIPS 2020_第3张图片

  细粒度动态detection head的核心在于细粒度动态路由空间(fine-grained dynamic
routing space)的设计,如上图所示。对于第 n n n层特征,动态路由空间的深度为 D D D,与FPN的3层特征相关,分别为 n n n层、 n − 1 n-1 n1层以及 n + 1 n+1 n+1层。动态路由空间的基础为细粒度动态路由器(fine-grained dynamic router),根据状态选择各像素的后续路径,每个像素有3个不同的路径可供选择。

Fine-Grained Dynamic Routing Process


  给定路由空间以及几个独立的节点,使用论文提出的细粒度动态路由器(fine-grained dynamic routers)完成多尺度特征的融合,主要进行element-wise的相加以及像素级路由路径的选择。

Fine-Grained Dynamic Router

  给定路由空间节点 l l l,该节点的特征标记为 x l = { x i l } i = 1 N x^l=\{x_i^l \}^N_{i=1} xl={xil}i=1N N = H × W N=H\times W N=H×W为像素位置,共有 C C C维,路由节点的候选路径 F = { f k l ( ⋅ ) ∣ k ∈ { 1 , ⋯   , K } } F=\{f_k^l(\cdot) | k\in \{1, \cdots, K\} \} F={fkl()k{1,,K}}根据相邻FPN层的尺寸定义, K K K为候选路径数。每个路径都有一个空间控制门(spatial gate),空间控制门的输出为门控因子(gating factor):

θ k l \theta_k^l θkl为协助网络的参数,对应第 k k k个控制门,参数是位置共享的。而 m i k , l ∈ [ 0 , 1 ] m_i^{k,l}\in [0, 1] mik,l[0,1]是连续的,允许单个像素的多个后续路径被激活。在实现时,只取激活门控因子为正数的路径,所以单节点的多路径路由输出为:

Gate Activation Function

  门控激活函数的输出范围为 [ 0 , 1 ] [0,1] [0,1],当输出为0时禁止该路径。另外,门控激活函数必须是可微的,方便反向传播的学习。在考虑了其它研究的实现方案之后,论文提出了restricted tanh函数的变种:

τ \tau τ为超参数,用于控制 0 + 0^+ 0+的梯度值。公式3不仅可导,还解决了restricted tanh在零处梯度不连续的问题。

Routing Path

DynamicHead:基于像素级路由机制的动态FPN | NIPS 2020_第4张图片

  路由器在每个位置均有3个可选的后续路径,上下采样路径采用图b的结构进行实现,包含线性采样操作,而非采样路径则使用图a的结构进行实现。对于空间控制门 g k l ( ⋅ ) g_k^l(\cdot) gkl()则使用了图c的轻量级结构进行实现,先通过 3 × 3 3\times 3 3×3卷积将输入转换为维度为1的特征,然后通过论文提出的门控激活函数 δ ( ⋅ ) \delta(\cdot) δ()将输出约束到 [ 0 , 1 ] [0,1] [0,1],将 m k , j m^{k,j} mk,j进行最大池化后进行量化,非零的均量化为一,输出掩膜 M k , j \mathcal{M}^{k,j} Mk,j,最后基于掩膜进行空间稀疏卷积( 3 × 3 3\times 3 3×3)。
  由于激活的路径数会被约束,池化和量化可以过滤掉大量未被激活的路径,减少很多计算量。其实这里最省的是只计算 m k , j m^{k,j} mk,j非零的位置,但考虑非采样路径a需要进行两次稀疏卷积,还是池化一下靠谱点。另外,上下采样路径b里的卷积都采样深度卷积,进一步减少计算量。

Resource Budget

  过多的路由路径会造成过大的计算量,所以需要增加一个惩罚项来引导路由器禁用尽可能多的路径。定义 C k , l \mathcal{C}^{k,l} Ck,l为路径相关的计算复杂度,则单节点的计算消耗为:

Ω i k , l \Omega_i^{k,l} Ωik,l为位置 i i i的感受域,这里采用最大池化来直接获取需要进行计算的位置,跟上面的图c类似。公式4能够很好的引导减少门控特征图 m k , l m^{k,l} mk,l的值,将细粒度动态路由添加到网络时,需增加资源消耗的损失项:

  最终完整的网络损失函数为:

Experiment


DynamicHead:基于像素级路由机制的动态FPN | NIPS 2020_第5张图片

DynamicHead:基于像素级路由机制的动态FPN | NIPS 2020_第6张图片

  在FCOS上的对比实验。

DynamicHead:基于像素级路由机制的动态FPN | NIPS 2020_第7张图片

  不同网络上的适配。

Conclusion


  论文提出了细粒度动态detection head,能够基于路由机制动态地融合不同FPN层的像素级局部特征进行更好的特征表达。从设计的路由空间来看是一个十分耗时的操作,但是作者设计的高效路由器实际计算十分高效。实验结果来看,细粒度动态detection head可以即插即提点。



如果本文对你有帮助,麻烦点个赞或在看呗~
更多内容请关注 微信公众号【晓飞的算法工程笔记】

DynamicHead:基于像素级路由机制的动态FPN | NIPS 2020_第8张图片

你可能感兴趣的:(晓飞的算法工程笔记,计算机视觉,深度学习,人工智能,机器学习,算法)