论文提出DCNv2,不仅对DCNv1的结构进行了改进,还使用了有效的蒸馏学习策略,使得性能有很大的提升,各个方面都值得借鉴



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

论文: Deformable ConvNets v2: More Deformable, Better Results

Introduction


  在提出可变形卷积DCNv1后,论文提出新版本的可变形卷积DCNv2,通过两种互补的策略以及蒸馏学习来增强模型的性能:

  • 增加可变形卷积的层数,使得DCNv2拥有更强的几何变换的学习能力,能够进行准确地预测。
  • 在可变形卷积模块中增加调制机制,每次采样不仅进行偏移,还会使用学习到的权重进行调节,能够进行更复杂的几何变换学习。
  • 为了充分榨干DCNv2提升的能力,借用知识蒸馏的方法进行训练,以R-CNN作为指导网络(teacher network),在训练时模仿其特征值。

Analysis of Deformable ConvNet Behavior


Spatial Support Visualization

  论文从3个互补的视角来了解图像区域对输出的影响:

  • Effective sampling / bin locations,通过计算输出值对应像素位置上的梯度来表示像素的重要程度。
  • Effective receptive fields,理论感受域内的像素对输出的贡献是不一样的,贡献可以通过有效感受域来表示,通过计算输出值对应每个像素的值扰动时的梯度得出,具体可以看参考内容文章。
  • Error-bounded saliency regions,通过逐步掩盖图片的部分区域并计算输出值,找到与整图输出值差异在阈值范围内的最小显著区域。

Spatial Support of Deformable ConvNets

  对conv5阶段的最后一层输出进行了上述的3个视角计算,图1从左往右目标的逐渐变大,每个子图从上往下分别为关于绿点输出的3种指标的可视化结构,可以得出以下结论:

  • 得益于深度卷积网络强大的表达能力,常规卷积能在一定程度上对几何变换进行建模学习,主要受卷积权重的影响。
  • 通过引入可变形卷积,综合卷积核权重以及偏移值,模型能够很好地对几何变换进行建模学习,输出关联了更多的目标区域,但也会包含较多不相关的物体的区域。

  论文继续对RoI区域也进行了上述3个视角的计算,对于常规RoI pooling和可变形RoI pooling,目标区域内的bin对输出的贡献更高,在可变形RoI pooling更为明显。但两种方法的显著区域同样都不够准确,造成有较多的额外内容干扰着输出。

More Deformable ConvNets


Stacking More Deformable Conv Layers

  由于可变形卷积能够更好地学习几何变换,因此大胆地将ResNet-50中的conv3、conv4和conv5中的所有\(3\times 3\)卷积替换成可变形卷积,共12层。DCNv1仅使用了3层,主要由于当时替换实验是在比较简单的VOC数据集上进行的,效果很快就饱和了,而当时在COCO上的偏移值可视化有一定的误导性,本文补充了更准确的实验。

Modulated Deformable Modules

  为了进一步加强可变形卷积对几何变换学习的能力,加入调制机制,可变形卷积不仅能对输入进行偏移,还可以调整各位置输入的权重。极端地,当权重为0则忽略该位置输入,为模型提供了另一种调整目标区域的方式。

  可调制变形卷积如公式1,\(\Delta p_k\)和\(\Delta m_k\)分别为\(k\)位置的可学习偏移值和权重标量,\(\Delta m_k\)的范围为\([0,1]\),偏移后的值的计算依然用双线性插值计算。\(\Delta p_k\)和\(\Delta m_k\)通过相同旁路卷积层计算,旁路输出channel为\(3K\),\(K\)为主干的卷积核大小,前\(2K\)维是每个位置的x和y偏移,后\(K\)维通过sigmoid层获得每个位置的权重。旁路卷积的参数初始为0,所以\(\Delta p_k\)和\(\Delta m_k\)初始为0和0.5,学习率为主干学习率的0.1倍。

  可调制的变形RoI pooling单个bin的计算如公式2,\(n_k\)为bin内的像素总数,\(\Delta p_k\)和\(\Delta m_k\)对应整个bin的偏移和权重。\(\Delta p_k\)和\(\Delta m_k\)通过旁路RoI pooling+2 x 1024-D fc + 3k-D fc计算,前\(2K\)维是归一化的bin偏移值,与RoI区域相乘后得到最终的bin偏移值,后\(K\)维通过sigmoid层获得每个bin的权重,初始化和学习率与上面的一致。

R-CNN Feature Mimicking

  从图2的Error-bounded saliency regions结果看到,不管常规卷积还是可变形卷积都会包含部分非目标区域,对最终的结果造成影响。论文通过实验发现,可调制变形卷积虽然有更强的几何变换建模能力,但常规的训练没有特定的损失,很难引导可调制变形卷积的学习。因此,考虑到性能和准确率的取舍,论文加入特征模仿(feature mimicking)引导可变形卷积生成类似R-CNN从croped图片中提取到的特征。由于背景的内容较为复杂,特征模仿损失仅用于正样本。

  整体的训练架构如图3,添加额外R-CNN分支用于特征模仿,分支的结构与主干网络类似。对于RoI区域\(b\),从原图中crop下来并Resize后送到R-CNN分支得到\(14\times 14\)的特征图,再进行整图的可调制变形RoI pooling,通过两层全连接得到1024-D特征\(f_{RCNN}(b)\),最后接\(C+1\)-way Sfotmax分类器预测分类结果。

  特征模仿损失通过余弦相似度的计算,如公式3,\(\Omega\)为用于特征模仿的所有RoI区域。在训练时,每次随机采样32个RPN生成的正样本构成\(\Omega\),同时计算特征模块损失和R-CNN分支的分类交叉熵损失。RCNN分支的两个新损失的权重为主干对应项权重的0.1倍,RCNN分支除了最后的classification head外的模块均与主干共享。在推理时,仅使用Faster R-CNN模块。

Experiments


Enriched Deformation Modeling

  对DCNv2的两个结构改进进行了对比实验,表1和表2分别为短边1000和短边800的实验,结合图1和图2的可视化结果,两个改进都能有效地提高准确率。

R-CNN Feature Mimicking

  对于特征模仿学习,仅模仿正样本的效果最好。

Application on Stronger Backbones

Conclusion


  论文提出DCNv2,不仅对DCNv1的结构进行了改进,还使用了有效的蒸馏学习策略,使得性能有很大的提升,各个方面都值得借鉴。

参考内容





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

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

可变形卷积系列(二) MSRA提出升级版DCNv2,变形能力更强 | CVPR 2019的更多相关文章

  1. ACNet: 特别的想法,腾讯提出结合注意力卷积的二叉神经树进行细粒度分类 | CVPR 2020

    论文提出了结合注意力卷积的二叉神经树进行弱监督的细粒度分类,在树结构的边上结合了注意力卷积操作,在每个节点使用路由函数来定义从根节点到叶子节点的计算路径,结合所有叶子节点的预测值进行最终的预测,论文的 ...

  2. Deformable Convolutional Networks-v1-v2(可变形卷积网络)

    如何评价 MSRA 视觉组最新提出的 Deformable ConvNets V2? <Deformable Convolutional Networks>是一篇2017年Microsof ...

  3. 深度学习方法(十三):卷积神经网络结构变化——可变形卷积网络deformable convolutional networks

    上一篇我们介绍了:深度学习方法(十二):卷积神经网络结构变化--Spatial Transformer Networks,STN创造性地在CNN结构中装入了一个可学习的仿射变换,目的是增加CNN的旋转 ...

  4. 网络结构解读之inception系列二:GoogLeNet(Inception V1)

    网络结构解读之inception系列二:GoogLeNet(Inception V1) inception系列的开山之作,有网络结构设计的初期思考. Going deeper with convolu ...

  5. 图机器学习(GML)&图神经网络(GNN)原理和代码实现(前置学习系列二)

    项目链接:https://aistudio.baidu.com/aistudio/projectdetail/4990947?contributionType=1 欢迎fork欢迎三连!文章篇幅有限, ...

  6. tensorflow笔记(五)之MNIST手写识别系列二

    tensorflow笔记(五)之MNIST手写识别系列二 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7455233.html ...

  7. C语言高速入门系列(二)

    C语言高速入门系列(二) -----转载请注明出处coder-pig 本节引言: 在前面一节中我们对C语言进行了初步的了解,学会了使用IDE进行代码的编写,编译执行! 在这一节中我们会对C语言的基本的 ...

  8. 前端构建大法 Gulp 系列 (二):为什么选择gulp

    系列目录 前端构建大法 Gulp 系列 (一):为什么需要前端构建 前端构建大法 Gulp 系列 (二):为什么选择gulp 前端构建大法 Gulp 系列 (三):gulp的4个API 让你成为gul ...

  9. WPF入门教程系列二十三——DataGrid示例(三)

    DataGrid的选择模式 默认情况下,DataGrid 的选择模式为“全行选择”,并且可以同时选择多行(如下图所示),我们可以通过SelectionMode 和SelectionUnit 属性来修改 ...

  10. Web 开发人员和设计师必读文章推荐【系列二十九】

    <Web 前端开发精华文章推荐>2014年第8期(总第29期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...

随机推荐

  1. Vue中虚拟DOM的理解

    Vue中虚拟DOM的理解 Virtual DOM是一棵以JavaScript对象作为基础的树,每一个节点称为VNode,用对象属性来描述节点,实际上它是一层对真实DOM的抽象,最终可以通过渲染操作使这 ...

  2. 配置主机访问virtualbox中redhat7.3虚拟机网络(其他系统配置也类似)

    为什么默认无法访问? virtualbox默认分配一个NAT网络,这个是给虚拟机操作系统访问互联网用的,默认主机通过这个ip段无法直接访问虚拟机.[网卡1] 需要添加一块网卡 在虚拟机关闭状态下,点[ ...

  3. 《深入理解Java虚拟机》(八) 记录一次OOM问题分析实战

    目录 一.问题分析思路 二.主要问题概述以及分析 1.相关操作 2.主要问题现象 3.初步分析问题 三.相关工具介绍 四.实际问题快照分析 1.通过Memory查看老年代内存占用情况 2.选择Live ...

  4. 学习go语言编程之网络编程

    Socket编程 Golang语言标准库对Socket编程进行了抽象,无论使用什么协议建立什么形式的连接,都只需要调用net.Dial()即可. Dial()函数 Dial()函数的原型如下: fun ...

  5. 进程之间共享数据Manager,线程相关使用Thread,用类定义线程,守护线程setDaemon,线程锁Lock,线程信号量Semaphore---day32

    1.Manager # ### Manager (list列表,dict字典)进程之间的共享数据(列表或字典等) from multiprocessing import Process,Manager ...

  6. 【Azure 应用服务】App Service 部署txt静态文件和Jar包在不同目录中的解决办法

    问题描述 在Web App wwwroot (Windows系统中)根目录下如何部署一个jar包和一个text文件,让两个文件都能被访问? 解决办法 Jar包和Text文件都分别放置在两个单独的文件夹 ...

  7. 使用 RKE 方式搭建 K8s 集群并部署 NebulaGraph

    本文由社区用户 Albert 贡献,首发于 NebulaGraph 论坛,旨在提供多一种的部署方式使用 NebulaGraph. 在本文,我将会详细地记录下我用 K8s 部署分布式图数据库 Nebul ...

  8. 为什么HashMap的键值可以为null,而ConcurrentHashMap不行?

    写在开头 昨天在写<HashMap很美好,但线程不安全怎么办?ConcurrentHashMap告诉你答案!>这篇文章的时候,漏了一个知识点,知道晚上吃饭的时候才凸显想到,关于Concur ...

  9. Ubuntu上文件系统根目录磁盘空间扩充

    今天使用Ubuntu的时候,出现了磁盘根目录空间不足的提示,需要我们对于根目录磁盘空间进行扩充. 1.打开终端输入命令,安装gparted管理器 sudo apt-get install gparte ...

  10. Delete `␍`

    新电脑遇到的问题 Delete `␍`eslint(prettier/prettier) 网上一搜,一堆解决办法,没有一个说到点子上,都是表面上如何避免,如何设置VSCODE... 都知道是换行符的问 ...