从 Conv2Transpose2d 上的 Pytorch 文档中,计算上采样卷积输出的公式(假设输入平方且没有核膨胀)是:
这里,和是输入和输出图像的高度,是步幅,并且和是输入和输出填充。
我想使用 3x3 卷积将 256x256 图像上采样 2x 到 512x512,以模拟分数步幅为的卷积.
给定步幅为 2,我计算出我们必须有, 所以是一个解决方案。
我的问题是:为什么有必要在这里实现 2 倍采样吗?从这个 PyTorch 论坛帖子中,我了解到是右侧和底部的不对称填充。
然而,我在网上看到的所有地方(例如斯坦福 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”不起作用,除非输出也被填充。
谢谢