深度学习之 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,一经查实,立即删除!

相关文章

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

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

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. 图片放大是图像处理中的一个特别基础的操作。…

深度学习之 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…

深度学习目标检测之 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的…

深度学习目标检测之 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/ 安装完后,接着输入用户信息,然后连…

【转】博客美化(3)为博客添加一个漂亮的分享按钮

阅读目录 1.社会化分享2.选择一个分享按钮3.添加到博客园博客博客园美化相关文章目录:博客园博客美化相关文章目录 在前2篇博客“博客美化(1)基本后台设置与样式设置”与"博客美化(2)自定义博客样式细节"中详细介绍了博客样式设置的相关问题,当…

深度学习目标检测之 YOLO v4

论文原文:https://arxiv.org/abs/2004.10934代码 原版c: https://github.com/AlexeyAB/darknetkeras:https://github.com/Ma-Dan/keras-yolo4pytorch:https://github.com/Tianxiaomo/pytorch-YOLOv4 前言 2020年YOLO系列的作者…

[Android] 年年有鱼手机主题

自制的年年有鱼手机主题,希望大家喜欢!~ 下载地址:https://yunpan.cn/cqauQbiM97idd (提取码:d272) 本文转自haiyang45751CTO博客,原文链接: http://blog.51cto.com/haiyang457/1…

mysql 小数做索引_10 分钟掌握 MySQL 的索引查询优化技巧

本文的内容是总结一些MySQL的常见使用技巧,以供没有DBA的团队参考。如无特殊说明,存储引擎以InnoDB为准。MySQL的特点了解MySQL的特点有助于更好的使用MySQL,MySQL和其它常见数据库最大的不同在于存在存储引擎这个概念,存储引擎负…

模块与包

一 模块介绍 1、什么是模块? #常见的场景:一个模块就是一个包含了一组功能的python文件,比如spam.py,模块名为spam,可以通过import spam使用。#在python中,模块的使用方式都是一样的,但其实细说的话&#x…

解决eclipse + pydev 编译过程中有中文的问题

最近在学习python编程,开发环境设置好了,是用eclipse pydev 来做开发的环境,配置好了之后,需要解决的一个关键问题就是老问题了:如何解决代码中的中文问题。。。 其实但我们在配置编程环境的时候,就需要设…

程序员的思考--终于确定了自己的技术发展方向

经过了将近5年的工作沉淀以后,终于确定了自己的职业发展方向。从现在开始终于可以有的放矢了,不再迷茫了。回想以往,找到这个方向,确实不是一件容易的事情,一路也是迷茫的走过来,随着知识和工作经验的积累&…

【原】iOS:手把手教你发布代码到CocoaPods(Trunk方式)

概述 关于CocoaPods的介绍不在本文的主题范围内,如果你是iOS开发者却不知道CocoaPods,那可能要面壁30秒了。直奔主题,这篇文章主要介绍如果把你的代码发布到CocoaPods代码库中,让别人可以使用“pod search yourOpenProject”命令查…

kafka tool 查看指定group下topic的堆积数量_ELK架构下利用Kafka Group实现Logstash的高可用...

系统运维的过程中,每一个细节都值得我们关注下图为我们的基本日志处理架构所有日志由Rsyslog或者Filebeat收集,然后传输给Kafka,Logstash作为Consumer消费Kafka里边的数据,分别写入Elasticsearch和Hadoop,最后使用Kiba…

jquery flot pie画饼图

具体效果如下&#xff1a; 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv"Content-Type" content"text/html; charsetUTF-8"> 5 <title>Insert title here</title> 6 <script language"javas…