Pytorch: conv2d、空洞卷积、maxpool2d、 ConvTranspose2d的输出特征图计算方式

本文详细介绍了PyTorch中卷积层(包括常规conv2d与空洞卷积)、maxpool2d、以及上采样ConvTranspose2d的操作原理和实例,展示了它们如何影响输入输出特征图尺寸。特别关注了padding、dilation和stride参数的作用。
摘要由CSDN通过智能技术生成

1、conv2d

nn.Conv2d(in_dim, out_dim, kernel_size=3, stride=1, padding=1)

输入为(h1,w1),输出为(h2,w2),h2的计算如下,w2同理:

h2 = \frac{h1-kernelsize+2*padding}{stride}+1

pytorch中如果是3*3的卷积,且步长为1,此时padding设置为1,那么输出特征图大小和输入特征图大小相同。

2、空洞卷积——conv2d

nn.Conv2d(in_dim, out_dim, kernel_size=3, stride=1, padding=2, dilation=2)

与普通卷积的函数相同,只不过多了一个参数dilation需要设置,dilation设置空洞率。

假设输入为(h1,w1),输出为(h2,w2)

先计算感受野

F=2*(dilation-1)*(kernelsize-1)+kernelsize

在计算输出h2

h2=\frac{h1-F+2*padding}{stride}+1

pytorch中如果使用3*3的空洞卷积,且步长为1,此时设置padding=dilation,那么输出特征图与输入特征图大小相同。

3、maxpool2d

nn.MaxPool2d(kernel_size, stride=None, padding=0, dilation=1, return_indices=False, ceil_mode=False)

输入为(h1,w1),输出为(h2,w2),h2的计算如下,w2同理:

h2=\frac{h1+2*padding-dilation*(kernelsize-1)-1}{s}+1

pytorch中如果使用2*2的最大池化,步长为2,padding为0,dilation=1, 那么输出特征图为输入特征图的一半。注意如果步长为1,输出特征图会减小。

4、ConvTranspose2d

nn.ConvTranspose2d(in_channels, out_channels, kernel_size, stride=1, padding=0, output_padding=0, groups=1, bias=True, dilation=1)

输入为(h1,w1),输出为(h2,w2),h2的计算如下,w2同理:

h2 = (h1-1)*stride-2*padding+kernelsize+outputpadding

pytorch中上采样2倍的话,可以使用如下形式,注意此时输出特征图大小可能会和(输入特征图大小*2)的大小不同,需要沿着边界做一下crop。

nn.ConvTranspose2d(in_channels, out_channels, 4, stride=2)

一个简单的crop函数

def crop(data1,data2,crop_h,crop_w):
    _,_,h1,w1 = data1.size()
    _,_,h2,w2 = data2.size()
    assert(h2<=h1 and w2<=w1)
    data = data1[:,:,crop_h:crop_h+h2,crop_w:crop_w+w2]
    return data


# 例子
x = crop(t,x,1,1)

参考链接:

https://blog.csdn.net/qq_41196472/article/details/106332973

https://blog.csdn.net/qq_33757398/article/details/108576229

https://blog.csdn.net/qq_36370187/article/details/103074383

https://blog.csdn.net/qq_33757398/article/details/108576229

https://blog.csdn.net/weixin_43468458/article/details/105064741

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值