SRCNN网络如何保留图像的原始大小?为什么图像不会随着每次卷积而变小?



SRCNN是图像超分辨率领域最近最著名的技术之一。作者提出了一种CNN分层结构,他们一个接一个地使用4个卷积层,过滤器大小为9,1,5,3。

根据我的理解,这意味着图像大小将逐渐减小(第二层除外)。即使使用填充来保持图像大小相同,第一个操作也意味着沿每个边缘添加 4 个零。因此,尺寸为 5 的过滤器基本上只会在一端看到零,这应该会导致沿边缘的分辨率很糟糕。

该论文没有解释他们如何解决减小图像大小的问题。任何帮助将不胜感激。 提前谢谢。

这个 github 存储库显示了处理边缘问题的方法(或见解)。您可能需要稍微修改它以适应您的代码。

https://github.com/jormeli/srcnn-keras

抱歉回复晚了,

我一直在这个领域工作,我终于明白为什么即使在应用卷积操作时图像大小也不会减小。让我们以作者提到的架构为例,即( 9 - 3 - 5 )。

在代码实现中,图像被划分为 32x32 子图像,对于每个子图像,其 hr 和 lr 版本是通过缩小和放大来准备的。因此,我们准备了一个大小为 [20:20] 和 lr 补丁 [32:32] 的小时补丁。(在将这些补丁作为第一个卷积层的输入之前,我们删除了 6 个边框像素,因此 hr 补丁形状为 32 - (6+6) = 20 x 20,这就是为什么我在上面提到 HR 补丁为 [20:20])

整个诀窍在于填充,我们提供 LR 补丁作为 CNN 的输入

第一层:过滤器大小=9,填充=有效,所以形状 输出 = n-f+1 ( 32 - 9 + 1 ) = 24,因此第一层的输出是 24x24 图像

第二层:过滤器尺寸=3,填充=相同,所以形状 输出 = 输入的形状,所以第二层的输出是 24x24 图像

第三层:过滤器大小=5,填充=有效,所以形状 输出 = n-f+1 ( 24 - 5 + 1 ) = 20,因此第三层的输出是 20x20 图像。

所以最后我们有一个 20x20的 LR 补丁和 20x20 的 HR 补丁,我们比较这个,执行 mse 和反向传播错误。

所以在这里我们实际上并没有增加图像的大小,我们保持图像的大小相同,我们进行调整以使图像看起来更好。

干杯:)

最新更新