空洞卷积相关理解

多标签文本分类:基于语义单元的空洞卷积:https://zhuanlan.zhihu.com/p/50231229?utm_source=weibo
原文链接:https://www.jianshu.com/p/f743bd9041b3
扩展阅读:https://blog.csdn.net/c9Yv2cf9I06K2A9E/article/details/79825597?utm_source=blogxgwz8

空洞卷积(dilated convolution)理解

Dilated/Atrous Convolution(中文叫做空洞卷积或者膨胀卷积) 或者是 Convolution with holes 从字面上就很好理解,是在标准的 convolution map 里注入空洞,以此来增加 reception field。相比原来的正常convolution,dilated convolution 多了一个 hyper-parameter 称之为 dilation rate 指的是kernel的间隔数量(e.g. 正常的 convolution 是 dilatation rate 1)。

Standard Convolution with a 3 x 3 kernel (and padding)
Dilated Convolution with a 3 x 3 kernel and dilation rate 2

Deep CNN 对于其他任务还有一些致命性的缺陷。较为著名的是 up-sampling 和 pooling layer 的设计。
主要问题有:

  • Up-sampling / pooling layer (e.g. bilinear interpolation) is deterministic. (参数不可学习)
  • 内部数据结构丢失;空间层级化信息丢失。
  • 小物体信息无法重建 (假设有四个pooling layer 则 任何小于 2^4 = 16 pixel 的物体信息将理论上无法重建。)
    在这样问题的存在下,语义分割问题一直处在瓶颈期无法再明显提高精度, 而 dilated convolution 的设计就良好的避免了这些问题。

在图像分割领域,图像输入到CNN(典型的网络比如FCN[3])中,FCN先像传统的CNN那样对图像做卷积再pooling,降低图像尺寸的同时增大感受野,但是由于图像分割预测是pixel-wise的输出,所以要将pooling后较小的图像尺寸upsampling到原始的图像尺寸进行预测(upsampling一般采用deconv反卷积操作,deconv可参见知乎答案如何理解深度学习中的deconvolution networks?),之前的pooling操作使得每个pixel预测都能看到较大感受野信息。因此图像分割FCN中有两个关键,一个是pooling减小图像尺寸增大感受野,另一个是upsampling扩大图像尺寸。在先减小再增大尺寸的过程中,肯定有一些信息损失掉了,那么能不能设计一种新的操作,不通过pooling也能有较大的感受野看到更多的信息呢?答案就是dilated conv。

下面看一下dilated conv原始论文[4]中的示意图:

dilated conv

(a)图对应3x3的1-dilated conv,和普通的卷积操作一样,(b)图对应3x3的2-dilated conv,实际的卷积kernel size还是3x3,但是空洞为1,也就是对于一个7x7的图像patch,只有9个红色的点和3x3的kernel发生卷积操作,其余的点略过。也可以理解为kernel的size为7x7,但是只有图中的9个点的权重不为0,其余都为0。 可以看到虽然kernel size只有3x3,但是这个卷积的感受野已经增大到了7x7(如果考虑到这个2-dilated conv的前一层是一个1-dilated conv的话,那么每个红点就是1-dilated的卷积输出,所以感受野为3x3,所以1-dilated和2-dilated合起来就能达到7x7的conv),(c)图是4-dilated conv操作,同理跟在两个1-dilated和2-dilated conv的后面,能达到15x15的感受野。对比传统的conv操作,3层3x3的卷积加起来,stride为1的话,只能达到(kernel-1)*layer+1=7的感受野,也就是和层数layer成线性关系,而dilated conv的感受野是指数级的增长。

dilated的好处是不做pooling损失信息的情况下,加大了感受野,让每个卷积输出都包含较大范围的信息。

空洞卷积存在的问题

潜在问题 1:The Gridding Effect

假设我们仅仅多次叠加 dilation rate 2 的 3 x 3 kernel 的话,则会出现这个问题:

image

我们发现我们的 kernel 并不连续,也就是并不是所有的 pixel 都用来计算了,因此这里将信息看做 checker-board 的方式会损失信息的连续性。这对 pixel-level dense prediction 的任务来说是致命的。

潜在问题 2:Long-ranged information might be not relevant.

我们从 dilated convolution 的设计背景来看就能推测出这样的设计是用来获取 long-ranged information。然而光采用大 dilation rate 的信息或许只对一些大物体分割有效果,而对小物体来说可能则有弊无利了。如何同时处理不同大小的物体的关系,则是设计好 dilated convolution 网络的关键。

通向标准化设计:Hybrid Dilated Convolution (HDC)

对于上个 section 里提到的几个问题,图森组的文章对其提出了较好的解决的方法。他们设计了一个称之为 HDC 的设计结构。

  • 第一个特性是,叠加卷积的 dilation rate 不能有大于1的公约数。比如 [2, 4, 6] 则不是一个好的三层卷积,依然会出现 gridding effect。

  • 第二个特性是,我们将 dilation rate 设计成锯齿状结构,例如 [1, 2, 5, 1, 2, 5] 循环结构。

  • 第三个特性是,我们需要满足一下这个式子:

其中 r_i是 i 层的 dilation rate 而 M_i是指在 i 层的最大dilation rate,那么假设总共有n层的话,默认 M_n=r_n 。假设我们应用于 kernel 为 k x k 的话,我们的目标则是M_2 \leq k,这样我们至少可以用 dilation rate 1 即 standard convolution 的方式来覆盖掉所有洞。

一个简单的例子: dilation rate [1, 2, 5] with 3 x 3 kernel (可行的方案)

image

而这样的锯齿状本身的性质就比较好的来同时满足小物体大物体的分割要求(小 dilation rate 来关心近距离信息,大 dilation rate 来关心远距离信息)。

这样我们的卷积依然是连续的也就依然能满足VGG组观察的结论,大卷积是由小卷积的 regularisation 的 叠加。

以下的对比实验可以明显看出,一个良好设计的 dilated convolution 网络能够有效避免 gridding effect.

image

多尺度分割的另类解:Atrous Spatial Pyramid Pooling (ASPP)

在处理多尺度物体分割时,我们通常会有以下几种方式来操作:

image

然仅仅(在一个卷积分支网络下)使用 dilated convolution 去抓取多尺度物体是一个不正统的方法。比方说,我们用一个 HDC 的方法来获取一个大(近)车辆的信息,然而对于一个小(远)车辆的信息都不再受用。假设我们再去用小 dilated convolution 的方法重新获取小车辆的信息,则这么做非常的冗余。

基于港中文和商汤组的 PSPNet 里的 Pooling module (其网络同样获得当年的SOTA结果),ASPP 则在网络 decoder 上对于不同尺度上用不同大小的 dilation rate 来抓去多尺度信息,每个尺度则为一个独立的分支,在网络最后把他合并起来再接一个卷积层输出预测 label。这样的设计则有效避免了在 encoder 上冗余的信息的获取,直接关注与物体之间之内的相关性。

总结

Dilated Convolution 个人认为想法简单,直接且优雅,并取得了相当不错的效果提升。他起源于语义分割,大部分文章也用于语义分割,具体能否对其他应用有价值姑且还不知道,但确实是一个不错的探究方向。有另外的答主提到WaveNet, ByteNet 也用到了 dilated convolution 确实是一个很有趣的发现,因为本身 sequence-to-sequence learning 也是一个需要关注多尺度关系的问题。则在 sequence-to-sequence learning 如何实现,如何设计,跟分割或其他应用的关联是我们可以重新需要考虑的问题。

推荐阅读

图森组和 Google Brain 都对于 dilated convolution 有着更细节的讨论,推荐阅读:

  • Understanding Convolution for Semantic Segmentation
  • Rethinking Atrous Convolution for Semantic Image Segmentation

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

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

相关文章

2019 最全阿里天猫Java 3面真题,含面试题答案!

1 阿里天猫Java一面 自我介绍 jvm GC原理,JVM怎么回收内存 ConcurrentHashMap是怎么解决并发问题的? HashMap怎么从链表转换为红黑树?如果存入的是null键,放在桶的哪个位置? 谈谈Synchronized与ReentrantLock的区别…

NumPy快速入门--形状操作

文章目录1. 更改数组的形状2. 将不同数组堆叠在一起3. 将一个数组分成几个较小的数组1. 更改数组的形状 >>> import numpy as np >>> a np.floor(10*np.random.random((3,4))) >>> a array([[2., 2., 5., 6.],[2., 7., 4., 2.],[9., 3., 5., 8.]]…

深度学习语义分割理论与实战指南.pdf

深度学习语义分割理论与实战指南 V1.0 版本已经完成,主要包括语义分割概述、关键技术组件、数据模块、经典分割网络与架构、PyTorch基本实战方法等五个部分。获取方式:扫描关注下方公众号回复 语义分割 即可。图像分类、目标检测和图像分割是基于深度学习…

Jedis工具类

目录 一、基本使用 1、xml 引入依赖 2、简单测试 二、工具类 1、编写redis属性文件 2、编写工具类 3、使用测试 Jedis是Redis官方推荐的Java连接开发工具。 一、基本使用 1、xml 引入依赖 <dependencies><dependency><groupId>redis.clients</gr…

最新鲜的美团Java面试41题(三面技术+HR面):Redis+Kafka+分布式

Java一面 hashmap与concurrenthashmap的区别 垃圾回收算法以及垃圾回收器 CMS的回收步骤 G1和CMS的区别 CMS哪个阶段是并发的哪个阶段是串行的&#xff1f; G1内部是如何分区的&#xff08;region&#xff09; HashMap如何解决Hash冲突 my sql 索引类别 什么是覆盖索引…

今年阿里双十一提升广告点击率居然用的是这种算法?!

文 | 阿里巴巴定向广告团队源 | 知乎写在前面的碎碎念这篇文章主要是介绍我们在CTR建模领域最新的工作CAN&#xff0c;CAN已经在双十一前全面在阿里定向广告落地&#xff0c;在线效果提升非常显著。一般文章会以事后的视角来写&#xff0c;这样思考会更完整&#xff0c;会屏蔽掉…

Spring之AOP实现

文章目录前言环境搭建前置业务类编写一、注解实现AOP1.编写注解实现的增强类2.在Spring配置文件中&#xff0c;注册bean&#xff0c;并增加支持注解的配置3.测试二、配置文件实现AOP1.编写自定义增强类2.Spring配置文件中&#xff0c;注册bean&#xff0c;配置增强2.测试总结前…

LeetCode 90. 子集 II(回溯+剪枝)

文章目录1. 题目信息2. 解题2.1 循环2.2 回溯1. 题目信息 给定一个可能包含重复元素的整数数组 nums&#xff0c;返回该数组所有可能的子集&#xff08;幂集&#xff09;。 说明&#xff1a;解集不能包含重复的子集。 示例:输入: [1,2,2] 输出: [[2],[1],[1,2,2],[2,2],[1,2…

BAT研发Java面试36题总结:Spring+Redis+Docker+Dubbo

一面&#xff1a; ArrayList和linkedlist区别。ArrayList是否会越界。 ArrayList和hashset有何区别。hashset存的数是有序的么。 volatile和synchronized区别 多态的原理 数据库引擎Innodb和myisam区别 Redis的数据结构 Redis是基于内存的么 Redis的list zset的底层实现…

中文版GPT-2,可用于写小说、诗歌、新闻等

原文链接&#xff1a;https://www.sohu.com/a/336251713_610300 有人做出了中文版GPT-2&#xff0c;可用于写小说、诗歌、新闻等&#xff1b;15亿参数版GPT-2被两名研究生复现 2019-08-25 12:01 来源:量子位 </div>原标题&#xff1a;有人做出了中文版GPT-2&#xff0…

一份来自清华的数据分析笔记,请查收!

之前发过很多数据分析的文章&#xff0c;收到不少好评&#xff0c;但也有一些困惑&#xff1a;入门数据分析该学哪些知识点&#xff1f;该看哪些书&#xff1f;是从 Python入手还是 R 语言&#xff1f;常用的算法有哪些&#xff1f;练手做项目的数据库去哪里找&#xff1f;好用…

LeetCode 9. 回文数

文章目录1. 题目信息2. 解题1. 题目信息 判断一个整数是否是回文数。回文数是指正序&#xff08;从左向右&#xff09;和倒序&#xff08;从右向左&#xff09;读都是一样的整数。 示例 1:输入: 121 输出: true 示例 2:输入: -121 输出: false 解释: 从左向右读, 为 -121 。 …

Redis系列教程(四):Redis为什么是单线程、及高并发快的3大原因详解

Redis的高并发和快速原因 1.redis是基于内存的&#xff0c;内存的读写速度非常快&#xff1b; 2.redis是单线程的&#xff0c;省去了很多上下文切换线程的时间&#xff1b; 3.redis使用多路复用技术&#xff0c;可以处理并发的连接。非阻塞IO 内部实现采用epoll&#xff0c;采…

Bing与DuckDuckGo搜索结果惊人一致?Google展现强势差异

文 | 乐乐QvQ搜索引擎之间有何不同&#xff1f;随着世界上最大的两家公司Google和Microsoft争夺Web Search空间的愈发激烈&#xff0c;一超多强的搜索格局已经形成。在目前眼花缭乱的搜索市场中&#xff0c;是搜索结果的千篇一律&#xff0c;九九归一&#xff1b;还是搜索结果的…

图解gpt-2

原文链接&#xff1a;https://www.sohu.com/a/336262203_129720 完全图解GPT-2&#xff1a;看完这篇就够了&#xff08;一&#xff09; 2019-08-25 12:47 来源:机器之心Pro </div>原标题&#xff1a;完全图解GPT-2&#xff1a;看完这篇就够了&#xff08;一&#xff0…

java程序员学习路线以及我的学习经验

本文作者为优知学院创始人陈睿&#xff08;mike&#xff09;,作者有10年以上技术&产品经验&#xff0c;曾任百度研发经理、携程定制旅游CTO。 “ 这是一篇完整的java程序员学习线路图&#xff0c;一共分为六个阶段。 我以java为例&#xff0c;展示完整的学习步骤。 最后…

这几个模型不讲“模德”,我劝它们耗子尾汁

文 | Sheryc_王苏NLP模型要以和为贵&#xff0c;要讲“模德”&#xff08;Modal&#xff09;&#xff0c;不要搞窝里斗。——《王苏老师被多模态预训练模型偷袭实录》&#xff08;全文在末尾&#xff0c;必读&#xff09;最近是不是被马保国“不讲武德”“耗子尾汁”的视频和语…