【目标检测】DetectoRS

1、论文

题目:《DetectoRS: Detecting Objects with Recursive Feature Pyramidand Switchable Atrous Convolution》
代码地址:https://github.com/joe-siyuan-qiao/DetectoRS

2、引言

DetectoRS网络于2020年提出,主要贡献:
①递归特征金字塔(Recursive Feature Pyramid);
②可切换空洞卷积(Switchable Atrous Convolution)。
递归特征金字塔代表宏观层面,采用的是自下而上的反馈连接方式,本质上是对backbone进行优化设计;可切换空洞卷积代表微观层面,以不同的空洞率对特征进行卷积,并使用switch函数来进行控制,本质上是对卷积核的优化,采用的是自适应空洞率大小的卷积核(网络中switch函数设置的空洞率为1和3)。
在COCO-test-dev上,探测器实现了54.7%的目标检测AP,48.5%的掩模AP用于实例分割,50.0%的PQ用于全景分割,是目前效果最好的SOTA。

3、递归特征金字塔Recursive Feature Pyramid

3.1 RFP整体结构

递归特征金字塔网络是在经典的融合式FPN结构的基础上,增加了“looking and thinking twice or more”的想法,本质上将输入图像特征进行反复的提纯,丰富FPN的表达能力,使得提取到的特征更加适合检测或者分割。递归的作用是能够使得目标检测的错误回传信息更直接地反馈调整主干网的参数。
递归FPN理解起来很容易,就是将传统FPN融合后的输出,再输入进Backbone,进行二次循环.
在这里插入图片描述
为了便于理解,作者将递归FPN中的两阶段递归FPN形式,拆解为上图c的形式:

  • 第一阶段:图1(a)所示的FPN;
  • 第二阶段:图1(b)所示的RFP,与FPN的区别在于增加了ASPP模块和Fusion模块,ASPP模块用于实现模块连接,Fusion模块用于融合第一阶段FPN的输出特征f_i^t
  • 和第二阶段RFP的输出特征f_i^(t+1),融合后的作为最终输出。

3.2

为了方便RFP反馈的特征信息作为backbone中stage的输入,作者对ResNet进行修改,从而允许x与R(f)同时作为输入,ResNet通常有四个stage,每个stage包含几个相似结构的残差块blocks,只对每个stage中的第一个block(s=2,通过shortcut的残差block)进行修改。
在这里插入图片描述
如上图所示,将RFP转换后的模块的输出特征加到shortcut计算出的特征上。这样很好地融合了输入Input和RFP的特征。为了使用特征 R(f),作者增加了一个卷积核大小是1的Conv,该层的权重初始化为0,确保加载预训练权重时,它不会有任何的影响。

那么,如何实现级联呢?

3.3 ASPP模块

使用带有空洞卷积的空间金字塔池化模块(ASPP)来实现两个递归特征金字塔的级联连接,该连接模块以f_i^t 特征为输入并将其转换为上图3中使用的RFP的特征。
ASPP模块的输入输出特征尺寸是相同的,是一个可即插即用模块,下图是ASSP模块的结构图。
在这里插入图片描述

3.4 Fusion模块

融合模块与循环神经网络中的更新过程非常相似,融合模块通过卷积层和Sigmoid运算来计算注意力图,然后将结果注意力图用于计算更新后的加权和。
在这里插入图片描述

如上图5所示,f_i^t 表示第t阶段第i层的输出,f_i^(t+1) 表示第t+1阶段第i层的输出,Fusion模块的作用就是将这两个相邻阶段的特征按照学习到的权重重新更新,然后再进行融合,权重α由f_i^(t+1) 的后接卷积层和Sigmoid函数实现。

3.5 Sharing阶段

作者认为既然要按照递归的方式使用特征金字塔,那么在递归过程中需要将输入图像重新进行卷积生成新的特征金字塔Fnew,将第一阶段的输出特征f_i^t 经过ASPP模块后,再与递归过程中的Fnew相加,相加后的结果作为第二阶段的特征金字塔,然后再类似FPN进行特征融合得到f_i^(t+1) 。
论文中有部分实验,作者加入Sharing,Sharing就是Fnew的生成方式,生成方式有两种:
①采用和第一阶段FPN相同的权重;
②添加新的卷积层生成新的特征金字塔。
注意:方式①叫做Sharing,方式②称为不Sharing

4、可切换空洞卷积Switchable Atrous Convolution

4.1空洞卷积

空洞卷积是增大卷积核在卷积层中感受野的有效技术。空洞率为r的空洞卷积将r-1个0添加在两个连续的卷积核之间,相当于将k×k卷积核的大小扩大到ke=k+(k-1)(r-1),而不会增加参数个数或计算量。

4.2 可切换空洞卷积SAC

SAC = Different atrous rates + Switch functions
SAC的本质是对同一种不同尺度的物体,使用相同的卷积权值、在不同的空洞率atrous rates之间实现卷积的计算,以此来粗略的进行检测。相比于空洞卷积,SAC增加了一个权值锁定机制,使得网络训练时尺度的选择可以更加灵活、有效,并且不用改变任何预先训练的模型。因此,对于许多预先训练的主干网络来说,SAC是一个即插即用模块,同时,SAC还使用了全局上下文信息,用于稳定切换机制。
在这里插入图片描述
由上图SAC的整体结构可知,SAC模块有3个主要组成部分:两个全局上下文模块和一个SAC组件,两个全局上下文模块分别放在SAC组件前后。

4.2.1 SAC组件

y = Conv(x, w, r)表示卷积操作,y是输出、x是输入、w是权重、r是空洞率(r是SAC的超参数),卷积层转换成SAC组件的过程如下:
在这里插入图片描述
作者提出了一个闭锁机制,设一个权重为w,另一个权重为w+Δw。其原因如下:目标检测算法通常采用预训练权重来初始化网络权重。但对于从标准卷积层转换而来的SAC层,较大空洞率的权重通常是缺失的。由于可以使用相同的卷积权重、在不同的空洞率下,检测出同一种不同尺度的物体,因此用预训练模型的权重来初始化这些缺失的权重是可以的。本文使用w+Δw作为这些缺失的权重,其中w来自预训练模型的权重,Δw初始化为0。当Δw=0时,通过实验观察到AP降低了0.1%。而不用闭锁机制,AP则会下降更多。

4.2.2全局上下文模块Global Context

在SAC的全局上下文信息模块中,输入特征首先经过全局平均池化层进行模型压缩,后接1×1卷积层,将该输出与输入特征相加,得到该模块的输出。
作者发现:全局上下文信息模块添加到SAC中,对检测性能有积极影响,作者推测是由于switch函数使用全局信息后,可以作出稳定地切换预测。
SAC的全局上下文模块与SENet的相似,但是有两个不同:
(1)只有一个卷积层,没有任何其他非线性层;
(2)全局上下文模块的输出是与主干路径相加,而不是经过sigmoid之后再相乘。

4.2.3 SAC实现细节

(1)使用可变形卷积替换卷积层转换成SAC组件公式中的卷积运算;switch函数中的权重用0初始化,偏置设置为1,Δw用0初始化。
(2)用SAC替换ResNet中的所有3x3卷积层
(3)全局上下文模块中的权重和偏差用0初始化

5、实验

具体见原论文

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值