可变形卷积系列(三) Deformable Kernels,创意满满的可变形卷积核 | ICLR 2020
论文提出可变形卷积核(DK)来自适应有效感受域,每次进行卷积操作时都从原卷积中采样出新卷积,是一种新颖的可变形卷积的形式,从实验来看,是之前方法的一种有力的补充。
来源:晓飞的算法工程笔记 公众号
论文: Deformable Kernels: Adapting Effective Receptive Fields for Object Deformation

Introduction

传统的卷积由于存在硬性的规则,在对于物体放大或旋转时,不能作出适应性的改变,而可变形卷积则通过改变输入的采样位置来进行适应性的改变,即改变理论感受域。但理论感受域并不能度量像素对输出的贡献,相比理论感受域,更重要的是有效感受域(ERF),通过计算输出对应输入的偏导获得(与卷积权重相关),改变理论感受域只是改变有效感受域的一种手段。
为此,论文提出可变形卷积核(Deformable Kernels, DK),用于进行可变形建模的新型卷积操作,在推理时根据输入直接生成新的卷积核来改变有效感受域。如图d,DK学习卷积核的偏移来对原卷积进行重新采样,而不改变输入数据。从实验结果来看,DK对分类任务和检测任务都十分有效,结合旧的可变形卷积方法能产生更好的结果。
Approach
对有效感受域概念不感兴趣的可以直奔后面对可变形卷积核的描述,前面有效感受域的介绍不影响后面内容。
A Dive into Convolutions
2D Convolution

大小为\(K\times K\),stride为1的二维卷积操作如公式1,输出为目标区域像素与卷积核乘积的和,\(\mathcal{K}=[-K/2,K/2]^2\)。
Theoretical Receptive Field
卷积层单个输出相对于上一层的输入的感受域大小为卷积核大小\(K\times K\),当卷积层叠加起来时,单个输出的对应的隔层感受域也会因此而叠加,得到的叠加区域即理论感受域,与卷积核大小\(K\)和网络深度\(n\)线性相关。
Effective Receptive Field
由于卷积的叠加以及非线性激活的引入,理论感受域内的像素对输出的贡献各不相同,可以使用有效感受域(ERF)来度量区域内每个像素对输出的影响,通过计算输出对应像素值的偏导得到,具体可以看参考论文。
Analysis on Effective Receptive Fields
这里主要分析如何根据输入和一系列卷积来计算有效感受域,先分析线性卷积网络的情景,再拓展到非线性卷积网络。

对于线性卷积网络,给定\(I^{(0)}\)为输入图片以及stride为1的\(K\times K\)卷积权重合集\(\{W^{(s)}\}_{s=1}^n\),公式1可以展开为公式2,特征图\(I\)和卷积权重\(W\)的上标以及卷积核位置\(k\)的下标为层数\(s\in [1, n]\)。

根据ERF的定义,输出坐标\(j\)对应输入坐标\(i\)的有效感受域值\(\mathcal{R}^{(n)}(i;j)=\partial I_j^{(n)} / \partial I_i^{(0)}\)计算为公式3,\(\Bbb{1}[\cdot]\)为指示函数。公式3的意义为所有从\(i\)到\(j\)的路径的权重和,权重的计算为卷积核权重的累积,有效感受域值跟输出的采样位置\(j\)、卷积核位置\(k\)以及卷积核权重\(\{W^{(s)}\}\)有关。

假设将第\(m\)个卷积核\(W^{(m)}\)替换为\(1\times 1\)卷积核\(W_{\tilde{k}_m}^{(m)}\),ERF的计算会变为公式4,\(S=[1,n]\)\ \(m\)即不包含\(m\)层,这里每条路径权重直接乘上\(W_{\tilde{k}_m}^{(m)}\),因为\(m\)层只有一个路径,符合指示函数的路径必定包含\(k_m\)。

\(K\times K\)卷积可以看成分散在矩形区域内的\(K^2\)个\(1\times 1\)卷积,因此,公式3可以改写成公式5,将\(m\)层的\(K\times K\)卷积看成多个\(1\times 1\)卷积,相对的输出位置也要进行相应的修改(这里应该为\(j-k_m\)比较合适)。

对于复杂的非线性卷积,在公式1中加入ReLU激活得到公式6,即每层卷积都接激活函数。

非线性版本的有效感受域值计算为上式,因子\(\mathcal{C}\)使得ERF值变成与数据相关,实际中的有效感受域是不规则的形状,包含许多不规则分布的零值。
需要注意,公式4和公式5的计算是线性的,使得有效感受域值计算能与内核的线性采样操作兼容,比如使用双线性插值获得小数位置的内核值,即可以认为内核采样等对数据进行线性ERF采样(ERF与输出的采样位置\(j\)、卷积核位置\(k\)以及卷积核权重\(\{W^{(s)}\}\)有关),这种兼容性也可以相似地推广到非线性的情况下。基于以上的分析,论文提出可变形卷积核(Deformable Kernels, DK)。
Deformable Kernels(DK)


DK添加了可学习的核偏移值,使得输出的计算从公式1变为公式7,ERF的计算也变成了与核偏移值相关的公式8。由于偏移值通常包含小数,使用双线性插值来计算偏移后的值。
原卷积核的大小称为score size,一般DK对scope size是没有约束的,即可以从大小为\(K^{'}\)的原卷积中采样出\(K^2\)的新卷积,然后用于大小为\(K^2\)区域上。这样网络能够尽可能使用更大的原卷积而不会带来太多的额外计算,论文最大的原卷积为\(9\times 9\)。

如图2,DK有两种实现形式,全局模式和局部模式,\(\mathscr{G}\)为可学习的核偏移值生成器,将输入块转换为内核的偏移值:
- 全局模式\(\mathscr{G}_{global}\)的实现为global average pooling层+全连接层,分别用于降维以及输出\(2K^2\)个偏移值。
- 局部模式\(\mathscr{G}_{local}\)的实现为与目标卷积大小一样的卷积操作,输出为\(2K^2\)维,最终输出为\(2K^2\times 1\times 1\)。
全局模式更关注整体图片,根据整图进行核偏移,而局部模式则更关注图片的局部区域,对于小物体,生成形状特别的核(值差异大),从而使得ERF更密集,而对于大物体,生成较扁平的核(值差异小),使得ERF更广阔。一般情况下,局部模式的自由度更高。
Computation Flow of Deformable Kernels

图5展示了局部DK的计算示意图,偏移值生成器根据输入生成偏移值,将目标卷积的点均匀平铺在原卷积中,然后根据偏移值进行偏移,使用双线性插值计算偏移后的权重更新目标卷积,最后使用目标卷积对输入进行卷积输出。

前向时,给予原卷积\(W\)和学习到的卷积核偏移\(\{ \Delta k \}\),结合双线性插值\(\mathcal{B}\)生成目标卷积\(W^{'}\),然后使用目标卷积对输入进行常规的卷积输出。

DK的反向传播需要生成3种梯度:
- 前一层特征图的梯度
- 当前层原生卷积的梯度
- 当前层偏移值生成器的梯度
前两种的计算方法与普通的卷积一样,第三种则使用公式13结合双线性插值的计算方法。
Link with Deformable Convolutions
DK的核心是学习适应输入的偏移值来原卷积进行采样,从而达到可变形的目的,整体思想可能与可变形卷积类似。


可变形卷积的计算如公式9,主要是对数据进行偏移,而有效感受域则为公式10。如前面说到的,有效感受域与输出的采样位置以及卷积核位置有关,这在一定程度上了解释可变形卷积为何适用于学习形状多变的目标。

假设同时对数据和核进行偏移,输出的计算以及有效感受域的计算如公式11,尽管两种方法的目的是类似的,但在实际中发现,两种方法协作能够带来很好更好的效果。
Experiments

实验主要针对深度卷积(depthwise convolutions)进行优化,内核偏移不能超过越过score size。基础模型为ResNet-50-DW和MobileNetV2,对比实验加入条件卷积(Conditional Convolutions)和可变形卷积(Deformable Convolutions)的对比。
Image Classification


Object Detection


What do Deformable Kernels Learn?

将MobileNet-V2的最后一层卷积进行t-SNE降维得到可视化结果,点的颜色为类别(10类)或bbox尺寸(10等分),对比DK和条件卷积,条件卷积学习到语义相关的特征,而DK则学习到尺寸相关的特征,这解释了前面的实验两种方法同时使用效果更好。

对不同的卷积的有效感受域进行了可视化,可变形卷积与DK都能产生类似的适应ERF,但可变形卷积倾向于更广阔的响应,DK则倾向于集中在物体内部,两者结合效果最佳。
CONCLUSION
论文提出可变形卷积核(DK)来自适应有效感受域,每次进行卷积操作时都从原卷积中采样出新卷积,是一种新颖的可变形卷积的形式,从实验来看,是之前方法的一种有力的补充。
如果本文对你有帮助,麻烦点个赞或在看呗~
更多内容请关注 微信公众号【晓飞的算法工程笔记】

可变形卷积系列(三) Deformable Kernels,创意满满的可变形卷积核 | ICLR 2020的更多相关文章
- Deformable Convolutional Networks-v1-v2(可变形卷积网络)
如何评价 MSRA 视觉组最新提出的 Deformable ConvNets V2? <Deformable Convolutional Networks>是一篇2017年Microsof ...
- 深度学习方法(十三):卷积神经网络结构变化——可变形卷积网络deformable convolutional networks
上一篇我们介绍了:深度学习方法(十二):卷积神经网络结构变化--Spatial Transformer Networks,STN创造性地在CNN结构中装入了一个可学习的仿射变换,目的是增加CNN的旋转 ...
- Web 开发人员和设计师必读文章推荐【系列三十】
<Web 前端开发精华文章推荐>2014年第9期(总第30期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...
- 前端构建大法 Gulp 系列 (三):gulp的4个API 让你成为gulp专家
系列目录 前端构建大法 Gulp 系列 (一):为什么需要前端构建 前端构建大法 Gulp 系列 (二):为什么选择gulp 前端构建大法 Gulp 系列 (三):gulp的4个API 让你成为gul ...
- MyBatis学习系列三——结合Spring
目录 MyBatis学习系列一之环境搭建 MyBatis学习系列二——增删改查 MyBatis学习系列三——结合Spring MyBatis在项目中应用一般都要结合Spring,这一章主要把MyBat ...
- MySQL并发复制系列三:MySQL和MariaDB实现对比
http://blog.itpub.net/28218939/viewspace-1975856/ 并发复制(Parallel Replication) 系列三:MySQL 5.7 和MariaDB ...
- WCF编程系列(三)地址与绑定
WCF编程系列(三)地址与绑定 地址 地址指定了接收消息的位置,WCF中地址以统一资源标识符(URI)的形式指定.URI由通讯协议和位置路径两部分组成,如示例一中的: http://loc ...
- 【JAVA编码专题】 JAVA字符编码系列三:Java应用中的编码问题
这两天抽时间又总结/整理了一下各种编码的实际编码方式,和在Java应用中的使用情况,在这里记录下来以便日后参考. 为了构成一个完整的对文字编码的认识和深入把握,以便处理在Java开发过程中遇到的各种问 ...
- SQL Server 2008空间数据应用系列三:SQL Server 2008空间数据类型
原文:SQL Server 2008空间数据应用系列三:SQL Server 2008空间数据类型 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server ...
- VSTO之旅系列(三):自定义Excel UI
原文:VSTO之旅系列(三):自定义Excel UI 本专题概要 引言 自定义任务窗体(Task Pane) 自定义选项卡,即Ribbon 自定义上下文菜单 小结 引言 在上一个专题中为大家介绍如何创 ...
随机推荐
- 51单片机封装库HML_FwLib_STC89/STC11
HML_FwLib_STC89/11 项目地址 https://github.com/MCU-ZHISHAN-IoT/HML_FwLib_STC89 https://github.com/MCU-ZH ...
- STM32 printf 方法重定向到串口UART
在嵌入式系统中调试代码是很麻烦的一件事, 如果能方便地输出调试信息(与调试者交互), 能使极大加快问题排查的过程. 串口在嵌入式领域是一个比较重要的通讯接口. 因为没有显示设备, 在单片机的程序里调用 ...
- 【Unity3D】UGUI回调函数
1 简述 UGUI 回调函数主要指鼠标进入.离开.点下.点击中.抬起.开始拖拽.拖拽中.拖拽结束 UI 控件触发的回调.使用 UGUI 回调函数时,需要引入 UnityEngine.EventSy ...
- 【Android逆向】脱壳项目frida_dump 原理分析
脱dex核心文件dump_dex.js 核心函数 function dump_dex() { var libart = Process.findModuleByName("libart.so ...
- [攻防世界][Reverse]xxxorrr
将目标文件拖入IDA 反汇编main函数 __int64 __fastcall main(int a1, char **a2, char **a3) { int i; // [rsp+Ch] [rbp ...
- Android Studio 导入自己编译的 framework jar
网上的文章大多是 Android Studio 2.x 环境,实行起来,坑比较多. 本文适用于 Android Studio 3.x 及以上,亲测可行. 一.编译生成 framework.jar 包 ...
- dilb安装的三种方法
dilb库安装失败,源码安装嘎嘎报错,所以这里记录一下 dlib库是一个很特殊的库,在下载dlib库之前需要下载两个库(cmake.boost这两个库) pip install cmake boost ...
- 01、uwsgi、gunicorn如何实现优雅重启
1.为何需要优雅重启 在实际开发过程中,我们会不断迭代升级产品,每次迭代后,都需要在线上服务器更新代码.一般小公司的迭代升级,是没有做到像金丝雀发布或者使用到kubernetes这些东西的.那如何保证 ...
- 第一百一十二篇: JS数组Array(一)数组基本用法
好家伙, 1.数组 Array应该就是ECMAScript中最常用的类型了.ECMAScript数组跟其他编程语言的数组有很大区别. 跟其他语言中的数组一样,ECMAScript 数组也是一组有序 ...
- 使用OpenFeign远程调用时请求头处理报错问题
1. 错误信息 basic.result.exception.OtherException: feign error:系统异常:Content type 'multipart/form-data;bo ...