深度学习之 DCN(Deformable Convolution)-可变形卷积

  • Paper link:
    • http://openaccess.thecvf.com/content_ICCV_2017/papers/Dai_Deformable_Convolutional_Networks_ICCV_2017_paper.pdf
    • https://arxiv.org/pdf/1703.06211
  • Code link: https://github.com/msracver/Deformable-ConvNets

Abstract

如何有效地对几何图形的变化进行建模一直是一个挑战,大体上有两种处理方法:(1)构建一个包含各种变化的数据集,其本质是数据扩增(2)使用具有形变不变性的特征和算法(如SIFT)。这两种方法都有很大的局限性:几何形变被假设是固定和已知的,这是一种先验信息,用这些已知的形变去处理未知的形变是不合理的;手工设计的特征或算法无法应对过度复杂的形变,即使该形变是已知的。近年来,CNNs在计算机视觉领域取得了飞速的发展和进步,在图像分类,语义分割,目标检测领域都有很好的应用。然后鉴于CNNs固定的几何结构,导致对几何形变的建模受到限制。本文提出了两个新模块来提升CNNs的形变建模能力,称为“deformable convolution”和“deformable ROI pooling”,这两个方法都是基于在模块中增加额外偏移量的空间采样位置和从目标任务中学习到偏移量且不需要额外的监督。这些新的模块可以很容易的取代现有CNNs的普通模块并且利用反向传播进行端到端的训练,产生可变形的卷积神经网络。该方法在语义分割和目标检测上有很好的表现。

1. Introduction

CNNs对大型,未知形状变换的建模存在固有的缺陷,这种缺陷来源于CNNs模块固有的几何结构:卷积单元对输入特征图的固定位置进行采样;池化层以固定的比例进行池化;即使是ROI pooling也是将ROI分割到固定的bin中去。这些特性是有影响的,例如,在同一层Conv中,所有的激活单元的感受野是一样的,但由于不同位置可能对应着不同尺度或变形的物体,因此对尺度或者感受野大小进行自适应是进行精确定位所需要的。为了解决或者减轻这个问题,本文提出了两种新的模块,可变形卷积(deformable conv)和可变形感兴趣区域池化(deformable ROI Pooling),来提高对形变的建模能力。这两个模块都是基于一个平行网络学习offset(偏移),使得卷积核在input feature map的采样点发生偏移,集中于我们感兴趣的区域或者目标。通过研究发现,标准卷积中的规则格点采样是导致网络难以适应几何形变的“罪魁祸首”,为了削弱这个限制,对卷积核中每个采样点的位置都增加了一个偏移变量,可以实现在当前位置附近随意采样而不局限于之前的规则格点。如下图所示,是常见的采样点和可变形卷积采样的对比

在这里插入图片描述

(a)是常见的3x3卷积核的采样方式,(b)是采样可变形卷积,加上偏移量之后的采样点的变化,(c)(d)是可变形卷积的特殊形式

2. Deformable Convolutional Networks

2.1 Deformable Convolution

**(1)**首先声明一点,在可变形卷积中,可变形卷积操作和池化操作都是2维的,都是在同一channel上进行的,常规的卷积操作主要可以分为两部分:(1)在输入的feature map上使用规则网格R进行采样;(2)进行加权运算,R定义了感受野的大小和扩张

R={(−1,−1),(−1,0),...,(0,1),(1,1)}R=\{(-1,-1),(-1,0),...,(0,1),(1,1)\} R={(1,1),(1,0),...,(0,1),(1,1)}

对于在输出的feature map上的每个位置P0,通过下列式子进行计算:

在这里插入图片描述

其中,Pn是对R中所列位置的枚举
**(2)**可变形卷积的操作是不同的,在可变形网络的操作中,常规的规则网格R通过增加一个偏移量进行扩张,同样的位置P0变为:

在这里插入图片描述

现在,采样的位置变成了不规则位置,由于偏移量△Pn通常是小数,因此我们通过双线性插值法进行实现,公式为:
在这里插入图片描述

(3)拓展:关于双线性插值
首先看,双线性插值的作用,对图像进行缩放。假设原图像大小为m*n,目标图像的大小为a*b,那么两幅图像的边长比为m/a,n/b。注意,通常这个比例不是整数,而非整数的坐标是无法在图像这种离散数据上使用的。双线性插值通过寻找距离这个对应坐标最近的四个像素点,来计算该点的值。比如,对应的坐标为(2.5,4.5),那么最近的像素是(2,4)(2,5)(3,4)(3,5)
若图像为灰度图像,那么(I,j)的灰度值可以通过以下公式计算:

在这里插入图片描述

其中,pi(i=1,2,3,4)为最近的四个像素点,wi(i=1,2,3,4)为各点相应权值
来看一下可变形卷积的网络结构:如下图所示,大体流程为,在输入的feature map中,原始的通过sliding window得到的是绿框,引入可变形卷积后,我们把原来的卷积网路分为两路,共享input feature map,其中上面的一路用一个额外的conv层来学习offset,得到H*W*2N的输出offset,其中,2N的意思是有x,y两个方向的偏移,得到这个之后,我们对原始卷积的每一个窗口,都不再是原来规整的sliding window(input feature map中的绿框)而是经过平移后的window(input feature map中的篮框),取得数据后计算过程和常规卷积一样,即input feature map和offset共同作为deformable conv层的输入。

注意:这里有一个非常非常非常容易混淆的点,所谓的deformable,到底deformable在哪?很多人可能以为deformable conv学习的是可变形的kernel,其实不是不是不是!本文并不是对kernel学习offset而是对feature的每个位置学习一个offset。

在这里插入图片描述

举个例子来看:可变形卷积的流程为:
在这里插入图片描述

2.2 Deformable ROI Pooling

ROI Pooling模块是two-stage中常见的池化方法,基于目标检测方法中所有的region proposal。将任意输入大小的矩形调整为固定尺寸大小的feature。给定input feature map x 和一个大小为w*h,位于左上角的区域P0,ROI Pooling将会把这个ROI划分为k*k个bins,同时输出一个size为k*k的feature map y,可以用如下公式表示:

在这里插入图片描述

其中,nij是bin中像素的数量
有了这个基础,我们再来看可变形池化,公式如下:

在这里插入图片描述

相比普通ROI Pooling,同样增加了一个offset,下图为网络结构:具体操作为,首先,通过普通的ROI Pooling得到一个feature map,如下图中的绿色块,通过得到的这个feature map,加上一个全连接层,生成每一个位置的offset,然后按照上面的公式得到△Pij,为了让offset的数据和ROI 的尺寸匹配,需要对offset进行微调,此处不是重点。全连接层的参数可以通过反向传播进行学习。
在这里插入图片描述

How to use

首先回顾一下SOTA的CNN结构,可以概括为两方面,首先,一个深度全卷积网络用于对整张图片产生feature map。其次,一个浅层的目标明确的网络,从feature map产生我们需要的结果。下图展示了标准的卷积和可变形卷积之间的对比,可以看到,在标准卷积中,图中的区域表示在普通卷积和可变形卷积中的感受野。这张图怎么看呢,首先看顶层的feature map,我们取两个激活点(分别在大羊和小羊身上),代表的是不同尺度和形状。中间层:top层的feature map经过3*3的卷积后,需要抽样的一些点。最底层:再经过一个3*3的卷积,需要采样的点。通过对比可以明显的看出,可变形卷积的采样位置更符合物体本身的形状和尺寸,而标准卷积的形式却不能做到这一点。

在这里插入图片描述

下图是一些实例对比:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/453717.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件开发 项目进展 软件架构 指南

软件开发,标准化流水线式开发的实施构想 软件开发,标准化流水线式开发的实施构想 近日看到一篇博文,讨论标准化流水线开发模式的话题,但是这篇博文仅仅提出这个问题,未见回应。 这其实是一个很大的问题,我…

linux 下php多版本安装

php-multi-version ubuntu apt-get 安装php5.6 添加软件源sudo add-apt-repository ppa:ondrej/php sudo apt-get updatesudo apt-get install php5.6sudo apt-get install php5sudo apt-get install php7 /usr/local/bin 与/usr/bin echo $PATH/usr/local/sbin:/usr/local/bin…

c++ 舞伴配对问题_挑战新物体描述问题,视觉词表解决方案超越人类表现

编者按:最近,研究者们发布了 nocaps 挑战,用以测量在没有对应的训练数据的情况下,模型能否准确描述测试图像中新出现的各种类别的物体。针对挑战中的问题,微软 Azure 认知服务团队和微软研究院的研究员提出了全新解决方…

深度学习之双线性插值(Bilinear interpolation)

1. 什么是插值 Interpolation is a method of constructing new data points within the range of a discrete set of known data points. Image interpolation refers to the“guess”of intensity values at missing locations. 图片放大是图像处理中的一个特别基础的操作。…

div table 超出了_div包裹的table,table的宽度超出了的宽度,出现的滚动条的在windows下无法拖动...

1.父级div是否设置了宽度,只有设置了宽度且滚动条在div内才是你想要控制的滚动2.仅凭你说的这些属性不知道滚动条怎么不能动,可以贴一下代码?3.横向需要滚动条的话必须设置table的确定宽度做了一个demo:.table{table-layout:fixed; width:…

第二阶段站立会议7

昨天:美化页面 今天:进行项目上传 问题:阿里云服务器上的mysql出现连接问题转载于:https://www.cnblogs.com/sdysyhj/p/8301489.html

深度学习之 OHEM (Online Hard Example Mining)

论文 《Training Region-based Object Detectors with Online Hard Example Mining》链接 https://arxiv.org/pdf/1604.03540.pdf Astract 摘要主要讲了四点: (1) 训练过程需要进行参数的空间搜索(2) 简单样本与难分辨样本之间的类别不平衡是亟需解决的问题(3) 自…

音视频 详解

avi文件格式详解 AVI是音频视频交错(Audio Video Interleaved)的英文缩写,它是Microsoft公司开发的一种符合RIFF文件规范的数字音频与视频文件格式,原先用于Microsoft Video for Windows (简称VFW)环境,现在已被Windows 95/98、OS/2等多数操…

c6011取消对null指针的引用_C++| 函数的指针参数如何传递内存?

函数的参数是一个一级指针,可以传递内存吗?如果函数的参数是一个一级指针,不要指望用该指针去申请动态内存。看下面的实例:#include using namespace std;void GetMemory(char *p, int num){p (char *)malloc(sizeof(char) * num…

Servlet执行时要实现的方法

Servlet执行时要实现的方法 public void init(ServletConfig config) public ServletConfig getServletConfig() public String getServletInfo() public void service(ServletRequest request,ServletResponse response) public void destroy() 本文转自sucre03 5…

axios 设置拦截器 全局设置带默认参数(发送 token 等)

应用场景:1,每个请求都带上的参数,比如token,时间戳等。2,对返回的状态进行判断,比如token是否过期代码如下:[javascript] view plain copyaxios.interceptors.request.use( config &g…

深度学习目标检测之 YOLO v2

论文名:《YOLO9000: Better, Faster, Stronger》原文:https://arxiv.org/pdf/1612.08242v1.pdf代码:http://pjreddie.com/darknet/yolo/ YOLO v2 斩获了CVPR 2017 Best Paper Honorable Mention。在这篇文章中,作者首先在YOLOv1的…

tcpmp 编译 源代码分析

TCPMP源代码分析 TCPMP源代码分析 播放器主要由核心框架模块(common工程)和解码器、分离器插件组成。TCPMP的插件非常多,其中主要的插件有:interface插件实现了TCPMP的界面,ffmpeg是系统主要的音视频解码模块&#xff…

使用zerorpc踩的第一个坑:

Server端代码:注意s.run() 和 s.run的区别,一个括号搞死我了.如果不加括号,服务端服务是不会启动的,客户端就会报连接超时的错误 Server端在本机所有IP上监听4242端口的tcp协议 import zerorpcclass HelloRPC(object):   def __…

django存入mysql数据库_django如何存数据到一个mysql数据表里面

让我们聊聊这个话题, django如何存数据至mysql数据表里面,你会用什么方法?正常情况下,我们form逻辑处理后,直接form.save(),是,这个方法没毛病;但有没有其他的方法呢?假如…

【Luogu】P3343地震后的幻想乡(对积分概率进行DP)

题目链接 神难qwq。配合rqy的博客食用。 首先我们学到有一个概率函数$p(x)$表示某事件发生概率取值小于x的函数。这个函数有什么特点呢? 那就是$\int_{-∞}^{∞}p(x)dx1$ 这个是显然的 然后我们令p(x)为首次联通的时间的概率分布函数 这其实等价于生成树的最大权边等…

深度学习目标检测之 YOLO v3

论文名:《YOLOv3: An Incremental Improvement》论文地址 https://pjreddie.com/media/files/papers/YOLOv3.pdfhttps://arxiv.org/abs/1804.02767v1 论文代码 https://github.com/yjh0410/yolov2-yolov3_PyTorchkeras:https://github.com/qqwweee/keras…

30本pdf完整版的经典Linux学习和开发教程和资料下载 android arm java 资料大全

史上最牛的Linux内核学习方法论 点击下载我的arm_linux移植笔记 点击下载S3C2440完全开发流程 点击下载Linux系统命令及其使用详解完整版 点击下载Linux主要shell命令详解 点击下载深入理解Linux内核(第三版 pdf英文版) 点击下载深入分析Linux内核源代码教程pdf完整版 点击下…

Fedex Ship Manager Software安装

本文出自Simmy的个人blog:西米在线 http://simmyonline.com/archives/552.html 这个软件的安装颇费了我一番周章,特地Log之。下载:http://www.fedex.com/apac_english/fsmsoftware/ 安装完后,接着输入用户信息,然后连…

mysql5.7.11解压版安装_Mysql5.7.11在windows10上的安装与配置(解压版)

第一步my-default.ini 添加配置:#绑定IPv4和3306端bind-address 127.0.0.1port 3306# 设置mysql的安装目basedir E:\mysql# 设置mysql数据库的数据的存放目datadirE:\mysql\data# 允许最大连接数max_connections200#设置默认字符集为utf8default-character-setutf…