转置卷积(pytorch)

pytorch 转置卷积api

nn.ConvTranspose2d(in_channels, out_channels, kernel_size=3, stride=2, padding=1, dilation=1, output_padding=1)

作用:进行转置卷积,用于上采样

设原本图像大小为 i n ∗ i n in*in inin,图像的padding为1,经过一个为 k e r n e l kernel kernel_ s i z e size size为3,卷积的 d i l a t i o n dilation dilation为1的给定卷积核,得到一个特征图大小为 o u t ∗ o u t out*out outout,而这个转置卷积就是用于将当前 o u t ∗ o u t out*out outout的特征图上采样成 i n ∗ i n in*in inin p a d d i n g , s t r i n g , k e r n e l padding,string,kernel padding,string,kernel​_size,dilation 都是指原来的图像经过的卷积操作的参数,从而变成大小当前的特征图。out_padding用于防止stride大于1的时候1对多的现象。

什么是dilation?

卷积运算时,卷积核元素之间的距离,如果dilation不为1,卷积核的作用点更加分散,最后输出的特征图会更小,大小等于用**kernel_size+(dilation-1)*(kernel_size-1)**大小的卷积核得到的特征图

卷积多对一现象

假设现在有一个卷积核3*3,stride = 2;那么一个5x5的图,经过卷积得到的大小为2x2,一个6x6的图经过卷积也是2x2,那给定2x2的特征图,经过转置卷积要恢复到哪个size呢?

卷积输出的特征图计算公式为 o u t = i n + 2 ∗ p a d d i n g − k e r n e l s i z e s t r i d e + 1 out = \frac{in + 2*padding-kernelsize}{stride} + 1 out=stridein+2paddingkernelsize+1

这里的除法一般都是下取整,所以导致上面的问题。

现在逆卷积要做的是给定out和卷积核的参数,恢复in,那么将公式变换一下

i n = ( o u t − 1 ) ∗ s t r i d e − 2 ∗ p a d d i n g + k e r n e l s i z e in = (out - 1)*stride -2*padding + kernelsize in=(out1)stride2padding+kernelsize

但是为了防止上面的现象,多加了一个out_padding参数,可以自己指定恢复的大小,新的公式变成

i n = ( o u t − 1 ) ∗ s t r i d e − 2 ∗ p a d d i n g + k e r n e l s i z e + o u t p a d d i n g in = (out - 1)*stride -2*padding + kernelsize + outpadding in=(out1)stride2padding+kernelsize+outpadding

因此现在无论原来是否发生下整除现象,我们都可以指定恢复原来的大小。

就上述的例子,如果原来是5x5,那么我们令out_padding为0(原来是刚好整除的),如果原来是6x6,那么我们令out_padding为1,就代入公式就得到6了。这里的out_padding最多是 s t r i d e − 1 stride - 1 stride1,

因为进行下取整最多舍去stride-1,因此有了这个参数一定可以恢复成原来指定的大小。

一般为了保持卷积same模式( i n = s t r i d e ∗ o u t in = stride*out in=strideout),我们令padding = (kernelsize-1)/2,out_padding = kersize - 1,带入式子就可以得到 i n = s t r i d e ∗ o u t in = stride*out in=strideout

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值