精华内容
下载资源
问答
  • 转置卷积、又称反卷积其实是卷积的逆过程。卷积的过程通常会减小特征图的的大小,而转置卷积往往增大特征图的大小,一直以来对转置卷积的过程都不是很理解,最近认真学习了一下,在此分享。 卷积 卷积操作,输入是...

    转置卷积、又称反卷积其实是卷积的逆过程。卷积的过程通常会减小特征图的的大小,而转置卷积往往增大特征图的大小,一直以来对转置卷积的过程都不是很理解,最近认真学习了一下,在此分享。

    卷积

    卷积操作,输入是一个特征图i,参数padding(p), stride(s),kernel_size(k),输出是卷积后得到的特征图o,输出的特征图大小

    o=\left \lfloor \frac{i+2p-k}{s} \right \rfloor +1

    转置卷积

    转置卷积是卷积的逆过程。在做的转置卷积的时候,我们同样会给转置卷积几个参数,如输入特征图i,p,k,s,分别对应padding,kernel_size,stride。

    第一如何理解转置卷积是卷积的逆过程?假设卷积的输入为x,输出为y,而转置卷积作为卷积的逆过程,也就是说转置卷积的输入为y,输出为x。即

    x \overset{Conv}{\rightarrow}y,y\overset{transConv}{\rightarrow}x

    因此,给定转置卷积参数和输出a,我们相当于找到完成这样的过程

    a \overset{transConv}{\rightarrow}b,同时b \overset{Conv}{\rightarrow}a

    故我们知道卷积的输入大小和输出大小的关系,因此我们可以计算出b的大小:

    a=\left \lfloor \frac{b+2p-k}{s} \right \rfloor +1\,\,\,\,\,\,\,\,\,\,\,\, (1)

    假设a=2,s=1,k=1,p=0,此时

    2=\left \lfloor \frac{b+2*0-1}{1} \right \rfloor +1\Rightarrow b=3

    因此可以推断出转置卷积的输出的大小是3,因此过程就是对大小为2的进行转置卷积,得到大小为3的特征图。因此转置卷积是逆卷积这句话体现在转置卷积核卷积是互逆的。

    第二、转置卷积也是卷积。当s=1时,根据转置卷积自身参数的信息计算出一组参数p^{'},s^{'},k^{'},利用这组参数对转置卷积的输入进行卷积,得到输出。

    k^{'}=k,s^{'}=s,p^{'}=k-p-1

    然后以这组参数为卷积的参数,对转置卷积的输入进行卷积得到转置卷积的输出。

    第三、转置卷积有时候也叫分数步长的卷积。当转置卷积的s>1时,对应的卷积的s<1,因此也称为分数步长的卷积。

    s>1时,根据转置卷积自身参数的信息计算出一组参数p^{'},s^{'},k^{'}

    k^{'}=k,s^{'}=1,p^{'}=k-p-1

    此时不能直接利用这组参数对转置卷积的输入进行卷积,而是要对输入进行处理,主要分为两步:

    1. 在输入的每两个像素之间增加s-1个0
    2. 在输入的底边和右边加入(c+2*p-k)mod\,\, s,其中c就是根据第一步中计算出来的转置卷积输出的大小。

    假设转置卷积的输入i=3,k=3,s=2,p=1,计算转置卷积的输出:

    3=\left \lfloor \frac{c+2*1-3}{2} \right \rfloor +1\Rightarrow c=5,6

    此时c有两种情况,当c=5时,(c+2*p-k)mod\,\, s=(5+2*1-3)mod \,\, 2=0,s-1=1,因此对3 \times 3的输入特诊图进行0填充,按第一步填充得到:

    第二步中(c+2*p-k)mod\,\, s=(5+2*1-3)mod \,\, 2=0,故无需填充。

    安照k^{'}=k,s^{'}=1,p^{'}=k-p-1,计算出每个参数得到:k^{'}=3,s^{'}=1,p^{'}=3-1-1=1

    此时p^{'}=1,再对特征图进行填充:

    然后按照k^{'}=3,s^{'}=1进行卷积得到结果

    当c=6时,(c+2*p-k)mod\,\, s=(6+2*1-3)mod \,\, 2=1,s-1=1,因此对3 \times 3的输入特诊图进行0填充,按第一步填充得到:

    第二步中(c+2*p-k)mod\,\, s=(6+2*1-3)mod \,\, 2=1,因此再在特诊图下面和右边填充一层

    同样计算出参数k^{'}=3,s^{'}=1,p^{'}=3-1-1=1,对特征图进行填充:

    然后再卷积得到输出:

    Pytorch中,

    import torch.nn as nn
    
    nn.ConvTranspose2d(in_channels=, out_channels=, kernel_size=, stride=, padding=, output_padding=)

    PyTorch给出的官方文档: 

    根据输入输出大小的计算公式,output_padding参数的设置就可以直接影响输出的大小,而上述部分计算转置卷积的输出的大小的时候,因为有向下取整操作,所以卷积输出的大小是不确定的。因此output_padding的设置正好可以除去这种不确定性。

    比如在上面的例子中设置output_padding=0,对应第一种情况c=5,下面用代码验证,先设置output_padding=0

    import torch.nn as nn
    import torch
    
    class TC(nn.Module):
        def __init__(self):
            super(TC, self).__init__()
            self.tc = nn.ConvTranspose2d(in_channels=3, out_channels=3, 
    kernel_size=3, stride=2, padding=1,output_padding=0)
    
        def forward(self, x):
            return self.tc(x)
    
    
    x = torch.zeros((1, 3, 3, 3))
    print(x.shape)
    tc = TC()
    print(tc(x).shape)

    输出:

    修改output_padding=1,此时输出:

    当然,设置的output_padding值不可以大于等于s(stride),因为除了每个像素之间的填充以外,在特征图的下面和右边的填充是根据(c+2*p-k)mod\,\, s来计算的,是对s取余,output_padding值也正是设置的这一项,所以output_padding值不可以超过s。

    参考文献https://github.com/vdumoulin/conv_arithmetic

    展开全文
  • 反卷积,以pytorch为例

    2019-07-12 12:33:29
    反卷积原理 https://www.jianshu.com/p/fb50fe44a1a3 反卷积大小计算 https://www.jianshu.com/p/01577e86e506 对于stride=1的情况比较简单,反卷积输出大小是固定的。 对于stride>1的情形,反卷积输出...

    反卷积原理

    https://www.jianshu.com/p/fb50fe44a1a3

    反卷积大小计算

    https://www.jianshu.com/p/01577e86e506

     

    对于stride=1的情况比较简单,反卷积输出大小是固定的。

     

    对于stride>1的情形,反卷积输出大小有多种可能,通过output padding参数确定。

    stride>1时,反卷积的各个输入元素之间先填充(stride-1)个零,然后做dilation*(k-1) -p的padding,此时使用步长为1做卷积则得出反卷积的结果。其中dilation指的是空洞卷积,普通卷积的dilation rate为1.

     

    总结:根本没有反卷积这种东西,有的只是转置卷积罢了。 反卷积的输入元素之间先填上(stride-1)个零,再做dilation*(k-1)-padding的零填充,然后使用步长为1做卷积,就得到了反卷积的输出。

     

     

    卷积,反卷积动图

    https://github.com/vdumoulin/conv_arithmetic

    展开全文
  • 区别在于output_padding, pytorch反卷积详细介绍 https://blog.csdn.net/qq_41368247/article/details/86626446

    在这里插入图片描述在这里插入图片描述区别在于output_padding,

    pytorch反卷积详细介绍
    https://blog.csdn.net/qq_41368247/article/details/86626446

    展开全文
  • pytorch 反卷积

    2019-05-30 11:35:35
    1. condtranspose2d ...http://www.mamicode.com/info-detail-2294256.html 介绍了pytorch文档里的反卷积过程 3.  https://www.cnblogs.com/kk17/p/10111768.html 介绍了验证方法    

    1. condtranspose2d

    import torch
    from torch import nn
    from torch.nn import init
    from torch.autograd import Variable
    import torchvision

    dconv = nn.ConvTranspose2d(in_channels=1, out_channels= 1,  kernel_size=4, stride=1, padding=0,output_padding=0, bias= False)
    init.constant(dconv.weight, 1)
    print(dconv.weight)
    #
    input1 = Variable(torch.ones(1, 1, 3, 3))
    print(input1)
    print(dconv(input1))

    这里的当p=0时,p=1时会补0,p=2不补

    2. pixel shuffle

    先通道扩张,再reshape

    参考链接:1. https://blog.csdn.net/g11d111/article/details/82855946 介绍了子像素卷积

    2. http://www.mamicode.com/info-detail-2294256.html 介绍了pytorch文档里的反卷积过程

    3. https://www.cnblogs.com/kk17/p/10111768.html 介绍了验证方法

     

     

    展开全文
  • 反卷积原理 + pytorch反卷积层参数output_padding

    万次阅读 多人点赞 2019-01-24 14:35:22
    一般我们会认为2维卷积的计算分为了以下3类: 1.full 2.same 3. valid 参考:https://cn.mathworks.com/help/matlab/ref/conv2.html? same和valid相信各位同学都不陌生。Valid指不进行padding操作,而same则是...
  • 今天小编就为大家分享一篇PyTorch反卷积的用法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 目录PyTorch中的反卷积(Transposed Convolution)Output计算公式反卷积的stride反卷积的dilation反卷积的padding PyTorch中的反卷积(Transposed Convolution) 反卷积是计算机视觉领域中的一种上采样的方法,除了...
  • pytorch演示卷积和反卷积运算

    万次阅读 2018-05-13 10:24:09
    (1)卷积运算 (1)反卷积运算(转置卷积) 下载ppt https://pan.baidu.com/s/1UdBmFD6J5WOzfXF4pg4acw
  • [PyTorch]PyTorch反卷积的用法

    千次阅读 2018-12-12 23:56:00
    [PyTorch]PyTorch反卷积的用法 文章来源:https://www.jianshu.com/p/01577e86e506 pytorch中的 2D 卷积层 和 2D 反卷积层 函数分别如下: class torch.nn.Conv2d(in_channels, out_channels, ...
  • PyTorch 反卷积运算(一)

    2021-01-05 01:30:45
    反卷积是一种特殊的正向...下面展示一些实例, 使用 PyTorch 计算反卷积 示例-1: 输入输出通道数都是1, 步长也为1 输入数据 1*1*3*3(Batch 和 Channel 均为 1) In [1]: import torch In [2]: from torch import nn In
  • torch.nn.Conv2d def __init__(self, in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode='zeros'): Parameters in_channels (int) – Number of ...
  • 以下是pytorch官网上的API 第一种情况 如上图所示,输入图片为4*4,卷积核为3*3,步长为1,零填充。 代码表示: 第二种情况 如上图所示,输入图片为5*5,卷积核为4*4,步长为1,填充为2。 代码表示...
  • 大家好,新手入门语义分割,在利用pytorch实现Linknet的时候,在编码层最后输出的尺寸为6×10(上一层为12× 20),文中规定反卷积核的尺寸为k为3× 3,步长s = 2,利用反卷积求输出尺寸的大小为N(out) = (N(in...
  • Pytorch卷积和反卷积的计算公式。

    千次阅读 2019-09-06 18:54:49
    1.torch.nn.Conv2d class torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True) 如果输入大小为W * W,那么输出大小:(W− kernel_size+ 2*padding)...
  • 转置卷积又被称为反卷积和逆卷积,但是转置卷积才是最正规和主流的叫法,在主流的深度学习框架中,转置卷积的函数名都是conv_transpose 因为转置卷积的运算过程很容易让人误解,举一个例子,一个4*4的输入经过3*3的...
  • PyTorch 反卷积运算(二)

    2021-02-19 15:53:43
    如果反卷积操作中步长大于1, 那么不仅需要在四周补零, 每行元素和每列元素之间均需要补零 示例-2: 步长为 2 输入数据 1*1*3*3(Batch 和 Channel 均为 1) In [1]: import torch In [2]: torch.manual_seed(5); In ...
  • PyTorch反卷积的用法

    千次阅读 2019-05-29 22:03:49
    pytorch中的 2D 卷积层 和 2D 卷积层 函数分别如下: class torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, groups=1, bias=True) class torch.nn.ConvTranspose2d(in_channels,...
  • Pytorch中的卷积与反卷积详解(conv2d和convTranspose2d)

    千次阅读 多人点赞 2020-04-26 09:28:38
    Pytorch中的卷积与反卷积详解(conv2d和convTranspose2d) 卷积和反卷积是图片计算在深度学习中常用的上采样和下采样操作。相比其他采样操作,卷积计算不仅可以保存参数的梯度传递(适用用BP),还可以改变图片的通道以更...
  • 转载自: https://zhuanlan.zhihu.com/p/39240159 pytorch反卷积的函数为: class torch.nn.ConvTranspose2d(in_channels, out_channels, kernel_size, stride=1, padding=0, ...
  • pytorch框架下的反卷积: nn.ConvTranspose2d( in_channels, out_channels, kernel_size, stride=1, padding=0, output_padding=0, groups=1,
  • channels(int) – 卷积产生的通道数 kerner_size(int or tuple) - 卷积核的大小 stride(int or tuple,optional) - 卷积步长,即要将输入扩大的倍数。 padding(int or tuple, optional) - 输入的每一条边补充0的层数...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 194
精华内容 77
关键字:

反卷积pytorch