精华内容
下载资源
问答
  • 空洞卷积

    2020-04-17 21:39:37
    空洞卷积的意义 空洞卷积(Dilated/Atrous Convolution)最初是为解决图像语义分割的问题而提出的。常见的图像分割算法通常使用池化层来增大感受野,同时也缩小了特征图尺寸,然后再利用上采样还原图像尺寸。特征图...

    空洞卷积的意义

    空洞卷积(Dilated/Atrous Convolution)最初是为解决图像语义分割的问题而提出的。常见的图像分割算法通常使用池化层来增大感受野,同时也缩小了特征图尺寸,然后再利用上采样还原图像尺寸。特征图缩小再放大的过程造成了精度上的损失,因此需要有一种操作可以在增加感受野的同时保持特征图的尺寸不变,从而代替池化与上采样操作,在这种需求下,空洞卷积就诞生了。

    空洞卷积的定义

    空洞卷积就是跳过一些元素进行卷积。下图a代表普通3*3卷积。下图b代表空洞数为2的空洞卷积(在特征图上每两行或两列选取元素与卷积核卷积),虽然其卷积核尺寸为3*3,但是其感受野已经增大到5*5。下图c代表空洞数为3的空洞卷积。pytorch中conv2d函数的dilation参数即代表空洞数。

    上图中,同样的一个3*3卷积,却可以起到5*5、7*7等卷积的效果。可以看出,空洞卷积在不增加参数量的前提下,增大了感受野。假设空洞卷积的卷积核大小为k,空洞数为d,则其等效卷积核大小k^{'}计算如下所示:

                                                                                           k^{'}=k+\left ( k-1 \right )\left ( d-1 \right )

    空洞卷积的优缺点

    优点

    在不引入额外参数的前提下可以任意扩大感受野。同时保持特征图的分辨率不变。这一点在分割与检测任务中十分有用,感受野的扩大可以检测大物体,而特征图分辨率不变使得物体定位更加准确。

    缺点

    • 网格效应(Gridding Effect):由于空洞卷积是一种稀疏的采样方式,当多个空洞卷积叠加时,有些像素根本没有被利用到,会损失信息的连续性和相关性,进而影响分割、检测等要求较高的任务。
    • 远距离的信息没有相关性:空洞卷积是一种稀疏的采样方式,导致远距离卷积得到的结果之间缺乏相关性,进而影响分类结果。
    • 不同尺度物体的关系:大的空洞数对于大物体的分割与检测有利,但是对于小物体则有弊无利,如何处理好多尺度问题的检测,是空洞卷积设计的重点

    空洞卷积缺点的解决办法

    对于上述问题,图森未来提出了HDC(Hybrid Dilated Convolution)结构,详情请查看:https://www.zhihu.com/question/54149221

     

    本文摘抄自:《深度学习之Pytorch物体检测实战》一书

    展开全文
  • 原文:MULTI-SCALE CONTEXT AGGREGATION BY DILATED CONVOLUTIONS空洞卷积目的:不用池化了,卷积核放大二倍(插入0),等效实现了特征图缩小二倍卷积核尺寸: Fi+1=( 2^i+2) - 1caffe dilated-卷积核尺寸:kernel_...

    原文:MULTI-SCALE CONTEXT AGGREGATION BY DILATED CONVOLUTIONS

    空洞卷积目的:不用池化了,卷积核放大二倍(插入0),等效实现了特征图缩小二倍

    卷积核尺寸: Fi+1=( 2^i+2) - 1

    caffe dilated-卷积核尺寸:

    kernel_extent = dilation_data[i] * (kernel_shape_data[i] - 1) + 1

    75e6e552f055ece7e8a5bd8e616f5dc1.png

    caffe卷积后特征图尺寸:

    const int output_dim = (input_dim + 2 * pad_data[i] - kernel_extent) / stride_data[i] + 1;

    caffe源码地址: https://github.com/BVLC/caffe/blob/master/src/caffe/layers/conv_layer.cpp

    推导:

    4cba1af19df71699d7eee95fc04f9be8.png

    例:

    import tensorflow as tf

    img = tf.constant(value=[

    [1,2,3,4],[1,2,3,4],[1,2,3,4],[1,2,3,4]

    ],dtype=tf.float32)

    img = tf.expand_dims(img, 0)

    img = tf.expand_dims(img, -1)

    img2 = tf.concat(values=[img,img],axis=3)

    filter = tf.constant(value=1, shape=[3,3,2,5], dtype=tf.float32)

    out_img1 = tf.nn.atrous_conv2d(value=img2, filters=filter, rate=1, padding='SAME')

    out_img11 = tf.nn.conv2d(input=img2, filter=filter, strides=[1,1,1,1], padding='SAME')

    out_img2 = tf.nn.atrous_conv2d(value=img2, filters=filter, rate=1, padding='VALID')

    out_img3 = tf.nn.atrous_conv2d(value=img2, filters=filter, rate=2, padding='SAME')

    #error

    #out_img4 = tf.nn.atrous_conv2d(value=img, filters=filter, rate=2, padding='VALID')

    with tf.Session() as sess:

    print('rate=1, SAME mode result:')

    print(sess.run(out_img1))

    print('strides=1, SAME mode result:')

    print(sess.run(out_img11))

    print('rate=1, VALID mode result:')

    print(sess.run(out_img2))

    print('rate=2, SAME mode result:')

    print(sess.run(out_img3))

    print(sess.run(img))

    # error

    #print 'rate=2, VALID mode result:'

    #print(sess.run(out_img4))


    空洞卷积在使用时需要注意的是,当特征图的尺寸与dilation rate接近时,空洞卷积相当于1×1卷积。如下图,3×3卷积有效的只有中心点的权重。

    e21bcbcfbd7a793d03d227569569e1e6.png
    展开全文
  • 2017年Panqu Wang发表,空洞卷积用于语义分割,提出了HDC和DUC设计原则,取得了图像分割的好效果,Understanding Convolution for Semantic Segmentation,官方代码(MXNet)设计思想:空洞卷积(扩张卷积):尽量...

    7751a848d4f6078fa1066d8a1e611213.png

    2017年Panqu Wang发表,空洞卷积用于语义分割,提出了HDC和DUC设计原则,取得了图像分割的好效果,Understanding Convolution for Semantic Segmentation,官方代码(MXNet)设计思想:

    • 空洞卷积(扩张卷积):尽量保留内部数据结构和避免下采样,就是增大感受野的情况下保留更多信息,代替pooling
      • 卷积前的下采样可以增大卷积核的感受野,作用的每一点就相当于以前的两个点。即便再上采样不行,信息无法重建。
      • 反卷积:反方向卷积,完成上采样。
    • HDC 混合空洞卷积设计原则,为了消除在连续使用dilation convolution时容易出现的网格影响(像素点丢失)。
    • DUC 密集上采样卷积设计原则,相当于用通道数来弥补卷积/池化等操作导致的尺寸的损失。
    • 语义分割的难点:
      • 分类任务pooling损失可以接受,但像素级别的图像分割任务中,pooling丢失的信息对拼合能力很不利,很难准确的对像素分割。
      • pixel-wise的输出,需要pooling来增大感受野,再upsampling还原尺寸
      • 内部数据结构丢失、空间层级化信息丢失。
      • 小物体信息无法重建。假设有四个pooling层则任何小于2^4 = 16pixel的物体信息将理论上无法重建

    网络结构:
    展示了有 HDC 和 DUC 层的ResNet-101网络的语义分割网络结构。HDC应用于ResNet块内,用于编码;DUC应用于网络顶部,用于解码。

    b09de1a4d51b0161002b90a6f2e35bf4.png

    空洞卷积

    • 在卷积核中间填充0,扩大感受野,但没用下采样,没用大卷积核
    • (a) 1-dilated conv,等于普通3*3卷积,没有填充空洞0
    • (b) 2-dilated conv,卷积核3*3,空洞1,1-dilated + 2-dilated = 7*7conv大小的感受野。只用2倍空洞卷积会忽略掉很多点,可以与1倍的结合起来用。
    • (c) 4-dilated conv,卷积核3*3,空洞4, 1-dilated + 2-dilated + 4-dilated = 15*15conv。每个元素的感受野为15*15,与每个层相关联的参数的数量是相同的,感受野呈指数增长,而参数数量呈线性增长。
    • 对比传统的conv操作,3层3x3的卷积加起来,stride为1的话,只能达到(kernel-1)*layer+1=7的感受野(7->5->3),也就是和层数layer成线性关系,而dilated conv的感受野是指数级的增长。

    7c5b534827de95211957db642e2da9f0.png

    Dilated Conv的潜在问题

    • kernel 并不连续,也就是并不是所有的 pixel 会被计算到,同样会忽略掉一些点的信息。
    • 只采用大 dilation rate conv 检测小体积效果不理想,很多像素点考虑不到。可以做多尺度的变换,但会增加网络复杂度。

    HDC

    • HDC原则 (Hybrid Dilated Convolution) - 图森组
      • 混合空洞卷积,在每一层使用不同的rate,把dilatioin rate 变成锯齿形式的也就是不同层之间的dilation不断变化。目标是最后的接收野全覆盖整个区域。
    • 1. 叠加卷积的 dilation rate 不能有大于1的公约数。比如 [2, 4, 6] 则不是一个好的三层卷,有些点永远不会被考虑
    • 2. 将 dilation rate 设计成锯齿状结构。例如[1, 2, 3, 1, 2, 3] 循环结构,覆盖了所有点,如上图
    • 3. 需要满足一下这个式子,M<=K:

    8d476ec7dc1672730e9a5ab2b14ea2ac.png
      • dilation rate是空洞卷积率,记为 ri,就是扩张倍数;K是卷积核尺寸
    • 举例:对于常见的扩张卷积核大小K=3,如果r=[1,2,5] 则

    c88d4af8c95dc02d549c886bd9ba004b.png
      • 此时M2=2 ≤ K=3 满足设计要求,设计的示意图如下:

    10086bedf72f5f47b3a7f5eacbc09eba.png

    DUC

    • 双线性插值问题:如果模型的d=16 d=16d=16,即输入到输出下采样了16倍。如果一个目标物的长或宽长度小于16个pixel,训练label map需要下采样到与模型输出维度相同,即下采样16倍时已经丢失了许多细节, 对应的模型预测结果双线性插值上采样是无法恢复这个信息。
    • 密集上采样卷积DUC (Dense Upsampling Convolution),做的事情就是改变原本top layer输出的shape,提高了小目标物的识别率,验证了DUC可以恢复双线性插值上采样损失的信息。
    • DUC模块,将所有特征图分成d^2个子集(d代表图像的降维比例)。假如原始图像大小为H*W,卷积之后变为H/d*W/d,用h*w代替,具体为:
      • 先将原先的h*w*c变成h*w*(d^2*L),L为分割的类别数目
      • 将此后的输出reshape为H*W*L,以此引入多个学习的参数,提升对细节的分割效果

    反卷积 VS 空洞卷积

    • Decon是上采样,Dilated Conv是增大感受野但不下采样
    • Deconv是在像素之间填充空白的像素
    • Dilated Conv是忽略掉了一些像素
    • 反卷积还原图像尺寸,要下采样

    空洞卷积的应用场景

    • 像素级任务,属于背景还是前景,前景中的哪一种
    • 如语义分割任务,明显HDC原则的空洞卷积ResNet更好实现了语义分割网络

    1e34492a4e01bee74ea4dd3d8c2fae69.png

    论文实验结果
    在语义分割领域的CityScapes、PASCAL VOC 2012、Kitti Road benchmark数据集取得了当时最先进的成果。

    2b938d0ef0d7573f9be3c57f76169f70.png

    推荐阅读:
    本论文解析:https://blog.csdn.net/u011974639/article/details/79460893
    反卷积: https://www.zhihu.com/question/43609045/answer/132235276
    ASPP网络(Atrous Spatial Pyramid Pooling)-港中文和商汤组

    另外在我的主页中还能看到其他系列专栏:【OpenCV图像处理】【斯坦福CS231n笔记】
    展开全文
  • TensorFlow实现卷积、反卷积和空洞卷积 TensorFlow已经实现了卷积(tf.nn.conv2d卷积函数),反卷积(tf.nn.conv2d_transpose反卷积函数)以及空洞卷积(tf.nn.atrous_conv2d空洞卷积(dilated convolution)),这...

    TensorFlow实现卷积、反卷积和空洞卷积

        TensorFlow已经实现了卷积(tf.nn.conv2d卷积函数),反卷积(tf.nn.conv2d_transpose反卷积函数)以及空洞卷积(tf.nn.atrous_conv2d空洞卷积(dilated convolution)),这三个函数的参数理解,可参考网上。比较难的是计算维度,这里提供三种方式封装卷积、反卷积和空洞卷积的方法,方面调用:


    一、卷积

    • 输入图片大小 W×W
    • Filter大小 F×F
    • 步长 S
    • padding的像素数 P

       于是我们可以得出

    N = [(W − F + 2P )/S]+1

        输出图片大小为 N×N,卷积维度计算方法:https://blog.csdn.net/qq_21997625/article/details/87252780

        可以使用TensorFlow高级的API的slim.conv2d

        net = slim.conv2d(inputs=inputs,
                          num_outputs=num_outputs,
                          weights_initializer=tf.truncated_normal_initializer(stddev=0.01),
                          weights_regularizer=reg,
                          kernel_size=[kernel, kernel],
                          activation_fn=activation_fn,
                          stride=stride,
                          padding=padding,
                          trainable=True,
                          scope=scope)

         一些特殊情况,可以自己对feature进行填充:

    def slim_conv2d(inputs,num_outputs,stride,padding,kernel,activation_fn,reg,scope):
        if padding=="VALID":
            padding_size=int(kernel /2)
            inputs = tf.pad(inputs, paddings=[[0, 0], [padding_size, padding_size], [padding_size, padding_size], [0, 0]],
                         mode='REFLECT')
            print("pad.inputs.shape:{}".format(inputs.get_shape()))
        net = slim.conv2d(inputs=inputs,
                          num_outputs=num_outputs,
                          weights_initializer=tf.truncated_normal_initializer(stddev=0.01),
                          weights_regularizer=reg,
                          kernel_size=[kernel, kernel],
                          activation_fn=activation_fn,
                          stride=stride,
                          padding=padding,
                          trainable=True,
                          scope=scope)
        print("net.{}.shape:{}".format(scope,net.get_shape()))
        return net

        下面是使用TensorFlow自己封装的卷积,与TensorFlow自带的slim.conv2d高级API类似的功能

    
    def conv2D_layer(inputs,num_outputs,kernel_size,activation_fn,stride,padding,scope,weights_regularizer):
        '''
        根据tensorflow slim模块封装一个卷积层API:包含卷积和激活函数,但不包含池化层
        :param inputs:
        :param num_outputs:
        :param kernel_size: 卷积核大小,一般是[1,1],[3,3],[5,5]
        :param activation_fn:激活函数
        :param stride: 例如:[2,2]
        :param padding: SAME or VALID
        :param scope: scope name
        :param weights_regularizer:正则化,例如:weights_regularizer = slim.l2_regularizer(scale=0.01)
        :return:
        '''
        with  tf.variable_scope(name_or_scope=scope):
            in_channels = inputs.get_shape().as_list()[3]
            # kernel=[height, width, in_channels, output_channels]
            kernel=[kernel_size[0],kernel_size[1],in_channels,num_outputs]
            strides=[1,stride[0],stride[1],1]
            # filter_weight=tf.Variable(initial_value=tf.truncated_normal(shape,stddev=0.1))
            filter_weight = slim.variable(name='weights',
                                          shape=kernel,
                                          initializer=tf.truncated_normal_initializer(stddev=0.1),
                                          regularizer=weights_regularizer)
            bias = tf.Variable(tf.constant(0.01, shape=[num_outputs]))
            inputs = tf.nn.conv2d(inputs, filter_weight, strides, padding=padding) + bias
            if not activation_fn is None:
                inputs = activation_fn(inputs)
            return inputs

    二、反卷积

         TensorFlow的高级API已经封装好了反卷积函数,分别是: tf.layers.conv2d_transpose以及slim.conv2d_transpose,其用法基本一样,如果想使用tf.nn.conv2d_transpose实现反卷积功能,那么需要自己根据padding='VALID'和‘SAME’计算输出维度,这里提供一个函数deconv_output_length函数,可以根据输入的维度,filter_size, padding, stride自动计算其输出维度。

    # -*-coding: utf-8 -*-
    """
        @Project: YNet-python
        @File   : myTest.py
        @Author : panjq
        @E-mail : pan_jinquan@163.com
        @Date   : 2019-01-10 15:51:23
    """
    import tensorflow as tf
    import tensorflow.contrib.slim as slim
    
    def deconv_output_length(input_length, filter_size, padding, stride):
      """Determines output length of a transposed convolution given input length.
      Arguments:
          input_length: integer.
          filter_size: integer.
          padding: one of SAME or VALID ,FULL
          stride: integer.
      Returns:
          The output length (integer).
      """
      if input_length is None:
        return None
      # 默认SAME
      input_length *= stride
      if padding == 'VALID':
        input_length += max(filter_size - stride, 0)
      elif padding == 'FULL':
        input_length -= (stride + filter_size - 2)
      return input_length
    
    
    
    def conv2D_transpose_layer(inputs,num_outputs,kernel_size,activation_fn,stride,padding,scope,weights_regularizer):
        '''
        实现反卷积的API:包含反卷积和激活函数,但不包含池化层
        :param inputs:input Tensor=[batch, in_height, in_width, in_channels]
        :param num_outputs:
        :param kernel_size: 卷积核大小,一般是[1,1],[3,3],[5,5]
        :param activation_fn:激活函数
        :param stride: 例如:[2,2]
        :param padding: SAME or VALID
        :param scope: scope name
        :param weights_regularizer:正则化,例如:weights_regularizer = slim.l2_regularizer(scale=0.01)
        :return:
        '''
        with  tf.variable_scope(name_or_scope=scope):
            # shape = [batch_size, height, width, channel]
            in_shape = inputs.get_shape().as_list()
            # 计算反卷积的输出维度
            output_height=deconv_output_length(in_shape[1], kernel_size[0], padding=padding, stride=stride[0])
            output_width =deconv_output_length(in_shape[2], kernel_size[1], padding=padding, stride=stride[1])
            output_shape=[in_shape[0],output_height,output_width,num_outputs]
    
            strides=[1,stride[0],stride[1],1]
    
            # kernel=[kernel_size, kernel_size, output_channel, input_channel ]
            kernel=[kernel_size[0],kernel_size[1],num_outputs,in_shape[3]]
            filter_weight = slim.variable(name='weights',
                                          shape=kernel,
                                          initializer=tf.truncated_normal_initializer(stddev=0.1),
                                          regularizer=weights_regularizer)
            bias = tf.Variable(tf.constant(0.01, shape=[num_outputs]))
            inputs = tf.nn.conv2d_transpose(value=inputs, filter=filter_weight,output_shape=output_shape, strides=strides, padding=padding) + bias
            if not activation_fn is None:
                inputs = activation_fn(inputs)
            return inputs
    
    if __name__ == "__main__":
        inputs = tf.ones(shape=[4, 100, 100, 3])
        stride=2
        kernel_size=10
        padding="SAME"
        net1 = tf.layers.conv2d_transpose(inputs=inputs,
                                          filters=32,
                                          kernel_size=kernel_size,
                                          strides=stride,
                                          padding=padding)
        net2 = slim.conv2d_transpose(inputs=inputs,
                                     num_outputs=32,
                                     kernel_size=[kernel_size, kernel_size],
                                     stride=[stride, stride],
                                     padding=padding)
        net3 = conv2D_transpose_layer(inputs=inputs,
                                      num_outputs=32,
                                      kernel_size=[kernel_size, kernel_size],
                                      activation_fn=tf.nn.relu,
                                      stride=[stride, stride],
                                      padding=padding,
                                      scope="conv2D_transpose_layer",
                                      weights_regularizer=None)
        print("net1.shape:{}".format(net1.get_shape()))
        print("net2.shape:{}".format(net2.get_shape()))
        print("net3.shape:{}".format(net3.get_shape()))
    
        with tf.Session() as sess:
            sess.run(tf.global_variables_initializer())
    
    

    三、空洞卷积:增大感受野

        Dilated/Atrous conv 空洞卷积/多孔卷积,又名扩张卷积(dilated convolutions),向卷积层引入了一个称为 “扩张率(dilation rate)”的新参数,该参数定义了卷积核处理数据时各值的间距。该结构的目的是在不用pooling(pooling层会导致信息损失)且计算量相当的情况下,提供更大的感受野

        在空洞卷积中有个重要的参数叫rate,这个参数代表了空洞的大小。 要理解空洞概念和如何操作可以从两个角度去看。 

    1)从原图角度,所谓空洞就是在原图上做采样。采样的频率是根据rate参数来设置的,当rate为1时候,就是原图不丢失任何信息采样,此时卷积操作就是标准的卷积操作,当rate>1,比如2的时候,就是在原图上每隔一(rate-1)个像素采样,如图b,可以把红色的点想象成在原图上的采样点,然后将采样后的图像与kernel做卷积,这样做其实变相增大了感受野。 

    2)从kernel角度去看空洞的话就是扩大kernel的尺寸,在kernel中,相邻点之间插入rate-1个零,然后将扩大的kernel和原图做卷积 ,这样还是增大了感受野

    3)标准卷积为了提高感受野,可以通过池化pooling下采样,降低图像尺度的同时增大感受野,但pooling本身是不可学习的,也会丢失很多细节信息。而dilated conv空洞卷积,不需要pooling,也能有较大的感受野看到更多的信息。

    4)增大卷积核的大小也可以提高感受野,但这会增加计算量

    标准卷积: 

    空洞卷积 :

        在VGG网络中就证明了使用小卷积核叠加来取代大卷积核可以起到减少参数同时达到大卷积核同样大小感受野的功效。但是通过叠加小卷积核来扩大感受野只能线性增长,公式为(kernelSize−1)∗layers+1(kernelSize−1)∗layers+1,,也就是线性增长,而空洞卷积可以以指数级增长感受野。

        参考资料:https://blog.csdn.net/silence2015/article/details/79748729

    def dilated_conv2D_layer(inputs,num_outputs,kernel_size,activation_fn,rate,padding,scope,weights_regularizer):
        '''
        使用Tensorflow封装的空洞卷积层API:包含空洞卷积和激活函数,但不包含池化层
        :param inputs:
        :param num_outputs:
        :param kernel_size: 卷积核大小,一般是[1,1],[3,3],[5,5]
        :param activation_fn:激活函数
        :param rate:
        :param padding: SAME or VALID
        :param scope: scope name
        :param weights_regularizer:正则化,例如:weights_regularizer = slim.l2_regularizer(scale=0.01)
        :return:
        '''
        with  tf.variable_scope(name_or_scope=scope):
            in_channels = inputs.get_shape().as_list()[3]
            kernel=[kernel_size[0],kernel_size[1],in_channels,num_outputs]
            # filter_weight=tf.Variable(initial_value=tf.truncated_normal(shape,stddev=0.1))
            filter_weight = slim.variable(name='weights',
                                          shape=kernel,
                                          initializer=tf.truncated_normal_initializer(stddev=0.1),
                                          regularizer=weights_regularizer)
            bias = tf.Variable(tf.constant(0.01, shape=[num_outputs]))
            # inputs = tf.nn.conv2d(inputs,filter_weight, strides, padding=padding) + bias
            inputs = tf.nn.atrous_conv2d(inputs, filter_weight, rate=rate, padding=padding) + bias
            if not activation_fn is None:
                inputs = activation_fn(inputs)
            return inputs
    

     

    展开全文
  • ②可切换空洞卷积(Switchable Atrous Convolution)。递归特征金字塔代表宏观层面,采用的是自下而上的反馈连接方式,本质上是对backbone进行优化设计;可切换空洞卷积代表微观层面,以不同的空洞率对特征进行卷积,...
  • 空洞卷积、转置卷积

    2019-11-10 11:59:45
    Atrous Convolution 空洞卷积 空洞卷积(atrous convolutions)又名扩张卷积(dilated convolutions),向卷积层引入了一个称为“扩张率(dilation rate)"的新参数,该参数定义了卷积核处理数据时各值的间距。空洞...
  • 空洞卷积理解

    2019-09-23 17:24:25
    空洞卷积如下: 空洞卷积提出原因: 池化层在增大感受野的同时降低了分辨率,为了在进行upsample的时候得到高的分辨率就需要空洞卷积 空洞卷积如何实现: 空洞卷积是在原有特征图上根据空洞的rate,得出原有...
  • 空洞卷积笔记

    2020-06-03 19:56:19
    看了一些空洞卷积的博客,这个知识点得自己做做笔记。看起来像语义分割里用得更多,用空洞卷积代替下采样来增大感受野,同时保持分辨率。这么说的话空洞卷积在小目标检测里应该也有一定的作用,不过听说空洞超参的...
  • 空洞卷积与反卷积

    千次阅读 2018-09-23 12:09:09
    空洞卷积(dilated conv),也称扩张卷积。空洞卷积可以在kernel有效增大感受野的同时不增加模型参数或者计算量。在图像需要全局信息或者语音文本需要较长的sequence信息依赖的问题中,都能较好的应用空洞卷积。在...
  • 今天小编就为大家分享一篇PyTorch 普通卷积和空洞卷积实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 空洞卷积(多孔卷积)

    千次阅读 2018-10-07 22:01:09
    Dilated/Atrous conv 空洞卷积/多孔卷积 什么是空洞卷积? Dilated convolution/Atrous convolution 可以叫空洞卷积或者扩张卷积。 空洞卷积诞生于图像分割领域,图像输入到网络中经过CNN提取特征,再经过...
  • 深度学习之空洞卷积

    2018-03-09 13:46:35
    深度学习之空洞卷积原始出处论文,介绍了空洞卷积实现方法以及实现意义。
  • 吃透空洞卷积

    2020-12-04 20:03:00
    作者丨玖零猴@知乎来源丨https://zhuanlan.zhihu.com/p/113285797编辑丨极市平台一、空洞卷积的提出空洞卷积中文名也叫膨胀卷积或者扩张卷积,英文名也叫At...
  • 空洞卷积

    2019-08-30 10:50:39
    空洞卷积,扩张卷积,膨胀卷积,多孔卷积,带孔卷积,dilated convolution Dilation 卷积,也被称为:空洞卷积、膨胀卷积。 一、一般的卷积操作: 首先,可以通过动态图,理解正常卷积的过程: 如上图,...
  • 参考文章: 1.卷积、反卷积、空洞卷积动图
  • Dilated/Atrous conv 空洞卷积/多孔卷积 原文链接:https://blog.csdn.net/silence2015/article/details/79748729 DilatedDilated convolution/Atrousconvolution/Atrous convolutionconvolution可以叫空洞卷积...
  • 空洞卷积计算感受野

    2021-02-22 14:50:32
    空洞卷积感受野的计算: 空洞卷积感受野的大小分两种情况: (1)不带padding的空洞卷积: 若空洞卷积率为dilate rate 则感受野尺寸=(dilate rate-1)×(k-1) + k #k为卷积核大小; 不带padding的感受野其实就是添加...
  • 空洞卷积能够在不减小感受野的情况下降低空间特征的损失,可以获取long-ranged information。但是也有弊端:比如空间上的连续所能给出的信息可能因此而丢失(比如边缘之类的),同时对于小物体的分割未必有利。同时,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 788
精华内容 315
关键字:

空洞卷积