如何使用 3x3 卷积对 2x 进行上采样?

数据挖掘 深度学习 火炬 卷积
2022-02-16 15:39:00

从 Conv2Transpose2d 上的 Pytorch 文档中计算上采样卷积输出的公式(假设输入平方且没有核膨胀)是:

Hout=(Hin1)×S2Pin+Pout+1.

这里,HoutHin是输入和输出图像的高度,S是步幅,并且PinPout是输入和输出填充。

我想使用 3x3 卷积将 256x256 图像上采样 2x 到 512x512,以模拟分数步幅为的卷积1/2.

给定步幅为 2,我计算出我们必须有2pinpout=1, 所以(pin,pout)=(1,1)是一个解决方案。

我的问题是:为什么pout有必要在这里实现 2 倍采样吗?这个 PyTorch 论坛帖子中,我了解到pout是右侧和底部的不对称填充。

然而,我在网上看到的所有地方(例如斯坦福 CS231n 2016 讲座的幻灯片 54),它都说步幅 2 和垫 1 使用 3x3 卷积产生 2x 上采样,输入/输出填充之间没有区别。

考虑以下 PyTorch 代码:

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

将该函数应用于 256x256 图像,输出的尺寸为 513x513。直到我添加了参数output_padding=1,尺寸才被正确地上采样 2 倍,正如前面的方程所证实的那样。

我希望有人可以帮助更详细地阐明上采样过程,因为我不明白为什么“步幅 2,垫 1”不起作用,除非输出也被填充。

谢谢

0个回答
没有发现任何回复~