与跨步转置卷积一起执行上采样和仅使用跨步 1 的转置卷积之间有什么区别?
What is the difference between performing upsampling together with strided transpose convolution and transpose convolution with stride 1 only?
我在很多地方注意到人们使用这样的东西,通常是在全卷积网络、自动编码器和类似的地方:
model.add(UpSampling2D(size=(2,2)))
model.add(Conv2DTranspose(kernel_size=k, padding='same', strides=(1,1))
我想知道这和简单的有什么区别:
model.add(Conv2DTranspose(kernel_size=k, padding='same', strides=(2,2))
欢迎链接到解释这种差异的任何论文。
Here and here 您可以找到关于 转置卷积 工作原理的非常好的解释。总结这两种方法:
在您的第一种方法中,您首先对特征图进行上采样:
[[1, 2], [3, 4]] -> [[1, 1, 2, 2], [1, 1, 2, 2], [3, 3, 4, 4], [3, 3, 4, 4]]
然后应用经典卷积(因为 Conv2DTranspose
与 stride=1
和 padding='same'
等同于 Conv2D
)。
在你的第二种方法中,你首先 un(max)pooling 你的特征图:
[[1, 2], [3, 4]] -> [[1, 0, 2, 0], [0, 0, 0, 0], [3, 0, 4, 0], [0, 0, 0, 0]]
然后应用带有 filter_size
、过滤器等的经典卷积
有趣的是 - 尽管这些方法不同,但它们有一些共同点。转置卷积意味着对卷积梯度的近似,所以第一种方法是近似 sum pooling
而第二种方法是 max pooling
梯度。这使得第一个结果产生稍微平滑的结果。
您可能会看到第一种方法的其他原因是:
Conv2DTranspose
(及其等效项)在 keras
中相对较新,因此执行可学习上采样的唯一方法是使用 Upsample2D
、
keras
的作者 - Francois Chollet 在他的 one 教程中使用了这种方法,
- 在过去的转置等价物中,由于某些
API
不一致,卷积在 keras
中的效果似乎很糟糕。
我只想指出您提到的几件事。 Upsample2D
不是可学习层,因为实际上有 0 个参数。
此外,我们无法证明我们可能想要使用第一种方法的原因 因为 Francoise Chollet 在他的示例中介绍了用法。
我在很多地方注意到人们使用这样的东西,通常是在全卷积网络、自动编码器和类似的地方:
model.add(UpSampling2D(size=(2,2)))
model.add(Conv2DTranspose(kernel_size=k, padding='same', strides=(1,1))
我想知道这和简单的有什么区别:
model.add(Conv2DTranspose(kernel_size=k, padding='same', strides=(2,2))
欢迎链接到解释这种差异的任何论文。
Here and here 您可以找到关于 转置卷积 工作原理的非常好的解释。总结这两种方法:
在您的第一种方法中,您首先对特征图进行上采样:
[[1, 2], [3, 4]] -> [[1, 1, 2, 2], [1, 1, 2, 2], [3, 3, 4, 4], [3, 3, 4, 4]]
然后应用经典卷积(因为
Conv2DTranspose
与stride=1
和padding='same'
等同于Conv2D
)。在你的第二种方法中,你首先 un(max)pooling 你的特征图:
[[1, 2], [3, 4]] -> [[1, 0, 2, 0], [0, 0, 0, 0], [3, 0, 4, 0], [0, 0, 0, 0]]
然后应用带有
filter_size
、过滤器等的经典卷积
有趣的是 - 尽管这些方法不同,但它们有一些共同点。转置卷积意味着对卷积梯度的近似,所以第一种方法是近似 sum pooling
而第二种方法是 max pooling
梯度。这使得第一个结果产生稍微平滑的结果。
您可能会看到第一种方法的其他原因是:
Conv2DTranspose
(及其等效项)在keras
中相对较新,因此执行可学习上采样的唯一方法是使用Upsample2D
、keras
的作者 - Francois Chollet 在他的 one 教程中使用了这种方法,- 在过去的转置等价物中,由于某些
API
不一致,卷积在keras
中的效果似乎很糟糕。
我只想指出您提到的几件事。 Upsample2D
不是可学习层,因为实际上有 0 个参数。
此外,我们无法证明我们可能想要使用第一种方法的原因 因为 Francoise Chollet 在他的示例中介绍了用法。