标准卷积可以看做空洞卷积rate=1(Note:rate=2表示中间空洞间隙为1)的特殊形式 中间的空洞间隙,计算感受野的时候,也属于感受野的有效范围。 空洞卷积可以在不需要引入额外参数的前提下,任意扩大感受野。 一方面感受野大了可以检测分割大目标,另一方面分辨率高了可以精确定位目标。因此空洞卷积主要应用于检测、分割。 因为空洞卷积得到的某一层的结果中,邻近的像素是从相互独立的子集中卷积得到的,相互之间缺少依赖。 远距离获取的信息没有相关性:由于空洞卷积稀疏的采样输入信号,使得远距离卷积得到的信息之间没有相关性,影响分类结果。 deeplabv3在v2基础上进一步探索空洞卷积,分别研究了级联ASPP与并联ASPP两种结构。 总结-空洞卷积(Dilated/Atrous Convolution)
我们知道正常的卷积已经能够提取特征了,那么空洞卷积又是做什么的呢? 下图是正常卷积核空洞卷积的动态图对比: 下图为卷积核为3x3,步长为1的普通卷积: ? 下图为卷积核为3x3,步长为1,扩张率为1的空洞卷积: ? 对比上两动图,先感受下区别。 空洞卷积有什么用呢? 2,3,4,5,6五颗像素(想象二维情况下应该是5x5)。 ,如右侧蓝色的那个特征覆盖2,3,4,5,6五颗像素(想象二维情况下应该是5x5)。 而左侧为为3x3空洞卷积,padding为same,stride=1, dilated rate=2的情况下,我们可以看到卷积后的特征的感受野为7x7,如红色特征的感受野为1,2,3,4,5,6,7。
导读 空洞卷积在图像分割需要增加感受野同时保持特征图的尺寸的需求中诞生,本文详细介绍了空洞卷积的诞生、原理、计算过程以及存在的两个潜在的问题,帮助大家将空洞卷积这一算法“消化吸收”。 一、空洞卷积的提出 空洞卷积中文名也叫膨胀卷积或者扩张卷积,英文名也叫Atrous Convolution 空洞卷积最初的提出是为了解决图像分割的问题而提出的,常见的图像分割算法通常使用池化层和卷积层来增加感受野 这种典型的拓扑网络,如下图所示,其实我个人认为,如果一个问题如果从不同的思路去想的话,就会出现不同的解决方案 图1 FCN、U-Net典型的分割拓扑结构:下采样、上采样、skip connection(图来自[6] 3 b是dilation rate = 2的空洞卷积,卷积后的感受野为5 c是dilation rate = 3的空洞卷积,卷积后的感受野为8 可以这么说,普通卷积是空洞卷积的一种特殊情况 另外,空洞卷积可以增大感受野 (https://www.zhihu.com/question/54149221) 6、U-Net++作者对U-Net的分析(https://zhuanlan.zhihu.com/p/44958351)
导读 空洞卷积在图像分割需要增加感受野同时保持特征图的尺寸的需求中诞生,本文详细介绍了空洞卷积的诞生、原理、计算过程以及存在的两个潜在的问题,帮助大家将空洞卷积这一算法“消化吸收”。 一、空洞卷积的提出 空洞卷积中文名也叫膨胀卷积或者扩张卷积,英文名也叫Atrous Convolution 空洞卷积最初的提出是为了解决图像分割的问题而提出的,常见的图像分割算法通常使用池化层和卷积层来增加感受野 图1 FCN、U-Net典型的分割拓扑结构:下采样、上采样、skip connection(图来自[6]) 空洞卷积自2016在ICLR(International Conference on Learning = 2的空洞卷积,卷积后的感受野为5 c是dilation rate = 3的空洞卷积,卷积后的感受野为8 可以这么说,普通卷积是空洞卷积的一种特殊情况 另外,空洞卷积可以增大感受野,但是可以不改变图像输出特征图的尺寸 (https://www.zhihu.com/question/54149221) 6、U-Net++作者对U-Net的分析(https://zhuanlan.zhihu.com/p/44958351)
空洞卷积的计算过程 该文章只单纯的讲解计算的细节,关于对应的原理和证明可以戳尾部的参考文献。 卷积计算过程 上述计算对应的公式如下: ? 其中 I 表示输入,W 表示卷积对应的权重。 每个卷积核对应的权重 W 在计算卷积过程中,值是固定的,我们称为权重共享。 空洞卷积的计算过程 空洞卷积(Dilated convolutions)在卷积的时候,会在卷积核元素之间塞入空格,如下图所示: 空洞卷积过程,蓝色表示输入,绿色表示输出 这里引入了一个新的超参数 d,( 进而,假定输入空洞卷积的大小为 i,步长 为 s ,空洞卷积后特征图大小 o 的计算公式为: ? (https://www.zhihu.com/question/43609045) 3、如何理解空洞卷积(https://www.zhihu.com/question/54149221/answer/192025860
目录 一、从普通卷积到空洞卷积的直观理解 二、关于卷积的重新思考——普通卷积的缺陷 三、空洞卷积的拯救之路:Dilated Convolution to the Rescue 3.1 潜在问题 总结:多次叠加多个具有相同空洞率的卷积核会造成格网中有一些像素自始至终都没有参与运算,不起任何作用,这对于像素级别的预测是不友好的。 3.3 通向标准化设计:Hybrid Dilated Convolution (HDC) 说得更简单明白一点其实就是使用多个不同空洞率的空洞卷积核混合,当然至于没一个卷积核的空洞率rate怎么选择,是有一些技巧和原则的 第一个特性是,叠加卷积的 dilation rate 不能有大于1的公约数。比如 [2, 4, 6] 则不是一个好的三层卷积,依然会出现 gridding effect。 6.进群学习交流 7.资源分享 有趣的灵魂终究会相遇 好看的皮囊风干在路上
因此Atrous conv.也被称为“空洞卷积”。一些论文也称之为"dilated convolution"。它通常用于小波变换,现在它被应用于卷积中以进行深度学习。 当r > 1时,它是一个带孔的卷积,r是在卷积过程中对输入样本进行采样的步幅。 下图说明这一点 ? 标准卷积(顶部)空洞卷积(底部) atrous卷积的想法很简单。在上图的顶部是标准卷积。 在图的底部,它是一个空洞卷积。我们可以看到,当rate = 2时,输入信号被交替采样。首先,pad = 2 意味着我们在左侧和右侧填充2个零。 在DeepLab中,使用VGG-16或ResNet-101,最后一个池化(pool5)或卷积conv5_1的步幅分别设置为1,以避免信号被过度抽取。并且使用rate=2的空洞卷积替换所有后续卷积层。 DeepLab模型 ASPP: 使用并行的空洞卷积的DeepLab模型 CRF: 全连接的条件随机场做最后处理 4.2 与最先进的方法对比 ?
一、空洞卷积的提出 空洞卷积(atrous convolutions)又名扩张卷积(dilated convolutions),向卷积层引入了一个称为 “扩张率(dilation rate) 二、空洞卷积原理 如下如,卷积核没有红点标记位置为0,红点标记位置同正常卷积核。 ? 假设原始特征为feat0,首先使用扩张率为1的空洞卷积生成feat1,feat1上一点相对feat0感受野为3*3(如图a); 然后使用扩张率为2的空洞卷积处理feat1生成feat2(如图b),使第一次空洞卷积的卷积核大小等于第二次空洞卷积的一个像素点的感受野 三、空洞卷积问题 感受野跳跃 我们对同一张图连续三次使用扩张率为1的空洞卷积,观察整张图的中心点的感受野(如下图) ? 四、网络设计研究 第一个特性是,叠加卷积的 dilation rate 不能有大于1的公约数。比如 [2, 4, 6] 则不是一个好的三层卷积,依然会出现 gridding effect。
ESPNet系列的核心在于空洞卷积金字塔,每层具有不同的dilation rate,在参数量不增加的情况下,能够融合多尺度特征,相对于深度可分离卷积,深度可分离空洞卷积金字塔性价比更高。 卷积将输入映射到低维特征空间,空洞卷积金字塔使用$K$组$n\times n$空洞卷积同时重采样低维特征,每个空洞卷积的dilation rate为$2^{k-1}$,$k={1, \cdots, K} ,深度分离卷积以及深度可分离空洞卷积的参数量和有效感受域如表1所示。 原始的ESP模块结构如图1a所示,论文首先将point-wise卷积替换为分组point-wise卷积,然后将计算量较大的空洞卷积替换为深度可分离空洞卷积,最后依然使用HFF来消除网格纹路,结构如图1b CONCLUSION *** ESPNet系列的核心在于空洞卷积金字塔,每层具有不同的dilation rate,在参数量不增加的情况下,能够融合多尺度特征,相对于深度可分离卷积,深度可分离空洞卷积金字塔性价比更高
毕竟在介绍DeepLab2的时候需要用到空洞卷积。 (1)空洞卷积 空洞卷积的原理如图所示,仔细看了下原理,才知道在传统的CNN中,正常都会采用pooling池化来达到降维的目的,这种在图像语义分割中会产生一定的副作用,如经典的FCN在第3-5的featuremap 因此空洞卷积的目的是:不要池化层,毕竟池化之后正常会减少像素的信息而导致信息损失。 可以看出,DeepLab2使用了带孔/空洞卷积,金字塔型的空洞池化(ASPP)和全连接 CRF等多项技术的结合。 其中空洞卷积见第1部分,而SPP是一种空间金字塔分辨率的方式,从而来实现多个尺度的featuremap,从而可以实现对多种不同尺度图像对象的语义分割。
在空洞卷积提出以前,大部分的空间尺寸恢复工作都是由上采样或反卷积实现的。 2 空洞卷积 一句话概括空洞卷积:调整感受野(多尺度信息)的同时控制分辨率的神器。 (1) 控制感受野 下图是空洞卷积结构的示意图,从左到右比率(rate)分别为1、6和24,比率可以粗暴理解为卷积核内相邻两个权重之间的距离。 从图中可以看出,当比率为1的时候,空洞卷积退化为常见的卷积。 ? (2) 空洞卷积结构1 下图(b)是基于上面第三种结构的空洞卷积分割网络结构图,(a)是对应的第三种结构的网络结构图。 ?
一、空洞卷积的基础原理空洞卷积(Dilated Convolution) 是一种改进的卷积操作,通过在卷积核中引入“空洞”来扩大感受野。 空洞卷积的巧妙之处空洞卷积的核心思想是:在不增加计算负担的情况下,让卷积核“看到”更远的区域。 其方法是在卷积核中引入“空洞”,即在核的元素之间留出间隔。 这就是空洞卷积的聪明之处。二、空洞卷积的架构空洞卷积网络的结构跟传统CNN大体差不多,但通过在卷积层里加空洞,模型能更好地抓住远距离的依赖关系。我们一步步来看它是怎么搭起来的。1. 空洞卷积模块空洞卷积模块是网络的主体,每个模块包括空洞卷积层、批归一化(BatchNorm)和激活函数(ReLU)。我们拆开来看看它是怎么干活的。 2.1 空洞卷积层空洞卷积的核心在于那个 dilation 参数,它控制卷积核里元素之间的间隔。空洞率越大,卷积核跳得越远,感受野就越大。
深度学习基础入门篇9.3:卷积算子:空洞卷积、分组卷积、可分离卷积、可变性卷积等详细讲解以及应用场景和应用实例剖析 1.空洞卷积(Dilated Convolution) 1.1 空洞卷积提出背景 在像素级预测问题中 空洞卷积在某些特定的领域有着非常广泛的应用,比如: 语义分割领域:DeepLab系列2,3,4,5与DUC6。 图片 图2 扩张率为2时的3*3空洞卷积 图片 图3 扩张率为4时的3*3空洞卷积 扩张率大于1时,在标准卷积的基础上,会注入空洞,空洞中的数值全部填0。 例如我们可以将卷积核拆分成两个(或多个)向量的外积: $$\begin{split} \left\begin{array}{ccc} 3 & 6 & 9 \ 4 & 8 & 12 \ 5 & 10 & 如 图 6 所示。 图片 图 6 输出通道为 256 的逐点卷积 3.4.4 深度可分离卷积的意义 上文中,我们给出了深度可分离卷积的具体计算方式,那么使用深度可分离卷积代替标准卷积有什么意义呢?
DeepLabv3在ImageNet预训练的Backbone中使用空洞卷积,将输出stride减少到16或8,而不是通常的32,并通过提出Atrous空间金字塔池模块(ASPP)来增加感受野,该模块并行地应用了不同扩张率的卷积层分支 图2是一个空洞卷积的例子。 PSPNet提出了金字塔池化模块(Pyramid Pooling Module, PPM),它通过首先应用平均池化来应用不同输入分辨率的卷积层的并行分支。 HarDNet主要使用3×3卷积和1×1卷积减少GPU内存消耗。 另一种方法是使用空洞卷积,扩张率为r的卷积在感受野上等于kernel大小为2r+1的卷积。 BatchNorm紧跟每个卷积之后。ReLU则是在第一个1 × 1卷积,3 × 3卷积,和求和之后。 深度学习框架支持组卷积,每个组卷积应用相同的扩张率。
微观层面:提出了可切换的空洞卷积(SAC),用不同的空洞率来对相同的输入特征做卷积,使用switch函数来结合结果。上图(b) 展示了 SAC 的概念。 这三个分支里的卷积层的配置如下:卷积核大小为[ 1 , 3 , 3 ],空洞率为[1,3,6],padding为[0,3,6]。 Switchable Atrous Convolution 空洞卷积是增大卷积层滤波器感受野的有效方式。 特别地,空洞率r的空洞卷积在两个连续的滤波器值之间引入r−1个0,相当于将卷积核大小由k×k增大到ke=k+(k−1)(r−1),而不会增加参数的个数或计算量。 下图b为3×3卷积层和空洞率为1(红色)与2(绿色)的一个例子:不同尺度的同类物体可以通过相同的卷积权重和不同的空洞率来检测。 ?
所以空洞不光针对文件,也可以针对内存,可以将虚址中的缺页中断理解为填补内存空洞的过程,文件中也有类似的机制。 空洞的产生 下面分平台说明。 带有空洞的文件复制后还有空洞吗? widnows 的空洞本质上是一种数据压缩,将很多 0 压缩在一起,不过确确实实起到了节省存储空间的目的。 空洞的应用 下面的脚本可以搜索文件系统中带空洞的文件: #! 最终结论就是,文件空洞并没有内存空洞那么有用,如果你遇到过它的应用场景,欢迎在评论区拍砖斧正~~ 参考 [1]. lseek函数与文件空洞 [2]. windows稀疏文件
,也即膨胀卷积或带孔洞的卷积。 可分离卷积首先按深度方向进行卷积(对每个输入通道分别卷积),然后逐点进行卷积,将上一步的卷积结果混合到输出通道中。 直观来说,可分离卷积可以看做讲一个卷积核分解为两个小的卷积核,或看作Inception模块的一种极端情况。 当使用该层作为第一层时,应提供input_shape参数。 (反卷积)。 需要反卷积的情况通常发生在用户想要对一个普通卷积的结果做反方向的变换。例如,将具有该卷积层输出shape的tensor转换为具有该卷积层输入shape的tensor。
[SAConv可切换空洞卷积介绍] SAConv(可切换空洞卷积)原理与优点详解 一、SAConv的核心原理 SAConv(Switchable Atrous Convolution)是一种创新的卷积模块 ,旨在解决传统空洞卷积(Dilated Convolution)在多尺度目标检测中的局限性。 其核心设计思想如下: 动态空洞率切换机制 SAConv通过可学习的开关函数(Switch Functions)动态调整卷积核的空洞率(Dilation Rate),而非固定使用单一空洞率。 四、总结 SAConv通过动态空洞率切换和全局上下文感知,解决了传统空洞卷积的固定感受野问题,显著提升了模型的多尺度特征提取能力和鲁棒性。 C2PSA, [1024]] # 10 # YOLO11n head head: - [-1, 1, nn.Upsample, [None, 2, "nearest"]] - [[-1, 6]
空洞文件(hole file) 我们知道 lseek()系统调用,使用 lseek 可以修改文件的当前读写位置偏移量,此函数不但可以改变位置偏移量,并且还允许文件偏移量超出文件长度,这是什么意思呢? ,所以形成了空洞,这部分区域就被称为文件空洞,那么相应的该文件也被称为空洞文件。 文件空洞部分实际上并不会占用任何物理空间,直到在某个时刻对空洞部分进行写入数据时才会为它分配对应的空间,但是空洞文件形成时,逻辑上该文件的大小是包含了空洞部分的大小的,这点需要注意。 空洞文件有什么用呢? 来看一下实际中空洞文件的两个应用场景: ⚫ 在使用迅雷下载文件时,还未下载完成,就发现该文件已经占据了全部文件大小的空间,这也是空洞文件;下载时如果没有空洞文件,多线程下载时文件就只能从一个地方写入,这就不能发挥多线程的作用了
空洞文件(Sparse File)是一种在磁盘上并非完全分配存储空间的文件。它包含了一些逻辑上存在但物理上并未存储的数据。 空洞文件在多线程共同操作文件时具有极大的优势。 空洞文件在实际应用中有两个典型场景: 1、在使用迅雷下载文件时,尚未完全下载时文件已经占据整个文件大小的空间,这就是空洞文件的应用。 如果没有空洞文件,多线程下载时只能从一个位置写入,无法充分发挥多线程的优势。有了空洞文件,不同地址可以同时写入,发挥了多线程的优势。 通过空洞文件,可以避免一开始就分配过多的资源,节约了存储空间的浪费。 在 Linux 中,可以通过使用 lseek 和 write 系统调用来创建空洞文件。 在文件系统中,读取空洞文件时,操作系统会将空洞部分的数据补充为0,使得读取的文件内容包含完整的文件大小。