可变形卷积系列(一) 打破常规,MSRA提出DCNv1 | ICCV 2017 Oral
论文提出可变形卷积帮助模型高效地学习几何变换能力,能够简单地应用到分类模型和检测模型中,思想新颖,效果显著,十分值得学习
来源:晓飞的算法工程笔记 公众号
论文: Deformable Convolutional Networks

Introduction
常规卷积操作的感受域是固定的,但不同大小的目标应该需要不同大小的感受域,甚至是不规则的感受域。为此,论文提出两个模块来使CNN具备几何变换的建模能力:

- deformable convolution,在常规的卷积中增加2D偏移值,可以将采样区域自由变形,如图1(d)。偏移值是可学习的,通过额外的卷积层获得,取决于输入的特征。
- deformable RoI pooling,为RoI pooling中的每个bin添加一个偏移值做整体的移动,能够自适应不同形状目标的局部定位。同样,偏移值是可学习的,取决于输入特征和RoI区域。
Deformable Convolutional Networks
Deformable Convolution

2D卷积包含两个步骤,首先采样输入特征的规则区域\(\mathcal{R}\),然后求和采样值与权重\(w\)间的乘积,区域\(\mathcal{R}\)由卷积核大小和膨胀(dilation)决定,如上为\(3\times 3\)、膨胀为1的卷积区域。

输出特征图\(y\)中的点\(p_0\)的值计算如公式1,\(p_n\)为\(\mathcal{R}\)中所有采样点。

在可变性卷积中,使用偏移\(\{\Delta p_n | n=1,...,N \}\)将区域\(\mathcal{R}\)的每个点进行位移,公式1转换成了公式2


由于\(\Delta p\)通常为小数,使用公式3的双线性插值计算偏移位置的值,\(G(\cdot, \cdot)\)为双线性插值权重,\(q\)为特征图\(x\)上所有的点,\(g(a, b)=max(0, 1-|a-b|)\)

如图2所示,偏移特征图通过旁路的卷积层获得,\(N\)为主干的卷积核大小,对输入特征进行变形卷积时取偏移特征图上对应点的偏移值向量组合成完整的offsets。训练时,同时学习两条路径,对于偏移值,通过公式3进行梯度的回传。
Deformable RoI Pooling
RoI Pooling
对于输入特征图\(x\)和RoI区域\(w\times h\),左上角坐标为\(p_0\),RoI pooling将区域分为\(k\times k\)个bin,输出大小\(k\times k\)的特征图

对于序号为\((i,j)\)的bin,输出的计算如公式5,\(n_{i,j}\)为bin中的像素总数,范围为\(\lfloor i \frac{w}{k} \rfloor \le p_x < \lceil (i+1) \frac{w}{k} \rceil\)和\(\lfloor j \frac{h}{k} \rfloor \le p_y < \lceil (j+1) \frac{h}{k} \rceil\)

类似于公式2,可变形RoI pooling采用偏移值\(\{ \Delta p_{ij} | 0 \le i,j < k \}\)对bin进行整体移动,输出计算如公式6,由于\(\Delta p_{ij}\)是小数,同样需要公式3和公式4进行双线性插值计算

可变形RoI pooling的逻辑如图3,偏移值通过旁路卷积层获得,旁路的输入为RoI区域池化后的特征,接一个fc层输出归一化的偏移值\(\Delta \hat{p}_{ij}\),与RoI的尺寸无关,然后根据RoI区域大小转换为偏移值\(\Delta p_{ij}=\gamma \cdot \Delta \hat{p}_{ij} \circ (w, h)\),\(\gamma=0.01\)为预设的幅值,偏移值在RoI区域内所有channel共用,取对应的位置。
Position-Sensitive (PS) RoI Pooling

可变形PS RoI pooling遵循RFCN的全卷积理念,先用一个卷积层获得channel为\(2k^2(C+1)\)的偏移特征图,单图大小与主干的score map一样,然后通过PS RoI pooling得到归一化的偏移值\(\Delta \hat{p}_{ij}\),然后根据RoI大小转换为最终的偏移值\(\Delta p_{ij}\)。在实际实现中,一般会在PS RoI Pooling后接一个输出为\(2N\)全连接层,与可变形RoI pooling类似。
Deformable Convolution/RoI Pooling Backpropagation

公式2可变形卷积的偏移值\(\Delta p_n\)的梯度就算如公式7,\(\frac{\partial G(q,p_0+p_n+\Delta p_n)}{\partial \Delta p_n}\)由公式4计算,\(\Delta o_n\)是2D的,\(\partial \Delta p_n\)实际表示\(\partial \Delta p_n^x\)和\(\partial \Delta p_n^y\)

可变形RoI pooling的偏移值计算如公式8,而归一化偏移值\(\Delta \hat{p}_{ij}\)则可以通过计算\(\Delta p_{ij}=\gamma \cdot \Delta \hat{p}_{ij} \circ (w, h)\)的导数获得。
Understanding Deformable ConvNets

如图5所示,可变形卷积将原本固定的感受域根据目标自适应地调整,随着可变形卷积地叠加,高维像素点对应的感受域将会有很大的差异。

图6为图5中高层像素对应的低维像素的对应图,可以看到高层像素的感受域大都跟物体的位置相关。

图7为RoI区域对应的bin的位置,可以看到bin移动到了与物体更相关的位置。
Experiments
Ablation Study



Deformable Convolution
表1测试了在不同的位置加入可变形卷积的效果,不同的网络的效果不一致,整体都是可以提升的。而表2则是统计了不同大小物体的平均偏移值,偏移值跟物体大小相关,而背景的偏移介于中大物体之间,说明背景需要更大的感受域进行识别。表3与空洞卷积进行了对比,更大的膨胀值能有更好的性能,说明原来的感受域太小了,而不同的任务最优的膨胀值不太一样,说明可变形卷积是有存在意义的。
Deformable RoI Pooling
如表3,可变形RoI Pooling搭配可变形卷积能够达到最优的模型。
Model Complexity and Runtime

可变形卷积只增加了少量参数量和计算耗时,说明可变形卷积是通过提升模型的几何变化能力来提高性能,而不是堆参数。
Object Detection on COCO

Conclusion
论文提出可变形卷积帮助模型高效地学习几何变换能力,能够简单地应用到分类模型和检测模型中,思想新颖,效果显著,十分值得学习
如果本文对你有帮助,麻烦点个赞或在看呗~
更多内容请关注 微信公众号【晓飞的算法工程笔记】

可变形卷积系列(一) 打破常规,MSRA提出DCNv1 | ICCV 2017 Oral的更多相关文章
- Deformable Convolutional Networks-v1-v2(可变形卷积网络)
如何评价 MSRA 视觉组最新提出的 Deformable ConvNets V2? <Deformable Convolutional Networks>是一篇2017年Microsof ...
- 深度学习方法(十三):卷积神经网络结构变化——可变形卷积网络deformable convolutional networks
上一篇我们介绍了:深度学习方法(十二):卷积神经网络结构变化--Spatial Transformer Networks,STN创造性地在CNN结构中装入了一个可学习的仿射变换,目的是增加CNN的旋转 ...
- 卷积网络可解释性复现 | Grad-CAM | ICCV | 2017
觉得本文不错的可以点个赞.有问题联系作者微信cyx645016617,之后主要转战公众号,不在博客园和CSDN更新. 论文名称:"Grad-CAM: Visual Explanations ...
- 卷积涨点论文 | Asymmetric Convolution ACNet | ICCV | 2019
文章原创来自作者的微信公众号:[机器学习炼丹术].交流群氛围超好,我希望可以建议一个:当一个人遇到问题的时候,有这样一个平台可以快速讨论并解答,目前已经1群已经满员啦,2群欢迎你的到来哦.加入群唯一的 ...
- 论文阅读:Deformable ConvNets v2
论文地址:http://arxiv.org/abs/1811.11168 作者:pprp 时间:2019年5月11日 0. 摘要 DCNv1引入了可变形卷积,能更好的适应目标的几何变换.但是v1可视化 ...
- 卷积神经网络学习笔记——轻量化网络MobileNet系列(V1,V2,V3)
完整代码及其数据,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/DeepLearningNote 这里结合网络的资料和Mo ...
- CNN中各类卷积总结:残差、shuffle、空洞卷积、变形卷积核、可分离卷积等
CNN从2012年的AlexNet发展至今,科学家们发明出各种各样的CNN模型,一个比一个深,一个比一个准确,一个比一个轻量.我下面会对近几年一些具有变革性的工作进行简单盘点,从这些充满革新性的工作中 ...
- 『计算机视觉』物体检测之RefineDet系列
Two Stage 的精度优势 二阶段的分类:二步法的第一步在分类时,正负样本是极不平衡的,导致分类器训练比较困难,这也是一步法效果不如二步法的原因之一,也是focal loss的motivation ...
- SEPC:使用3D卷积从FPN中提取尺度不变特征,涨点神器 | CVPR 2020
论文提出PConv为对特征金字塔进行3D卷积,配合特定的iBN进行正则化,能够有效地融合尺度间的内在关系,另外,论文提出SEPC,使用可变形卷积来适应实际特征间对应的不规律性,保持尺度均衡.PConv ...
- ESPNet/ESPNetV2:空洞卷积金字塔 | 轻量级网络
ESPNet系列的核心在于空洞卷积金字塔,每层具有不同的dilation rate,在参数量不增加的情况下,能够融合多尺度特征,相对于深度可分离卷积,深度可分离空洞卷积金字塔性价比更高.另外,HFF的 ...
随机推荐
- linux如何发送电子邮件
使用linux时,有时我们想发邮件给朋友或同事,可不可以通过命令行直接发呢? 想通过linux监控网站或者系统状况并自动报警,如何使用脚本发出邮件给外部邮箱呢? 不 ...
- kubernetes(k8s)大白学习01-kubernetes是什么?有什么用?
kubernetes(k8s)大白基础学习-kubernetes是什么? 一.认识 Docker Docker 是什么 先来看看 Docker 的图标: 一条鲸鱼背上驮着四方形块的物品,就像一条海运船 ...
- leetcode - 相同的树
给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同. 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的. 示例 1: 输入:p = [1,2,3], q = [1 ...
- r0tracer 源码分析
使用方法 修改r0tracer.js文件最底部处的代码,开启某一个Hook模式. function main() { Java.perform(function () { console.Purple ...
- 项目实战:Qt监测操作系统cpu温度v1.1.0(支持windows、linux、国产麒麟系统)
需求 使用Qt软件开发一个检测cpu温度的功能. 兼容windows.linux,国产麒麟系统(同为linux) Demo windows上运行(需要管理员权限): 国产麒麟操作上运 ...
- Linux驱动开发笔记(一):helloworld驱动源码编写、makefile编写以及驱动编译基本流程
前言 基于linux的驱动开发学习笔记,本篇是描述了一个字符驱动的基础开发流程,以便做嵌入式开发多年的应用或者系统学习驱动开发. 笔者自身情况 笔者拥有硬件基础,单片机软硬基础,linux ...
- 用Visual Studio把代码放到GitLab
1.点"Git更改" 2.点"创建Git仓库--": 3.点"现有远程",再输入"远程URL": 4.在出现的警告框里选 ...
- 为SQL Server配置连接加密
前言 很多客户在对数据库做安全审计时要求配置连接加密,本文就如何配置加密以及使用证书做一个系统的整理. 连接加密 首先,连接加密不是透明数据加密,很多人经常把两个概念混淆.连接加密是指客户端程序和SQ ...
- C++ 函数指针,指针函数,左值右值
C++ 函数指针,指针函数,左值右值 1.函数指针 是一个指针类型的变量,存放的内容都是函数的指针,用来间接调用函数,格式如下: int add( int a, int b) { return a+b ...
- Java 辨析之实例化和初始化
在面向对象编程中,实例化和初始化是两个相关但不同的概念: 实例化(Instantiation): 实例化是指创建一个类的新的具体对象的过程.当程序运行时,通过 new 关键字调用类的构造函数来创建该类 ...