查看原文
其他

重磅开源!目标检测新网络DetectoRS:54.7 AP,特征金字塔与空洞卷积的完美结合

Rocky X 极市平台 2021-09-19

加入极市专业CV交流群,与 10000+来自港科大、北大、清华、中科院、CMU、腾讯、百度 等名校名企视觉开发者互动交流!

同时提供每月大咖直播分享、真实项目需求对接、干货资讯汇总,行业技术交流。关注 极市平台 公众号 ,回复 加群,立刻申请入群~

本周六,林宙辰、程明明、邓成教授领衔的CSIG-CVPR2020图像语义分割&跨模态学习专题将在极市平台直播,7位优秀青年学子将介绍他们今年CVPR 2020一作论文。请大家锁定直播时间(6/6上午9:30)。详情戳这里,在极市平台后台回复“58”,即可获取直播链接。



论文地址https://arxiv.org/abs/2006.02334
代码地址(基于mmdetection实现):
https://github.com/joe-siyuan-qiao/DetectoRS
本文是谷歌团队提出的最新的目标检测方案,并且已经完全开源。整个算法将递归特征金字塔(RFP,Recursive Feature Pyramid)和可切换的空洞卷积(SAC,Switchable Atrous Convolution)结合在一起,在COCO test-dev目标检测任务中,达到了54.7% box AP,相比之前提升1.4 AP,性能强悍。

简介


目标检测一直都是计算机视觉中最值得关注的领域,从经典的两阶段(论文中将其概括为两次looking和thinking机制)方法Faster RCNN、单阶段的YOLO系列、SSD系列,到近段时间性能卓越的EfficientDet、CBNet、ResNeSt等,可以看出,通过backbone结构的改进来提升目标检测的性能是目前涨点和研究的新热点,值得大家关注与创新。

而在本文中,DetectoRS同样从backbone的角度出发,对目标检测性能进行强化,具体来说有两大部分的创新:

1、首先,DetectoRS在宏观层面上,提出了递归特征金字塔(RFP,Recursive Feature Pyramid),它将特征金字塔网络(Feature Pyramid Networks)的额外反馈连接加入到在自下而上的骨backbone层中。

2、其次,DetectoRS在微观层面上,提出了可切换的空洞卷积(SAC,Switchable Atrous Convolution),它以不同的空洞率(rate)对特征进行卷积,并使用switch函数合并卷积后的结果,SAC可以实现从标准卷积到Contional卷积的有效转换,而无需更改任何预训练模型。


将递归特征金字塔(RFP,Recursive Feature Pyramid)和可切换的空洞卷积(SAC,Switchable Atrous Convolution)合并形成了DetectoRS,大大增强了目标检测的性能。具体来说,在COCO test-dev数据集上达到了54.7% box AP的SOTA性能,同时在COCO实例分割任务上达到47.1% mask AP的的性能,在COCO全景分割任务上达到49.6% AQ的性能。

DetectoRS的baseline:HTC(Hybrid Task Cascade)

首先,来介绍一下Cascade RCNN。2018年CVPR上的Cascade RCNN算法通过级联多个检测器来不断优化结果,每个检测器都基于不同的IoU阈值来界定正负样本,前一个检测器的输出作为后一个检测器的输入,并且检测器越靠后,IoU的阈值越高。
Cascade RCNN具体结构
上图是Cascade RCNN采用的级联方法,可以看到每一个检测器的边框输出作为下一个检测器的输入,并且检测器的IoU阈值是逐渐提升的,因此这种方法可以逐步过滤掉一些误检框,并且提升边框的定位精度。Cascade RCNN算法深入探讨了IoU阈值对检测器性能的影响,并且在不增加任何tricks的前提下,在多个数据集上都有了明显的精度提升。

接下来,来看HTC(Hybrid Task Cascade),HTC可以看作是在cascade R-CNN和mask R-CNN的基础上,作者想通过级联和来实现实例分割,进而找出一种最好的级联结构,来实现检测,提高mAP。

HTC是一种多任务多阶段的混合级联结构,融合了一个语义分割的分支来增强 spatial context。整个框架的演进可以用上面的四张图来表示,其中 M 表示 mask 分支,B 表示 box 分支,数字表示 stage,M1 即为第一个 stage 的 mask 分支。HTC这种框架取得了明显优于 Mask R-CNN 和 Cascade Mask R-CNN 的结果。

HTC的关键思想是:通过在每个阶段结合级联和多任务来改善信息流,并利用空间背景来进一步提高准确性。整个网络是多任务多阶段的混合级联结构,训练时每个 stage 内 box 和 mask 分支采用交替执行,并在不同 stage 的 mask 分支之间引入直接的信息流

HTC在相邻的 stage 的 mask 分支之间增加一条连接,提供 mask 分支的信息流,让  能知道  的特征。

同时,HTC将语义分割引入到实例分割框架中,以获得更好的 spatial context。

宏观角度:RFP(递归特征金字塔)

RFP(递归特征金字塔)= Recursive Structure + Bottom-up Backbone Layers + Top-down FPN Layers + ASPP as the Connecting Module
RFP提出的递归方法与最近提出的CBNet 中的递归方法相似,CBNet方法中将多个主干级联以输出特征作为FPN的输入。相比之下,RFP通过包含ASPP结构的FPN和有效的融合模块一起来执行递归计算。
1、Recursive Feature Pyramid
递归特征金字塔(RFP)主要将反馈连接添加到FPN自下而上的过程中(FPN结构最左侧为普通的卷积网络,默认使用ResNet结构,用作提取语义信息)

在RFP环节对ResNet进行了改进,以使其同时接受原来的特征图输入和反馈信息作为RFP结构的输入。一般来说,ResNet具有四个阶段,每个阶段都由几个相似的基本残差block组成。这里仅对每个阶段的第一个块进行更改,如图3所示。整体的改进结构比较简单,很好地融合了输入Input和RFP的特征。

那么,如何实现级联呢?主要来看下面这两个模块。

 2、ASPP as the Connecting Module

使用带有空洞卷积的空间金字塔池化(ASPP)模块来实现两个递归特征金字塔的级联连接,该连接模块以其特征为输入并将其转换为图3中使用的RFP的特征(RFP Feature)。

ASPP结构示意图,本文中有所修改去除了1x1卷积分支

本文中的ASPP有四个并行分支对其输入进行扩展,然后将它们的输出沿通道维连接在一起,以形成的最终输出。它们的三个分支使用卷积层,然后是ReLU层,输出通道数是输入通道数的1/4。最后一个分支使用全局平均池化层来压缩特征,然后使用1x1卷积层和ReLU层将压缩后的特征转换为1/4尺寸(逐通道)的特征。最后,将其调整大小并与其他三个分支的特征进行连接。三个空洞模块的配置:kernel size = [1, 3, 3], atrous rate =[1, 3, 6], padding = [0, 3, 6]。四个分支中的每个分支都产生一个具有输入特征通道数量1/4的通道的特征,将它们连接起来将生成与RFP的输入特征尺寸相同的特征。

3、Output Update by the Fusion Module


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

微观角度:SAC(Switchable Atrous Convolution)


SAC(可切换的空洞卷积)= Different atrous rates + Switch functions

1、SAC(可切换的空洞卷积)结构


作者将主干网络ResNet中的每个3x3卷积层都转换为SAC,从而在不同的空洞率之间实现对卷积计算的软切换。上图中的锁表示权重相同,只是训练的细节差异有所不同。两个全局上下文模块将图像级信息添加到特征中。

SAC的计算过程可以用上面的式子来表示,其中x为输入,w为权重,r为空洞卷积的空洞率rate,这也是SAC的超参数。Δw表示具有可训练的权重,并且switch切换函数S(·)由5x5的平均池化层和1x1卷积层组成,其与输入和位置相关。

SAC中锁定机制,通过将一个权重设置为w而另一个权重设置为w +Δw,其原因如下:目标检测器通常使用预训练的checkpoint来初始化权重。但是,对于从标准卷积层转换而来的SAC层,较大的空洞率rate的权重通常是缺失的。由于可以通过相同的权重以不同的粗略度粗略地检测出不同比例的物体,因此用预训练模型中的权重来初始化丢失的权重是可以的。本文使用w + ∆w表示从预训练checkpoint开始的缺失的权重,并使用0初始化∆wi。当固定Δw= 0时,通过实验观察到AP下降了0.1%,但是没有锁定机制的∆w会使AP降低很多。

2、SAC中的全局上下文模块(Global Context)

如图4所示,作者在SAC的主要组件之前和之后插入两个全局上下文模块。当输入特征首先被全局平均池化层压缩时,这两个模块的权重就降低了。全局上下文模块与SENet相似,但有两个主要区别:(1)全局上下文模块只有一个卷积层,没有任何非线性层;(2)输出被回到主干中,而不是将输入乘以通过Sigmoid重标定操作后的值。

从实验上发现在SAC组件之前添加全局上下文信息(即在switch函数功能中添加全局信息)对检测性能有积极影响。作者推测这是因为在可以获得全局信息时,switch函数可以做出更稳定的切换预测。然后,将全局信息移至切换功能之外,并将其放置在主体之前和之后,以便卷积层和switch函数都能获取全局上下文信息。

3、SAC的实现细节

使用可变形卷积替换图4中的卷积运算,通过SAC替换骨干网络ResNet中的所有3x3卷积层,全局上下文模块中的权重和偏差用0初始化。switch函数中的权重用0初始化,偏置设置为1。Δw用0初始化。

实验与结果


训练数据集作者采用的COCO数据集。作者使用mmdetection 实现了Detec-toRS。baseline模型是HTC ,在单个NVIDIA TITAN RTX显卡上测试。为了方便对比,整体的实验配置和HTC网络保持一致。

消融实验:

baseline:HTC + ResNet-50 + FPN

将提出的RFP和SAC添加到baseline,这两者都能够将AP提高4%以上,而速度不会降低太多。将它们组合在一起的DetectoRS可以以3.9 fps的速度获得49%的box AP和42.1%的Mask AP。


下表是RFP和SAC各个模块的作用,验证了结构设计的优势。

从上面的可视化对比图可以看出,RFP与选择性增强或抑制神经元激活的人类视觉类似,能够更轻松地找到被遮挡的对象,而附近的上下文信息则更为关键。由于SAC可以根据需要增加感受野,因此它更有能力检测图像中的大物体。
对比实验
在COCO test-dev 目标检测中,DetectoRS在使用ResNet-50和ResNeXt-101-32x4d作为主干网络时达到54.7% AP,超越了其他的算法。


扩展实验

在COCO test-dev 实例分割中,DetectoRS在使用ResNet-50和ResNeXt-101-32x4d作为主干网络时达到47.1% AP,目前与ResNeSt并列排名第一。


在COCO test-dev 全景分割中,DetectoRS达到49.6% PQ,相比于其他算法有将近两个点的提升。

更多实验细节可以参考原文的代码。


作者档案

Rocky X,一个乐于分享技术干货的AI爱好者个人公众号:AI算法修炼营欢迎大家联系极市小编(微信ID:fengcall19)加入极市原创作者行列



推荐阅读:



添加极市小助手微信(ID : cv-mart),备注:研究方向-姓名-学校/公司-城市(如:AI移动应用-小极-北大-深圳),即可申请加入AI移动应用极市技术交流群,更有每月大咖直播分享、真实项目需求对接、求职内推、算法竞赛、干货资讯汇总、行业技术交流一起来让思想之光照的更远吧~


△长按添加极市小助手


△长按关注极市平台,获取最新CV干货


觉得有用麻烦给个在看啦~  

: . Video Mini Program Like ,轻点两下取消赞 Wow ,轻点两下取消在看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存