1、conv2d
nn.Conv2d(in_dim, out_dim, kernel_size=3, stride=1, padding=1)
输入为(h1,w1),输出为(h2,w2),h2的计算如下,w2同理:
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)
先计算感受野
在计算输出h2
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同理:
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同理:
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