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

来源:晓飞的算法工程笔记 公众号

论文: Fine-Grained Dynamic Head for Object Detection

Introduction


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

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

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

Fine-Grained Dynamic Routing Space


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

  细粒度动态detection head的核心在于细粒度动态路由空间(fine-grained dynamic

routing space)的设计,如上图所示。对于第\(n\)层特征,动态路由空间的深度为\(D\),与FPN的3层特征相关,分别为\(n\)层、\(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\),该节点的特征标记为\(x^l=\{x_i^l \}^N_{i=1}\),\(N=H\times W\)为像素位置,共有\(C\)维,路由节点的候选路径\(F=\{f_k^l(\cdot) | k\in \{1, \cdots, K\}
\}\)根据相邻FPN层的尺寸定义,\(K\)为候选路径数。每个路径都有一个空间控制门(spatial gate),空间控制门的输出为门控因子(gating factor):

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

Gate Activation Function

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

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

Routing Path

  路由器在每个位置均有3个可选的后续路径,上下采样路径采用图b的结构进行实现,包含线性采样操作,而非采样路径则使用图a的结构进行实现。对于空间控制门\(g_k^l(\cdot)\)则使用了图c的轻量级结构进行实现,先通过\(3\times 3\)卷积将输入转换为维度为1的特征,然后通过论文提出的门控激活函数\(\delta(\cdot)\)将输出约束到\([0,1]\),将\(m^{k,j}\)进行最大池化后进行量化,非零的均量化为一,输出掩膜\(\mathcal{M}^{k,j}\),最后基于掩膜进行空间稀疏卷积(\(3\times 3\))。

  由于激活的路径数会被约束,池化和量化可以过滤掉大量未被激活的路径,减少很多计算量。其实这里最省的是只计算\(m^{k,j}\)非零的位置,但考虑非采样路径a需要进行两次稀疏卷积,还是池化一下靠谱点。另外,上下采样路径b里的卷积都采样深度卷积,进一步减少计算量。

Resource Budget

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

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

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

Experiment


  在FCOS上的对比实验。

  不同网络上的适配。

Conclusion


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





如果本文对你有帮助,麻烦点个赞或在看呗~

更多内容请关注 微信公众号【晓飞的算法工程笔记】

DynamicHead:基于像素级路由机制的动态FPN | NIPS 2020的更多相关文章

  1. 品尝阿里云容器服务:用nginx镜像创建容器,体验基于域名的路由机制

    在前一篇博文中我们了解了阿里云容器服务的路由机制: 请求 -> 负载均衡80端口 -> 容器主机9080端口 -> acsrouting路由容器80端口 --基于域名--> W ...

  2. Django2.0中基于正则表达式的路由机制(一)

    1.  在urls.py的文件中导入操作正则表达式的方法:(新版的Django是使用path方法对URL进行路由分配) from django.contrib import admin from dj ...

  3. MVC5之路由机制

    ---恢复内容开始--- MVC是一种模式,是基于asp.net上的一种设计.路由机制不属于MVC,路由机制属于asp.net.因此,mvc的路由机制就是基于asp.net路由机制上的一种“自定制”. ...

  4. CCNP路由实验之六 动态路由协议之IS-IS

     CCNP路由实验之六动态路由协议之IS-IS 动态路由协议能够自己主动的发现远程网络.仅仅要网络拓扑结构发生了变化.路由器就会相互交换路由信息,不仅能够自己主动获知新添加的网络.还能够在当前网络 ...

  5. 未来直播 “神器”,像素级视频分割是如何实现的 | CVPR 冠军技术解读

    被誉为计算机视觉领域 "奥斯卡" 的 CVPR 刚刚落下帷幕,2021 年首届 "新内容 新交互" 全球视频云创新挑战赛正火热进行中,这两场大赛都不约而同地将关 ...

  6. 基于FPGA的OLED真彩色动态图像显示的实现

    源:基于FPGA的OLED真彩色动态图像显示的实现 作为第3代显示器,有机电致发光器件(Organic Light Emitting Diode,OLED)由于其主动发光.响应快.高亮度.全视角.直流 ...

  7. Linux x86_64 APIC中断路由机制分析

    不同CPU体系间的中断控制器工作原理有较大差异,本文是<Linux mips64r2 PCI中断路由机制分析>的姊妹篇,主要分析Broadwell-DE X86_64 APIC中断路由原理 ...

  8. CCNP路由实验之七 动态路由之BGP

     CCNP路由实验之七 动态路由之BGP 动态路由协议能够自己主动的发现远程网络,仅仅要网络拓扑结构发生了变化,路由器就会相互交换路由信息,不仅能够自己主动获知新添加的网络,还能够在当前网络连接失 ...

  9. C#进阶系列——WebApi 路由机制剖析:你准备好了吗?

    前言:从MVC到WebApi,路由机制一直是伴随着这些技术的一个重要组成部分. 它可以很简单:如果你仅仅只需要会用一些简单的路由,如/Home/Index,那么你只需要配置一个默认路由就能简单搞定: ...

  10. Linux mips64r2 PCI中断路由机制分析

    Linux mips64r2 PCI中断路由机制分析 本文主要分析mips64r2 PCI设备中断路由原理和irq号分配实现方法,并尝试回答如下问题: PCI设备驱动中断注册(request_irq) ...

随机推荐

  1. STM32F401+nRF24L01无线传输音频(对讲机原型)

    尝试结合STM32F401的ADC, PWM, SPI(NRF24L01)和TIM, 试验了一下音频的无线传输(对讲机原型) 工作机制 音频采样 因为硬件的限制, 包括STM32F401片内存储, 内 ...

  2. uniapp实现点击加载更多

    使用场景 举个栗子:外卖app当订单商品数量比较多时,不方便一次性展示出来.通常会展示一部分,并在页面给出一个查看更多功能.点击后即可自定义展示剩余内容,比如可以每次点击多展示N个内容,或展示所有. ...

  3. golang读取用户名和密码文件并生成笛卡尔积

    密码爆破时需要读取用户名字典和密码字典来生成笛卡尔积派发爆破任务:直接读取全部字典内容到内存时成本较高: package main import ( "bufio" "f ...

  4. error C2039: "function": 不是 "std" 的成员的解决方法

    这个错误通过某度没找到合适的解决方案,故记录下来 其实如果使用 google 搜索错误的英文关键词,大概第一条就是解决问题的链接 Large number of "'function' is ...

  5. Java - 将TXT文本文件转换为PDF文件

    与TXT文本文件,PDF文件更加专业也更适合传输,常用于正式报告.简历.合同等场合.项目中如果有使用Java将TXT文本文件转为PDF文件的需求,可以查看本文中介绍的免费实现方法. 免费Java PD ...

  6. vscode中跑go test时打印详细信息配置

    1.文件>首选项>设置>搜索Test Flags 2.选择在settings.json中编辑 3.添加以下内容 "go.testFlags":[ "-v ...

  7. C#程序全局异常处理—WPF和Web API两种模式

    C#程序的全局异常处理,网上搜下资料都是一大堆,我这里最近也是独立做一个B/S结构的小项目, 后面又增加了需求用WPF实现相同的功能,这里将我所使用的全局异常处理方式做一个简短的总结分享. Web A ...

  8. 【Azure 事件中心】在Azure Function App中消费Event Hub数据,时常出现EventReceiveError

    问题描述 在Azure Function App中消费Event Hub数据,时常出现EventReceiveError:New receiver 'P3-00122a562-4fa4-7f3f-ad ...

  9. 初识JavaScript逆向——以网易云音乐和招标网站为例

    前言:需要掌握一定的JavaScript基础,能看懂基础的JavaScript代码. 我们平常在浏览网站的时候会看到许多加密的参数,如果需要知道它的原始数据,就需要知道整个加密过程,所以本篇文章就来介 ...

  10. Linux 多进程服务配置 systemd

    目录 Linux 多进程服务配置 systemd sysvinit和systemd 多进程保活 创建配置文件(设定重试次数) 多进程服务管理 链式启动(服务依赖) 指定关闭进程方式 - ExecSto ...