dilation conv 和 deconv

article/2025/11/6 11:16:45

最近工作要用到dilation conv,在此总结一下空洞卷积,并和deconv进行对比。

dilation conv

首先空洞卷积的目的是为了在扩大感受野的同时,不降低图片分辨率和不引入额外参数及计算量(一般在CNN中扩大感受野都需要使用s>1的conv或者pooling,导致分辨率降低,不利于segmentation。如果使用大卷积核,确实可以达到增大感受野,但是会引入额外的参数及计算量)。

知乎上关于空洞卷积的前两个回答比较不错,可以参考借鉴。 如何理解空洞卷积(dilated convolution)?

空洞卷积的feature map size计算:对于K*K的卷积核,rate =r,则扩充后的卷积核size = K+(K-1)*(r-1)。rate可以理解为K*K的卷积核上的一像素点旁边第rate个点是原K*K的卷积核邻近的点,也相当于K*K的卷积核中两个相邻的点中间插入了r-1个点。特别地,对于3*3的卷积核,如果pad = rate,则特征图尺寸大小不改变。

不同rate的空洞卷积组合,具体的感受野如何获得呢?例如rate =1的3*3卷积(就是普通卷积),后接rate=2的3*3卷积,感受野是7*7.一种理解方法是rate=2的3*3卷积其实相当于5*5卷积,3*3和5*5叠加自然是7*7卷积,总结一个一般性的结论, 对于s=1, a*a的常规卷积和b*b的常规卷积组合相当于(a+b-1)的卷积核(可以从平移的角度思考,参考下图)。从下图中也可以看出,最下面的表示原图,1*1卷积依次在原图上以s=1进行卷积(s一般为1,如果不为1,就会改变特征图尺寸,空洞卷积也就失去作用)得到不同颜色的块,如右边的一行块所示。在这上面进行rate=2的3*3卷积,可以看到每次卷积会用到红色,黄色,绿色三个块,对应到原图紫色区域,刚好是7*7.


空洞卷积一般应用在segmentation,对于detection也有很大的用处,使用的时候,如果一直使用同一个rate的空洞卷积或者rate存在公约数就会出现 The Gridding Effect问题,简单来说就是一直使用了底层特征图的部分像素点,而忽略了很大一部分像素点

如下图所示,最上面表示bottom层使用rate=2的空洞卷积,从下面三种情况可以看出,使用2+3或者2+5就不会出现白色的像素点没用上的情况。


这个问题在图森的文章里面提到过,Understanding Convolution for Semantic Segmentation

HDC把rate设成锯齿状。DUC用于上采样。这从侧面说明了ASPP的改进地方,ASPP用了平行的几个空洞卷积(rate=6,12,18,24等)。

deconv

转置卷积多数用于上采样。转置怎么理解呢?对于一个[3,3]的input,可以视为[1,9],欲得到[2,2]的输出,视为[1,4]。则需要一个[4,9]的权重矩阵,反之,如果从[1,4]得到[1,9],那么需要[9,4]的权重矩阵,也就是之前的转置。个人觉得这只是一个shape的转置,并不是说它的value就是原权重矩阵转置的对应value。 这篇博文关于相关概念的解释比较清楚:deconv

关于实现,参考github,图片不搬过来了,可以对照着打开看。直接看Transposed conv部分。

蓝色部分是输入,绿色部分是输出。

上面一行,s=1。第一个图其实就是标准卷积的逆过程,为什么说没有pading呢,我觉得是为了和标准卷积对应,因为4*4生成2*2不需要pad。后面的half padding其实就是希望输出和输入一样的特征图(关于conv的三种形式:full其实是放大,same是同等输出, valid是downsamping,参考链接),在普通卷积,这样的过程是需要进行pad的,所以此处也写了padding。其实把half padding就是普通卷积的same padding。Arbitrary padding是随机补充,还没太弄懂,有清楚的朋友还望赐教。full padding是希望输出比输入要小,相当于vaild conv,对应于普通卷积的full conv逆过程,所以有了full padding。

下面一行,有了stride. 对应于标准卷积的s<1.在map中间插入0像素点(不同于dilation conv是skip掉一些像素点),接下来就转化成了s=1的卷积。至于为什么第一张图实际上还是有padding,我是这么理解的:因为填充了0像素点后还不能达到输出,所以就和no stride一样的做法,2*2插完值后变成3*3.但是要想输出为5*5,在s=1的情况下,必须要进行p=2。对应于正向的5*5输出3*3不需要padding,所以此处对应也不用padding.最后一张图,加了个odd,其实这是一个填充,目的为了让所有的map上的点都能用到(图中对应蓝色最右边一列)。参考链接

总结起来,deconv中的padding是和conv的padding对应,并不是说deconv的padding=0,就真的没有填充;s<1时,先把map中的每个点插入部分0像素(和s有关),然后变成s=1的deconv. odd不是新概念,主要是为了充分利用map上的像素值。


总起来说,dilation conv是对卷积核进行upsample,deconv是对feature map进行upsample;或者说,dilation conv是skip掉map中的一些元素,而deconv是对map中的元素进行补0操作。






http://chatgpt.dhexx.cn/article/GAilBTKN.shtml

相关文章

Halcon 形态学(膨胀(Dilation)、腐蚀(Erosion))

文章目录 1 形态学概念2 膨胀(Dilation) 算子介绍3 腐蚀(Erosion)算子介绍4 膨胀腐蚀 示例15 腐蚀膨胀 示例26 示例原图7 补充:结构元素概念1 形态学概念 图像的形态学处理是对图像的局部像素进行处理,用于从图像中提取有意义的局部图像细节。 通过改变局部区域的像素形态…

Torch 池化操作大全 MaxPool2d MaxUnpool2d AvgPool2d FractionalMaxPool2d LPPool2d AdaptivePool2d dilation详解

torch 池化操作 1 池化操作2 类型2.1 MaxPool2d()2.2 MaxUnPool2d()2.3 AvgPool2d()2.4 FractionalMaxPool2d()2.5LPPool2d()2.6AdaptiveMaxPool2d()2.7 AdaptiveAvgPool2d() 3 总结 自我学习记录&#xff0c;他人转载请注明出处 1 池化操作 作用&#xff1a; 提取图片重点特征…

nn.Conv2d中的dilation

参考链接&#xff1a;https://blog.csdn.net/jokerxsy/article/details/108614661 nn.Conv2d中的dilation dilation 1&#xff1a; dilation2:

nn.Conv1d\nn.Conv2d以及groups\dilation参数的理解

文章目录 nn.Conv1dnn.Conv2dnn.Conv2d中groups参数和dilation参数的理解groupsdilation 参考 nn.Conv1d 代码: nn.Conv1d(in_channels 16, out_channels 16, kernel_size (3,2,2), stride (2,2,1), padding [2,2,2])如果输入为: x torch.randn(10,16,30,32,34)则: 1…

剪胀角 angle of dilation

Abaqus选择库伦摩尔塑性模型的时候&#xff0c;需要选择摩擦角和剪胀角。摩擦角物理意义明确&#xff0c;但何为剪胀角&#xff1f;如何影响结果呢&#xff1f;&#xff08;这两个问题&#xff0c;暂无统一解&#xff0c;Abaqus默认剪胀角最小是0.1&#xff09; The angle of d…

3.TransposedConv2d实现 (含dilation)

[C 基于Eigen库实现CRN前向推理] 第三部分&#xff1a;TransposedConv2d实现 &#xff08;含dilation&#xff09; 前言&#xff1a;(Eigen库使用记录)第一部分&#xff1a;WavFile.class (实现读取wav/pcm,实现STFT)第二部分&#xff1a;Conv2d实现第三部分&#xff1a;Tran…

对卷积层dilation膨胀的作用的理解,caffe-ssd dilation Hole算法解析

先转一篇大佬的博客论文阅读笔记&#xff1a;图像分割方法deeplab以及Hole算法解析 下面是caffe-ssd的vgg16输出后的变化&#xff0c;减少了一个pooling&#xff0c;stride1&#xff0c;然后下一层采用了 dilation方法&#xff0c;作用按上面博客说是 既想利用已经训练好的模…

理解Dilation convolution

论文&#xff1a;Multi-scale context aggregation with dilated convolutions 简单讨论下dilated conv&#xff0c;中文可以叫做空洞卷积或者扩张卷积。首先介绍一下dilated conv诞生背景[4]&#xff0c;再解释dilated conv操作本身&#xff0c;以及应用。 首先是诞生背景&a…

卷积膨胀 Dilation

参考&#xff1a;卷积的dilation操作 如果我们设置的dilation0的话&#xff0c;效果如图: 蓝色为输入&#xff0c;绿色为输出&#xff0c;可见卷积核为3*3的卷积核 如果我们设置的是dilation1&#xff0c;那么效果如图: 蓝色为输入&#xff0c;绿色为输出&#xff0c;卷积核仍…

卷积核膨胀(dilation)解析

本文转自http://blog.csdn.net/tangwei2014和https://blog.csdn.net/jiongnima/article/details/69487519&#xff0c;转载目的便于自己查看学习 第一位大神解析&#xff1a; deeplab发表在ICLR 2015上。论文下载地址&#xff1a;Semantic Image Segmentation with Deep Conv…

【DL】卷积膨胀 Dilation

Backto DeepLearning Index dilation dilation 是对 kernel 进行膨胀,多出来的空隙用 0 padding。用于克服 stride 中造成的 失真问题。 对应关系是 k d = ( k − 1 ) d + 1 k_{d} = (k -1)\times d + 1 kd​

Pytorch中dilation(Conv2d)参数详解

目录 一、Conv2d 二、Conv2d中的dilation参数 一、Conv2d 首先我们看一下Pytorch中的Conv2d的对应函数&#xff08;Tensor通道排列顺序是&#xff1a;[batch, channel, height, width]&#xff09;&#xff1a; torch.nn.Conv2d(in_channels, out_channels, kernel_size, str…

Linux的入门

文章目录 1 Linux应用场景2 Linux的应用领域2.1 个人桌面的应用2.2 服务器领域2.3 嵌入式领域 3 Linux 介绍4 Linux 和 Unix 的关系4.1 Linux 的由来&#xff1a;4.2 Linux 与 Unix 的关系 5 安装 vm 和CentOS5.1 基本说明5.2 网络连接的理解 6 虚拟机克隆7 虚拟机快照8 虚拟机…

Linux 快速入门到实战【一】

一、操作系统概述 1. 计算机原理 ​ 现代计算机大部分都是基于冯.诺依曼结构&#xff0c;该结构的核心思想是将程序和数据都存放在计算机中&#xff0c;按存储器的存储程序首地址执行程序的第一条指令&#xff0c;然后进行数据的处理计算。 ​ 计算机应包括运算器、控制器、…

linux快速入门 --- 常用指令 学习

目录 为什么要学Linux&#xff1f; Linux的安装 安装 使用finalshell连接虚拟机 了解一下Linux的目录结构&#xff08;不需要记忆&#xff09; Linux中常用的命令&#xff08;重点&#xff09; Linux命令初体验--几个常用命令 Linux命令格式 显示指定目录下的内容 ls和…

Linux命令快速入门

Linux命令初体验----01几个常用命令 序号命令对应英文作用1lslist查看当前目录下的内容2pwdprint work directory查看当前所在目录3cd[目录名]change directory切换目录4touch[文件名]touch如果文件不存在&#xff0c;新建文件5mkdir[目录名]make directory创建目录6rm[文件名…

如何快速入门并轻松简单的学习Linux?

首先&#xff0c;写这篇文章的初衷是写给那些想学习linux&#xff0c;并真正想用它做些有意义事情的人。希望能帮助初学者找到正确的学习linux思维或者方向。 1、做好思想准备 如果你想系统的学习linux&#xff0c;你必须做好思想准备。如果你真正想系统的学习linux&#xff0c…

linux基础-快速入门

主要内容介绍 1、LINUX操作系统安装及初始化配置&#xff08;熟悉&#xff09;&#xff1b; 2、LINUX操作系统目录组成结构及文件级增删改查操作&#xff08;重点&#xff09;&#xff1b; 3、LINUX操作系统用户、权限管理&#xff08;重点&#xff09;&#xff1b; 4、开源软…

Linux快速入门打开你的学习之道

附Java/C/C/机器学习/算法与数据结构/前端/安卓/Python/程序员必读书籍书单大全&#xff1a; 书单导航页&#xff08;点击右侧 极客侠栈 即可打开个人博客&#xff09;&#xff1a;极客侠栈 ①【Java】学习之路吐血整理技术书从入门到进阶最全50本&#xff08;珍藏版) ②【算法…

快速入门:LINUX基础 ——教你使用 linux 操作

文章目录 一、LINUX介绍二、环境搭建三、如何在LINUX下做开发1.LINUX 中—vi的使用 四、LINUX常用初级指令介绍和使用五、Linux虚拟机和windows间的文件传输方式LINUX和WINDOWS文件共享 六、VMware虚拟接网络连接的三种方式LINUX虚拟机网络配置&#xff1a; 七、Linux线程概念引…