精华内容
下载资源
问答
  • 上采样/反卷积/上池化的区别 上采样是指将图像上采样到更高分辨率的任何技术。 最简单的方法是使用重新采样和插值。即取原始图像输入,将其重新缩放到所需的大小,然后使用插值方法(如双线性插值)计算每个点处的...

    上采样/反卷积/上池化的区别

    图(a)表示UnPooling的过程,特点是在Maxpooling的时候保留最大值的位置信息,之后在unPooling阶段使用该信息扩充Feature Map,除最大值位置以外,其余补0。与之相对的是图(b),两者的区别在于UnSampling阶段没有使用MaxPooling时的位置信息,而是直接将内容复制来扩充Feature Map。从图中即可看到两者结果的不同。图(c)为反卷积的过程,反卷积是卷积的逆过程,又称作转置卷积。最大的区别在于反卷积过程是有参数要进行学习的(类似卷积过程),理论是反卷积可以实现UnPooling和unSampling,只要卷积核的参数设置的合理

     

    展开全文
  • 反卷积、上采样、上池化 反卷积、上采样、上池化图示理解,如上所示。 目前使用得最多的deconvolution有2种。 方法1:full卷积, 完整的卷积可以使得原来的定义域变大 上图中蓝色为原图像,白色为对应卷积所...

    反卷积、上采样、上池化

    反卷积、上采样、上池化图示理解,如上所示。

    目前使用得最多的deconvolution有2种。 
    方法1:full卷积, 完整的卷积可以使得原来的定义域变大

     上图中蓝色为原图像,白色为对应卷积所增加的padding,通常全部为0,绿色是卷积后图片。卷积的滑动是从卷积核右下角与图片左上角重叠开始进行卷积,滑动步长为1,卷积核的中心元素对应卷积后图像的像素点。可以看到卷积后的图像是4X4,比原图2X2大了,我们还记1维卷积大小是n1+n2-1,这里原图是2X2,卷积核3X3,卷积后结果是4X4,与一维完全对应起来了。其实这才是完整的卷积计算,其他比它小的卷积结果都是省去了部分像素的卷积。

    方法2:记录pooling index,然后扩大空间,再用卷积填充

    假设原图是3X3,首先使用上采样让图像变成7X7,可以看到图像多了很多空白的像素点。使用一个3X3的卷积核对图像进行滑动步长为1的valid卷积,得到一个5X5的图像,我们知道的是使用上采样扩大图片,使用反卷积填充图像内容,使得图像内容变得丰富,这也是CNN输出end to end结果的一种方法


    图像的deconvolution过程如下,


    输入:2x2, 卷积核:4x4, 滑动步长:3, 输出:7x7
    即输入为2x2的图片经过4x4的卷积核进行步长为3的反卷积的过程
    1.输入图片每个像素进行一次full卷积,根据full卷积大小计算可以知道每个像素的卷积后大小为 1+4-1=4, 即4x4大小的特征图,输入有4个像素所以4个4x4的特征图
    2.将4个特征图进行步长为3的fusion(即相加); 例如红色的特征图仍然是在原来输入位置(左上角),绿色还是在原来的位置(右上角),步长为3是指每隔3个像素进行fusion,重叠部分进行相加,即输出的第1行第4列是由红色特阵图的第一行第四列与绿色特征图的第一行第一列相加得到,其他如此类推。

    可以看出反卷积的大小是由卷积核大小与滑动步长决定, in是输入大小, k是卷积核大小, s是滑动步长, out是输出大小
    得到 out = (in - 1) * s + k
    上图过程就是, (2 - 1) * 3 + 4 = 7

     

     

    转自:

    https://blog.csdn.net/A_a_ron/article/details/79181108

    https://blog.csdn.net/qq_38906523/article/details/80520950

    展开全文
  • 上采样,反卷积,上池化概念区别 原创 ...

    通过卷积和池化等技术可以将图像进行降维,因此,一些研究人员也想办法恢复原分辨率大小的图像,特别是在语义分割领域应用很成熟。通过对一些资料的学习,简单的整理下三种恢复方法,并进行对比。

    1、Upsampling(上采样)

    在FCN、U-net等网络结构中,涉及到了上采样。上采样概念:上采样指的是任何可以让图像变成更高分辨率的技术。最简单的方式是重采样和插值:将输入图片进行rescale到一个想要的尺寸,而且计算每个点的像素点,使用如双线性插值等插值方法对其余点进行插值来完成上采样过程。

    上采样

    2、上池化

    Unpooling是在CNN中常用的来表示max pooling的逆操作。这是论文《Visualizing and Understanding Convolutional Networks》中产生的思想,下图示意:

    上池化

    对比上面两个示意图,可以发现区别:

    • 两者的区别在于UnSampling阶段没有使用MaxPooling时的位置信息,而是直接将内容复制来扩充Feature Map。第一幅图中右边4*4矩阵,用了四种颜色的正方形框分割为四个区域,每一个区域内的内容是直接复制上采样前的对应信息。
    • UnPooling的过程,特点是在Maxpooling的时候保留最大值的位置信息,之后在unPooling阶段使用该信息扩充Feature Map,除最大值位置以外,其余补0。从图中即可看到两者结果的不同。

    3、反卷积

    在介绍反卷积之前,我们需要深入了解一下卷积,一个简单的卷积层运算,卷积参数为(i=4,k=3,s=1,p=0)示意图如下:

    对于上述卷积运算,我们把上图所示的3×3卷积核展成一个如下所示的[4,16]的稀疏矩阵C,如下:

     我们再把4×4的输入特征展成[16,1]的矩阵 X,那么 Y=CX则是一个[4,1]的输出特征矩阵,把它重新排列2×2的输出特征就得到最终的结果,从上述分析可以看出卷积层的计算其实是可以转化成矩阵相乘的。值得注意的是,在一些深度学习网络的开源框架中并不是通过这种这个转换方法来计算卷积的,因为这个转换会存在很多无用的0乘操作。

    通过上述的分析,我们已经知道卷积层的前向操作可以表示为和矩阵C相乘,很容易得到卷积层的反向传播就是和C的转置相乘。

    我们已经说过反卷积又被称为Transposed(转置) Convolution,我们可以看出其实卷积层的前向传播过程就是反卷积层的反向传播过程,卷积层的反向传播过程就是反卷积层的前向传播过程。因为卷积层的前向反向计算分别为乘 C和 C^{T},而反卷积层的前向反向计算分别为乘 C^{T}(C^{T})^{T},所以它们的前向传播和反向传播刚好交换过来。

    下图表示一个和上图卷积计算对应的反卷积操作,其中他们的输入输出关系正好相反。如果不考虑通道以卷积运算的反向运算来计算反卷积运算的话,还可以通过离散卷积的方法来求反卷积。通过详细参考资料[1]。

    4、一些反卷积的论文截图

    上图为反卷积和全卷积网络为核心的语义分割网络。

     图(a)是输入层;图b、d、f、h、j是不同featrue map大小的反卷积的结果;图c、e、g、i是不同featrue map大小的UnPooling结果。

    参考

    [1] https://buptldy.github.io/2016/10/29/2016-10-29-deconv/

    [2]论文:Learning Deconvolution Network for Semantic Segmentation

    展开全文
  • 对于Unet网络中的上采样,主要有三种实现形式:上采用、反卷积、上池化,通常情况应用的是反卷积。 1、Upsampling(上采样) 在FCN、U-net等网络结构中,涉及到了上采样: 上采样指的是:任何可以让 图像变成更高...

    对于Unet网络中的上采样,主要有三种实现形式:上采用、反卷积、上池化,通常情况应用的是反卷积。

    1、Upsampling(上采样)

    在FCN、U-net等网络结构中,涉及到了上采样:

    上采样指的是: 任何可以让    图像变成更高分辨率    的技术(上池化、反卷积、插值等)

    可以是 重采样、插值:将输入图片进行 rescale 到一个想要的尺寸,而且计算每个点的像素点,使用如双线性插值,等插值方法对其余点进行插值来完成上采样过程。
     
     

    2、上池化

    Unpooling是在CNN中常用的来表示max pooling的逆操作。这是论文《Visualizing and Understanding Convolutional Networks》中产生的思想,如下图所示:

     

    两者区别:

    Unsampling 阶段没有使用Max Pooling的位置信息,复制最大值扩充Feature Map

    UnPooling 阶段是在Max pooling的时候保留最大值的位置信息,用 0 扩充Feature Map

     

    3、反卷积

    卷积:                                                                                   反卷积:

                                                                                   

     

    卷积、反卷积的输入输出关系正好相反

    如果不考虑通道以卷积运算的反向运算来计算反卷积运算的话,还可以通过离散卷积的方法来求反卷积。

    反卷积 又被称为Transposed(转置) Convolution

    卷积层的前向传播过程就是反卷积层的反向传播过程,

    卷积层的反向传播过程就是反卷积层的前向传播过程。

    因为卷积层的前向反向计算分别为乘 C和 CT,而反卷积层的前向反向计算分别为乘 CT和(CT)T ,所以它们的前向传播和反向传播刚好交换过来。

    1. 使用反卷积可以进行上采样

    2. 反卷积具有可供学习的参数,不需要利用插值方法

     
    最大的区别在于反卷积过程是有参数要进行学习的(类似卷积过程),理论上反卷积可以实现UnPooling和unSampling
    (狭义的,见参考文献https://blog.csdn.net/A_a_ron/article/details/79181108),只要卷积核的参数设置的合理。
    广义的上采样:由于上采样是指将图像上采样到更高分辨率的任何技术,因此我们可以讲:通过反卷积、UnPooling进行上采样
     
     

    反卷积:

    仅仅是将卷积变换过程中的步骤反向变换一次而已,通过将卷积核转置,与卷积后的结果再做一遍卷积,所以它还有一个名字叫做转置卷积。

    代码示例:

    '''
    一 反卷积实例
    '''
    import tensorflow as tf
    import numpy as np
    
    #模拟数据
    img = tf.Variable(tf.constant(1.0,shape=[1,4,4,1]))
    
    kernel =tf.Variable(tf.constant([1.0,0,-1,-2],shape=[2,2,1,1]))
    
    #分别进行VALID和SAME操作
    conv =  tf.nn.conv2d(img,kernel,strides=[1,2,2,1],padding='VALID')
    cons =  tf.nn.conv2d(img,kernel,strides=[1,2,2,1],padding='SAME')
    
    
    #VALID填充计算方式 (n - f + 1)/s向上取整
    print(conv.shape)
    #SAME填充计算方式 n/s向上取整
    print(cons.shape)
    
    #在进行反卷积操作
    contv = tf.nn.conv2d_transpose(conv,kernel,[1,4,4,1],strides=[1,2,2,1],padding='VALID')
    conts = tf.nn.conv2d_transpose(cons,kernel,[1,4,4,1],strides=[1,2,2,1],padding='SAME')
    
    
    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())
        
        print('kernel:\n',sess.run(kernel))
        print('conv:\n',sess.run(conv))
        print('cons:\n',sess.run(cons))
        print('contv:\n',sess.run(contv))
        print('conts:\n',sess.run(conts))

    反池化(上池化):

    属于池化的逆操作,是无法通过池化的结果还原出全部的原始数据,因此池化的过程只保留主要信息,舍去部分信息。如果想从池化后的这些主要信息恢复出全部信息,由于存在着信息缺失,这时只能通过补位来实现最大程度的信息完整。

    代码示例:

    '''
    二 反池化操作
    '''
    
    
    def max_pool_with_argmax(net,stride):
        '''
        重定义一个最大池化函数,返回最大池化结果以及每个最大值的位置(是个索引,形状和池化结果一致)
        
        args:
            net:输入数据 形状为[batch,in_height,in_width,in_channels]
            stride:步长,是一个int32类型,注意在最大池化操作中我们设置窗口大小和步长大小是一样的
        '''
        #使用mask保存每个最大值的位置 这个函数只支持GPU操作
        _, mask = tf.nn.max_pool_with_argmax( net,ksize=[1, stride, stride, 1], strides=[1, stride, stride, 1],padding='SAME')
        #将反向传播的mask梯度计算停止
        mask = tf.stop_gradient(mask)
        #计算最大池化操作
        net = tf.nn.max_pool(net, ksize=[1, stride, stride, 1],strides=[1, stride, stride, 1], padding='SAME')
        #将池化结果和mask返回
        return net,mask
    
    def un_max_pool(net,mask,stride):
        '''
        定义一个反最大池化的函数,找到mask最大的索引,将max的值填到指定位置
        args:
            net:最大池化后的输出,形状为[batch, height, width, in_channels]
            mask:位置索引组数组,形状和net一样
            stride:步长,是一个int32类型,这里就是max_pool_with_argmax传入的stride参数
        '''
        ksize = [1, stride, stride, 1]
        input_shape = net.get_shape().as_list()
        #  calculation new shape
        output_shape = (input_shape[0], input_shape[1] * ksize[1], input_shape[2] * ksize[2], input_shape[3])
        # calculation indices for batch, height, width and feature maps
        one_like_mask = tf.ones_like(mask)
        batch_range = tf.reshape(tf.range(output_shape[0], dtype=tf.int64), shape=[input_shape[0], 1, 1, 1])
        b = one_like_mask * batch_range
        y = mask // (output_shape[2] * output_shape[3])
        x = mask % (output_shape[2] * output_shape[3]) // output_shape[3]
        feature_range = tf.range(output_shape[3], dtype=tf.int64)
        f = one_like_mask * feature_range
        # transpose indices & reshape update values to one dimension
        updates_size = tf.size(net)
        indices = tf.transpose(tf.reshape(tf.stack([b, y, x, f]), [4, updates_size]))
        values = tf.reshape(net, [updates_size])
        ret = tf.scatter_nd(indices, values, output_shape)
        return ret
    
    
    #定义一个形状为4x4x2的张量
    img = tf.constant([
                [[0.0,4.0],[0.0,4.0],[0.0,4.0],[0.0,4.0]],
                [[1.0,5.0],[1.0,5.0],[1.0,5.0],[1.0,5.0]],
                [[2.0,6.0],[2.0,6.0],[2.0,6.0],[2.0,6.0]],
                [[3.0,7.0],[3.0,7.0],[3.0,7.0],[3.0,7.0]],
            ])
        
    img = tf.reshape(img,[1,4,4,2])
    #最大池化操作
    pooling1 = tf.nn.max_pool(img,ksize=[1,2,2,1],strides=[1,2,2,1],padding='SAME')
    #带有最大值位置的最大池化操作
    pooling2,mask = max_pool_with_argmax(img,2)
    #反最大池化
    img2 = un_max_pool(pooling2,mask,2)
    with tf.Session() as sess:
        print('image:')
        image = sess.run(img)
        print(image)
        
        #默认的最大池化输出
        result = sess.run(pooling1)
        print('max_pool:\n',result)
        
        #带有最大值位置的最大池化输出
        result,mask2 = sess.run([pooling2,mask])
        print('max_pool_with_argmax:\n',result,mask2)
        
        #反最大池化输出
        result = sess.run(img2)
        print('un_max_pool',result)

     

    展开全文
  • 上采样,上池化,反卷积 详解

    千次阅读 2019-06-13 11:11:06
    1、Upsampling(上采样) ...上采样概念:上采样指的是任何可以让图像变成更高分辨率的技术。最简单的方式是重采样和插值:将输入图片进行rescale到一...2、上池化 Unpooling是在CNN中常用的来表示max pooling的逆操作...
  • python进阶教程机器学习深度学习长按二维码关注进入正文上采样、反卷积、上池化概念区别通过卷积和池化等技术可以将图像进行降维,因此,一些研究人员也想办法恢复原分辨率大...
  • 这些操作有上采样(Upsampling)、上池化(Unpooling)、双线性插值、反卷积。下面对这四个进行梳理。 一、上采样(Upsampling) 上采样概念:上采样指的是任何可以让图像变成更高分辨率的技术。最简单的方式是...
  • 如图所示,以maxpooling为例,上池化在池化过程中会记录最大值所在下标,然后利用特征图填充最大值所在下标,其他位置填0,特征图一般为maxpooling后得到的最大值矩阵。 unsampling 上采样并不像上池化那样记录最大值...
  • 双线性插值(Bi-Linear interpolation) 双立方插值(Bi-Cubic interpolation) 上池化: 在Maxpooling的时候保留最大值的位置信息,之后在unPooling阶段使用该信息扩充Feature Map,除最大值位置以外,其余补0 转置卷积...
  • 2、上池化 Unpooling是在CNN中常用的来表示max pooling的逆操作。这是论文《Visualizing and Understanding Convolutional Networks》中产生的思想,下图示意: 对比上面两个示意图,可以发现区别: ...
  • 文章目录卷积层定义特点池化层特点上采样反卷积/转置卷积 卷积层 定义 首先需要了解图像是个什么东西? 通道 常用于表示图像的某种组成。一个标准数字相机拍摄的图像会有三通道 - 红、绿和蓝;你可以把它们看作是...
  • 上池化—Unpooling 参考 附录1:full模式的卷积 2. 线性插值 参考:https://zhuanlan.zhihu.com/p/110754637 线性插值用的比较多的主要有三种:最近邻插值算法、双线性插值、双三次插值(BiCubic),当然还有各种其...
  • 2. 上池化(Unpooling) 3. 上采样(Upsampling) 利用 CNN 做有关图像的任务时,肯定会遇到 需要从低分辨率图像恢复到到高分辨率图像 的问题。解决方法目前无非就是 1)插值 , 2)反卷积 一般 上采样 ...
  • FCN于反卷积(Deconvolution)、上采样(UpSampling) https://blog.csdn.net/nijiayan123/article/details/79416764 反卷积(Deconvolution)、上采样(UNSampling)与上池化(UnPooling) ...
  • 本文为转载文章,原文链接
  • 原文链接见下:https://www.quora.com/What-is-the-difference-between-Deconvolution-Upsampling-Unpooling-and-Convolutional-Sparse-Coding Question: Deconvolution networks use deconvolution layers to ...
  • http://blog.csdn.net/u012949263/article/details/54379996 提供了... Question: Deconvolution networks use deconvolution layers to infer sparse feature maps and filters (this is the same as convolut
  • 上采样(UnSampling):即输入特征图,将其缩放到所需大小(比如2*2的宽高--->4*4的宽高),其常用方法是插值方法(如最邻近插值、双线性插值和三次插值),其中,最邻近插值效果最差,放大后的图像有很... 上池...
  • 目的:探讨鞍上池在中国数字可视人体(Chinese visible human,CVH)与CT、MRI上的横断面解剖形态学表现。方法:选择做64层螺旋CT和MRI头部检查的健康志愿者各60例,获得5mm层厚横断面图像。从第2例中国数字可视人体...
  •  编码器-解码器结构:池化-上池化实现    编码器采用最大池化层逐渐缩小输入数据的空间维度,解码器采用上池化逐步恢复目标细节和相应的空间维度。上池化的实现主要在于池化时记住输出值的位置,在上池化时再...
  • 图像上采样和反卷积

    2019-12-27 15:46:48
    在CNN上下文中,上池化通常指代最大池化的逆过程。在CNN中,最大池化操作是不可逆的,但是我们可以通过使用一组转换变量记录每个池化区域内最大值的位置来获得一个近似的逆操作结果。在反卷积(网络)中,上池化操作...
  • Upsampling, Uppooling, Transpose Convolution(上采样,上池化,转置卷积) Whitening and Coloring Transformations(白化与上色) Wavelet Transforms(小波变换) 若是熟悉这几块内容的童鞋可以直接跳...
  • 写在前面的话 最近在学习图像课,我会把可能用到的看到挺好的知识分享出来。...总结:空洞卷积似乎是可以代替反卷积(上池化)来扩大特征图大小而且效果更佳,我觉得是一个处理小文本或者小物体的好方法。 ...
  • 常见的上采样方法有双线性插值、转置卷积、上采样(unsampling)、上池化(unpooling)和亚像素卷积(sub-pixel convolution,PixelShuffle)。下面对其进行简单介绍。 参考文献 参考文章:上采样、上池
  • 反卷积、上采样、上池化、子像素卷积的联系与区别 https://blog.csdn.net/bbbeoy/article/details/81085652 Sub-pixel-convolutional 详解 https://blog.csdn.net/xys430381_...
  • FCRN

    2018-12-28 22:12:15
    上采样 下采样 https://blog.csdn.net/weiweiliulu/article/details/38706191 池化、反池化 ... 反卷积(Deconvolution)上采样(Upsampling)上池化(Unpooling)的区别 https://blog....
  • 上采样之双线性插值法

    千次阅读 多人点赞 2019-08-19 11:37:45
    上采样之双线性插值法上采样的定义上采样的类型:一、双线性插值:二、转置卷积 :三、上采样(unsampling)四、上池化(unpooling) 上采样的定义 **上采样实际上是一个统称 **。在下采样的过程中,我们把一张图片...
  • 深度学习知识点

    2018-02-08 17:25:13
    反卷积(Deconvolution)上采样(Upsampling)上池化(Unpooling)的区别 一文了解各种卷积结构原理 3、进一步了解反卷积 参考 反卷积跟1维信号处理的反卷积计算是很不一样的,FCN作者称为backwards convolu...
  • FCN会在最后用反卷积(上池化)的方法将特征图恢复到原来大小,这样有两个好处,一、每个像素点代表原来的一个像素,可以实现予以分割对所有像素点分类的要求,二、经过多层卷积特征很深,但也有缺点就是上采样(反...

空空如也

空空如也

1 2
收藏数 33
精华内容 13
关键字:

上池化