精华内容
下载资源
问答
  • 扩张卷积
    千次阅读
    2021-07-05 15:39:16

    扩张卷积也被称为空洞卷积或者膨胀卷积,在原始的卷积核上插入零值,是感受野增加(reception field)。扩张卷积参数: dilation rate,指的是卷积核的点的间隔数量,比如常规的卷积操作dilatation rate为1。下图,图(a)d=1  , 图(b)d=2   ,   图(c)d=4。扩张卷积操作还是很好理解的,上图中(a)是基础的卷积核,扩张卷积就是在这个基础卷积核加入间隔,上图(b)对应3 × 3  的dilation rate=2的卷积,但是间隔为1,也就是相当于对应7 × 7 的图像块,可以理解为kernel size还是变成了7 × 7 ,但是却只有9个点有参数,其余的位置参数都是0,和输入特征图对应位置的像素进行卷积计算,其余的位置都略过。图©和图(b)是类似的,只是dilation rate=4,相当于变成了15 × 15 的卷积核。

    注意

    在使用时dilation rate的大小尽量不要保持同样的大小,要采用不同大小的dilation rate值这样可以有效的避免由于插值而导致部分的特征值没有利用到.

                                                      使用同样的dilation rate

                                                     使用不同的dilation rate

    更多相关内容
  • 基于形态学扩张卷积神经网络的高光谱图像分类.pdf
  • 为了解决训练样本有限情况下高光谱图像分类精度低的问题,提出了一种结合扩张卷积与注意力机制的三维-二维串联卷积神经网络模型。首先,该模型以串联的三维-二维卷积神经网络作为基础结构,利用三维卷积同时提取高光谱...
  • 膨胀卷积(Dilated convolutions)(又成空洞卷积、扩张卷积)和HDC设计膨胀卷积的规则分享

    一、背景

    论文:Multi-Scale Context Aggregation by Dilated Convolutions

      大部分图像分割的框架都是经历一系列的卷积和下采样的模块之后,再不断与之前卷积结果跨层融合经历一系列卷积和上采样模块的过程,只不过大家融合的方式不尽相同,FCN是逐像素直接相加U-NET是通道维度拼接DFAnet是矩阵相乘,但大体框架是一样的,主要还是因为之前的下采样降低了图片的分辨率,而我们只能采用这种方法既能及时补充细节信息又能恢复原始图片分辨率。论文在介绍中,大胆提出这些问题的根源在于池化、下采样层的存在而它们的存在并不是必要的

    创新点:

     (1)丢掉池化、下采样模块;
    2)构建一种新的卷积网络结构 — 膨胀卷积;
    3)提出了一种既可以结合上下文信息,又不降低分辨率的模型。

     二、原理

    kernel_size =3, dilated_ratio=2, stride=1, padding=0

    相当于实际普通个卷积核:K=3+(3-1)(2-1)=5; 卷积后得出的尺寸为w=(w-K+2P)/S+1=3

     1.连续使用几个膨胀系数不同的空洞卷积,有如下的结果:

    aF1F0通过1-dilated(相当于普通卷积)扩张卷积产生的;F1中每个元素具有3x3的感受野。

    bF2F1通过2-dilated扩张卷积产生的;F2中每个元素具有7x7的感受野。

    cF3F2通过4-dilated扩张卷积产生的;F3中每个元素具有15x15的感受野。

       上图可以看出,卷积核参数量没有发生改变,只是被0填充大小发生变化,随着空洞系数的增大,感受野 ( receptive field ) 也逐渐变大,而他们训练的参数是完全相同的。文章当中给出了上面三种情况感受野的计算公式:

     2.连续使用几个膨胀系数相同的空洞卷积,有如下的结果:

    相比于前面使用连续不同膨胀系数的空洞卷积而言:

    • 两种方法在仅是膨胀系数不同情况下,它们的参数数量是一样的。
    • 对于[2, 2, 2]的空洞卷积来说,Layer4层卷积后得到的那层)的感受野也是13×13,但在这个视野下有很多像素值是没有利用到的

    对此,我们更加倾向于使用[1, 2, 4]这样的膨胀系数 —— 感受野下使用的区域是连续的。

    3.全部使用普通的卷积 

    可以发现:

    • 在相同层对应的感受野:普通卷积(7x7)要小于膨胀卷积(13x13)。
    • 这说明使用膨胀卷积可以大幅度增加感受野。

     三、膨胀卷积使用的方法

    1.论文第一个建议:连续使用多个膨胀卷积时应该如何设计它的膨胀系数如下:

             针对于几个膨胀系数相同的空洞卷积和几个膨胀系数的空洞卷积连接卷积产生的不同结果,论文给出了相应的解决方法:  Hybird Dilated Convolution (HDC)

             假设我们连续堆叠N个空洞卷积(它的kernel_size都是等于KxK 的),每个空洞卷积的膨胀系数分别对应[ r1 , r2 , , rn ] 。那HDC的目标是通过一系列空洞卷积之后可以完全覆盖底层特征层的方形区域,并且该方形区域中间是没有任何孔洞或缺失的边缘(withou any holes or missing edges)。作者定义了一个叫做"maximum distance between two nonzero values,两个非零元素之间最大的距离"的公式:

     针对第一个建议给出的两个例子:(其中最大距离Mn = rn)

    kernel_size (K)=3 时,对于膨胀系数 r=[1, 2, 5] 来说, M 2 =max[M 3 − 2r 2 , 2r i −M i+1 , r 2 ] =max[5-4, 4-5, 2]=2 (K= ) 3, 所以 满足 设计要求。
    kernel_size (K)=3 时,对于膨胀系数 r=[1, 2, 9] 来说,M 2 =max[M 3 − 2r 2 , 2r i −M i+1 , r 2 ] =max[9-4, 4-9, 2]=5 (K=)3, 所以 不满足 设计要求,所以这组参数时不合适的。

    设计对应的效果图对比:

     明显可以看出r=[1, 2, 9], 中间丢失了一部分信息,而r=[1,2,5]没有丢失。

      提问:为什么例子中的 r都是从1开始的?

            我们希望在高层特征图的每个像素可以利用到底层特征图的感受野内的所有像素,那么M1应该等于1 M1=1意味着非零元素之间是相邻的(没有间隙的),而M1的计算公式如下:

    M1  = max[M2−2r1 , 2r1 − M2,r1] = max[正, 负, ri]

           既然我们希望M1=1而且M1且取3个中最大的数,那么M1应该 r1 ,即1 ≥ r1所以r1等于1。

    2.论文第二个建议:将膨胀系数设置为锯齿形状。

    3.论文第个建议:公约数不能大于1的。

     设计对应的效果图对比:

     明显可以看出r=[2, 4, 8],有公约数2而且中间丢失了一部分信息,而r=[1,2,5]公约数为1且没有丢失任何信息。

    四、 膨胀卷积用途

              在语义分割中,通常会使用分类网络作为backbone。通过backbone之后会对特征图进行一系列的下采样,之后再进行一系列的上采样还原原图的大小。

             在分类网络中,一般都会对图片的高度和宽度下采样32倍,由于后续需要通过上采样还原到原来的尺寸。如果下采样的倍率很大时,即便使用上采样还原回原来的尺寸,那么信息丢失是比较严重的。VGG16为例,该网络通过MaxPooling层对特征图进行下采样:

    通过 MaxPooling 会降低特征图的 shape
    MaxPooling 会丢失特征图的一些细节信息(毕竟是用最大值代替局部值,丢失信息是肯定的)
    丢失的信息和目标是无法通过上采样进行还原的

    对于神经网络构建而言:

    如果我们简单粗暴地将MaxPooling去掉的话,会引入新的问题:

    特征图对应原图的感受野会变小
    为后面的卷积层带来影响(感受野不变,卷积层就无法获取深层的信息)

     此时,空洞卷积就可以解决上面的问题,因为空洞卷积:

    增大特征图的感受野
    •通过修改padding的大小,可以 保证输入输出特征图的 shape 不变

    五、膨胀卷积各种设计效果比较 

    可以发现,使用HDC设计的膨胀卷积对于全局信息的捕获更齐全。

    六、代码:

     上面对应每个r=[x,x,x]生成图像的代码如下,只需改动dilated_rates = [1,2,3]中的值即可测试其他数据。这里参考了(空洞卷积(膨胀卷积)的相关知识以及使用建议(HDC原则)_Le0v1n的博客-CSDN博客_空洞卷积的作用)

    import numpy as np
    import matplotlib.pyplot as plt
    from matplotlib.colors import LinearSegmentedColormap
    
    
    def dilated_conv_one_pixel(center: (int, int),
                               feature_map: np.ndarray,
                               k: int = 3,
                               r: int = 1,
                               v: int = 1):
        """
        膨胀卷积核中心在指定坐标center处时,统计哪些像素被利用到,
        并在利用到的像素位置处加上增量v
        Args:
            center: 膨胀卷积核中心的坐标
            feature_map: 记录每个像素使用次数的特征图
            k: 膨胀卷积核的kernel大小
            r: 膨胀卷积的dilation rate
            v: 使用次数增量
        """
        assert divmod(3, 2)[1] == 1
    
        # left-top: (x, y)
        left_top = (center[0] - ((k - 1) // 2) * r, center[1] - ((k - 1) // 2) * r)
        for i in range(k):
            for j in range(k):
                feature_map[left_top[1] + i * r][left_top[0] + j * r] += v
    
    
    def dilated_conv_all_map(dilated_map: np.ndarray,
                             k: int = 3,
                             r: int = 1):
        """
        根据输出特征矩阵中哪些像素被使用以及使用次数,
        配合膨胀卷积k和r计算输入特征矩阵哪些像素被使用以及使用次数
        Args:
            dilated_map: 记录输出特征矩阵中每个像素被使用次数的特征图
            k: 膨胀卷积核的kernel大小
            r: 膨胀卷积的dilation rate
        """
        new_map = np.zeros_like(dilated_map)
        for i in range(dilated_map.shape[0]):
            for j in range(dilated_map.shape[1]):
                if dilated_map[i][j] > 0:
                    dilated_conv_one_pixel((j, i), new_map, k=k, r=r, v=dilated_map[i][j])
    
        return new_map
    
    
    def plot_map(matrix: np.ndarray):
        plt.figure()
    
        c_list = ['white', 'blue', 'red']
        new_cmp = LinearSegmentedColormap.from_list('chaos', c_list)
        plt.imshow(matrix, cmap=new_cmp)
    
        ax = plt.gca()
        ax.set_xticks(np.arange(-0.5, matrix.shape[1], 1), minor=True)
        ax.set_yticks(np.arange(-0.5, matrix.shape[0], 1), minor=True)
    
        # 显示color bar
        plt.colorbar()
    
        # 在图中标注数量
        thresh = 5
        for x in range(matrix.shape[1]):
            for y in range(matrix.shape[0]):
                # 注意这里的matrix[y, x]不是matrix[x, y]
                info = int(matrix[y, x])
                ax.text(x, y, info,
                        verticalalignment='center',
                        horizontalalignment='center',
                        font={'size':6},
                        color="white" if info > thresh else "black")
        ax.grid(which='minor', color='black', linestyle='-', linewidth=1.5)
        plt.show()
        plt.close()
    
    
    def main():
        # bottom to top
        dilated_rates = [1,2,3]
        # init feature map
        size = 31
        m = np.zeros(shape=(size, size), dtype=np.int32)
        center = size // 2
        m[center][center] = 1
        # print(m)
        # plot_map(m)
    
        for index, dilated_r in enumerate(dilated_rates[::-1]):
            new_map = dilated_conv_all_map(m, r=dilated_r)
            m = new_map
        print(m)
        plot_map(m)
    
    
    if __name__ == '__main__':
        main()
    

    七、总结

    1.在不做pooling损失信息和相同的计算条件下的情况下,加大了感受野,让每个卷积输出都包含较大范围的信息。空洞卷积经常用在实时图像分割中。当网络层需要较大的感受野,但计算资源有限而无法提高卷积核数量或大小时,可以考虑空洞卷积。

    2.使用HDC设计的膨胀卷积通过卷积后能够保留更多原始的信息。

    3.最后,如果你觉得上面的内容能给您带来一点作用的话,可以给我点个👍,谢谢

    八、参考

    1.膨胀卷积(Dilated convolution)详解_哔哩哔哩_bilibili

    2.空洞卷积(膨胀卷积)的相关知识以及使用建议(HDC原则)_Le0v1n的博客-CSDN博客_空洞卷积的作用

    3.一文详解什么是空洞卷积?_Mr.Jk.Zhang的博客-CSDN博客_空洞卷积 

    4.图像分割—— 膨胀卷积的应用_清水河小小龙虾的博客-CSDN博客 

    展开全文
  • 扩张卷积(dilated convolution)

    千次阅读 2021-07-09 11:43:48
    【对扩张卷积的学习记录】 ICLR-2016-Dilated Convolution:MULTI-SCALE CONTEXT AGGREGATION BY DILATED CONVOLUTIONS 论文地址: https://arxiv.org/abs/1511.07122 代码地址: https://github.com/fyu/dilation ...

    【对扩张卷积的学习记录】

    ICLR-2016-Dilated Convolution:MULTI-SCALE CONTEXT AGGREGATION BY DILATED CONVOLUTIONS
    论文地址:
    https://arxiv.org/abs/1511.07122
    代码地址:
    https://github.com/fyu/dilation
    https://github.com/bordesf/dilation

    论文动机:
    为了使卷积网络更适用于密集预测,作者开发了一个在不损失分辨率和覆盖情况下扩展感受野的卷积模块。

    扩张卷积定义:
    扩张卷积(dilated convolution),又叫空洞卷积或者膨胀卷积,其原理就是在kernel各个像素点之间加入0值像素点,变向的增大核的尺寸从而增大感受野。相比原来的正常卷积操作,扩张卷积多了一个参数:扩张率(dilation rate),指的是卷积核的点的间隔数量,比如常规的卷积操作dilatation rate为1。

    扩张卷积图:
    在这里插入图片描述

    扩张卷积核尺寸:
    在这里插入图片描述
    扩张卷积输出尺寸:
    在这里插入图片描述
    在这里插入图片描述

    扩张卷积存在棋盘效应问题,解决方法是使用锯齿状的卷积核,详细内容见参考链接。

    参考:
    https://www.cnblogs.com/zf-blog/p/12101300.html

    展开全文
  • 针对大多数图像去雾算法模型参数估计准确性差及色彩失真等问题,提岀了一种端到端的密集连接扩张卷积神经网络。首先,通过使用多层密集连接结枃来増加网络的特征利用窣,避免网络加深时的梯度消失现象。其次,通过在...
  • 如何理解扩张卷积(dilated convolution)

    万次阅读 多人点赞 2019-08-16 18:35:15
    扩张卷积(Dilated Convolution)也被称为空洞卷积或者膨胀卷积,是在标准的卷积核中注入空洞,以此来增加模型的感受野(reception field)。相比原来的正常卷积操作,扩张卷积多了一个参数: dilation rate,指的是...

    原理

    扩张卷积(Dilated Convolution)也被称为空洞卷积或者膨胀卷积,是在标准的卷积核中注入空洞,以此来增加模型的感受野(reception field)。相比原来的正常卷积操作,扩张卷积多了一个参数: dilation rate,指的是卷积核的点的间隔数量,比如常规的卷积操作dilatation rate为1。它的论文是:《MULTI-SCALE CONTEXT AGGREGATION BY
    DILATED CONVOLUTIONS》

    前言

    CNN结构中,大部分的layer是靠Conv和Pooling完成的,这两个层是CNN中非常重要的两个组件。一般情况下对于一个图像分类任务,一个靠Conv和Pooling堆叠起来的backbone都是具有不错的特征提取能力的,这种堆叠最经典的就是结构就是VGG。在图像输出网络后,Conv做特征的抽取,而Pooling做特征的聚合,并且让模型具有一定程度上的平移不变性,还可以降低后面卷积层的算力。最后到全连接层输出分类结果就好了。
    但是这种结构对目标检测和图像分割来说,就会存在一些问题:

    • 目标检测和图像分割中感受野很重要,比如目标检测一般情况下要在最后一层特征图上做预测,那么特征图上的一个点能过映射到原图的多少像素,决定了网络能检测到的尺寸上限,而保证感受野就要靠下采样,下采样的结果就是小目标不容易被检测到;
    • 针对上面的问题,多层特征图拉取分支能改善这个问题,因为小目标在越靠前的特征图上越容易体现,但是前面的特征图语义信息不够,比如在SSD中就存在这个问题;
    • 不做下采样,只增加卷积层的数量,首先会增大网络的计算量,其次不做Pooling的聚合最后的特征提取效果也会受到影响,而且感受野不会变化。
      所以有没有一种可以不牺牲特征图尺寸的情况下增加感受野的方式呢?
      扩张卷积就能做到这点。

    原理

    在这里插入图片描述
    扩张卷积操作还是很好理解的,上图中(a)是基础的卷积核,扩张卷积就是在这个基础卷积核加入间隔,上图(b)对应 3 × 3 3\times3 3×3 的dilation rate=2的卷积,但是间隔为1,也就是相当于对应 7 × 7 7\times7 7×7的图像块,可以理解为kernel size还是变成了 7 × 7 7\times7 7×7,但是却只有9个点有参数,其余的位置参数都是0,和输入特征图对应位置的像素进行卷积计算,其余的位置都略过。图©和图(b)是类似的,只是dilation rate=4,相当于变成了 15 × 15 15\times15 15×15的卷积核。
    而卷积核尺寸变大了,感受野也就自然变大:
    R F i = R F i − 1 + ( k − 1 ) × s RF_{i}=RF_{i-1}+(k-1)\times s RFi=RFi1+(k1)×s
    R F i − 1 RF_{i-1} RFi1是上一层的感受野, k k k是卷积核的尺寸, s s s是步长。

    存在的问题

    扩张卷积虽然在不损失特征图尺寸的情况下增大了感受野,但是也会带来新的问题,主要是体现在卷积的输入,由于卷积核是有间隔的,这意味着不是所有的输入都参与计算,整体特征图上体现出一种卷积中心点的不连续,尤其是当叠加的卷积层都是用相同的dilation rate的时候:
    在这里插入图片描述
    上图中示例是三个dilation rate=2扩张卷积层连续卷积后的结果,蓝色的标识是参与计算的卷积中心,而颜色的深度表征次数。可以看到,由于3次的dilation rate是一致的额,所以卷积的计算中心会呈现出一种网格状向外扩展,有一些点不会成为计算的中心点。

    解决方法

    解决这个问题最直接的方法当然就是不使用连续的dilation rate相同的扩展卷积,但是这还不够,因为如果dilation rate是成倍数的,那么问题还是存在。所以最好的方式是将连续排布的扩张卷积的dilation rate设置为“锯齿状”,比如分别是[1,2,3],那么卷积中心的分布就会变成下面这样,不在有遗漏的情况。
    在这里插入图片描述

    应用实例

    扩张卷积在图像分割领域使用是比较多的,因为本身扩张卷积的原文就用来做分割,此外,它在目标检测领域也有些应用,比如SSD,在新增的Conv6层卷积使用了dilation rate=6的卷积,为了进一步增大感受野。
    此外,扩张卷积已经在caffe原始代码中实现了,就是dilation参数。

    layer {
      name: "conv1"
      type: "Convolution"
      bottom: "data"
      top: "conv1"
      convolution_param {
        num_output: 64
        bias_term: false
        pad: 1
        kernel_size: 3
        group: 1
        stride: 2
        weight_filler {
          type: "xavier"
        }
        dilation: 1
      }
    }
    

    上面这种情况就是一个基础的卷积层,它的dilation=1。

    展开全文
  • 扩张卷积(Atrous 卷积)

    千次阅读 2020-06-09 00:56:18
    空洞卷积(dilated convolution)是针对图像语义分割问题中下采样会降低图像分辨率、丢失信息而提出的一种卷积思路。 dilated的好处是不做pooling损失信息的情况下,加大了感受野,让每个卷积输出都包含较大范围的...
  • 那么一般的操作就是用32个3×3的卷积核来分别同输入数据卷积,这样每个卷积核需要3×3×16个参数,得到的输出是只有一个通道的数据。之所以会得到一通道的数据,是因为刚开始3×3×16的卷积核的每个通道会在输入...
  • 扩张卷积devisitng dilated convolution

    千次阅读 2021-11-09 22:43:11
    上图中(a)是基础的卷积核,扩张卷积就是在这个基础卷积核加入间隔,上图(b)对应3 × 3 3\times33×3 的dilation rate=2的卷积,但是间隔为1,也就是相当于对应7 × 7 7\times77×7的图像块,可以理
  • 为什么用空洞卷积? 普通的Deep CNN中普遍包含Up-sampling / pooling layer,导致 内部数据结构丢失;空间层级化信息丢失。 小物体信息无法重建 (假设有四个pooling layer 则任何小于 2^4 = 16 pixel 的物体信息...
  • 最近在研究卷积网络的改性,有必要对各种卷积层的结构深入熟悉一下。为此写下这篇学习笔记。 文章大部分内容来自于网络的各种博客总结,本博文仅仅作为本人学习笔记,不做商业用途。 目录 2D卷积 3D卷积 1*1...
  • 针对由一般卷积神经网络预测的粗糙特征生成的深度图质量低、监督学习处理任务限制数据量等问题,提出一种新颖的融合扩张卷积神经网络和同时定位与建图(SLAM)的无监督单目深度估计方法。该方法采用视图重构的思想估计...
  • 文章来源:... 1. 扩张卷积的提出 Multi-Scale Context Aggregation by Dilated Convolutions Dilated Residual Networks 论文笔记——CVPR 2017 Dilated Residual Netwo...
  • 空洞卷积(扩张卷积,带孔卷积,atrous convolution)是一种区别于普通卷积的卷积方式,从字面理解,就是卷积层中有洞。 1.一维理解 以一维为例: 图中(a)Input feature表示输入特征,Output feature表示输出...
  • Dilated Convolutions——扩张卷积

    万次阅读 2017-12-07 16:36:50
    Dilated Convolutions——扩张卷积
  • 扩张卷积原理 扩张卷积(Dilated Convolution)也被称为空洞卷积或者膨胀卷积,是在标准的卷积核中注入空洞,以此来增加模...
  • FastFCN:重新考虑骨干中的扩张卷积进行语义分割[项目] [论文] [arXiv] [首页] FastFCN:重新考虑骨干中的扩张卷积进行语义分割。 FastFCN:重新考虑骨干中的扩张卷积用于语义分割[项目] [论文] [arXiv] [首页] ...
  • 该论文提出了一种新型的联合上采样模块JPU(Joint Pyramid Upsampling)以取代扩张卷积,该方法有效降低了计算复杂度和内存占用,能够在多种已有模型中应用,并且不损失甚至会对最终精度有一定的提升。
  • 之前博文已经对空洞卷积做了介绍,本文进行深入介绍《各种卷积层的理解(深度可分离卷积、分组卷积、扩张卷积、反卷积)》 诞生背景,在图像分割领域,图像输入到CNN(典型的网络比如FCN[3])中,FCN先像传统的...
  • 2016年提出的 空洞卷积广泛应用于语义分割与目标检测等任务中 空洞卷积(膨胀卷积/扩张卷积) Dilated/Atrous Convolution 空洞卷积是一种不增加参数量(运算量)同时增加输出单元感受野的一种方法。Atrous 卷积,就是带...
  • 1. 深度可分离卷积(depthwise separable convolution)在可分离卷积(separable convolution)中,通常将卷积操作拆分成多个步骤。而在神经网络中通常使用的就是深度可分离卷积(depthwise separable convolution)...
  • 换句话说,相比原来的标准卷积,扩张卷积(dilated convolution) 多了一个hyper-parameter(超参数)称之为dilation rate(扩张率),指的是kernel各点之前的间隔数量,【正常的convolution 的 dilatation rate为 1...
  • 扩张卷积 知乎大佬回答 平滑扩张卷积 知乎大佬回答
  • 引子: 感受野(receptive ... Dilated/Atrous Convolution(中文叫做空洞卷积或者膨胀卷积) 或者是 Convolution with holes 从字面上就很好理解,是在标准的 convolution map 里注入空洞,以此来增加 recepti...
  • wavenet在做语音合成的时候,用到了dilated connvolution(空洞卷积).关于空洞卷积的介绍,知乎的这篇文章写的不错: https://www.zhihu.com/question/54149221/answer/192025860 关于在tensorflow中实现一般的卷积...
  • 密集连接扩张卷积神经网络的单幅图像去雾.pdf
  • 基于扩张卷积神经网络的密集区域人数统计系统.pdf

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,376
精华内容 2,550
关键字:

扩张卷积

友情链接: dectmposition.rar