卷积层:填充还是不填充?


19

如图所示,AlexNet体系结构使用零填充: 在此处输入图片说明 但是,本文没有解释为什么引入这种填充。

Standford CS 231n课程教导我们使用填充来保留空间大小: 在此处输入图片说明

我想知道这是我们需要填充的唯一原因吗?我的意思是,如果不需要保留空间大小,是否可以去除填充物?我知道随着我们进入更深的层次,这将导致空间大小的迅速减小。但是,我可以通过删除池化层来权衡这一点。如果有人能给我一些零填充的理由,我将非常高兴。谢谢!

Answers:


20

填充很重要的原因有两个:

  1. 如果我们保留height和,width并且在从一层到另一层时不必担心张量尺寸,则设计网络更容易,因为尺寸会“起作用”

  2. 它使我们能够设计更深层次的网络。如果没有填充,减小体积大小将很快减小。

  3. 通过使信息保持边界,填充实际上可以提高性能

斯坦福大学的演讲引述他的话:“除了上述在CONV之后保持空间大小不变的好处之外,这样做还可以提高性能。如果CONV层不对输入进行零填充,而仅执行有效的卷积,则每次CONV交易后,交易量都会少量减少,并且边界上的信息将被“迅速冲走”。” - 来源

  1. 正如@dontloo已经说过的那样,新的网络体系结构需要将卷积层与1x1、3x3和5x5过滤器连接起来,如果它们不使用填充,则是不可能的,因为尺寸不匹配。检查此初始模块图像,以更好地理解为什么填充在这里有用。

在此处输入图片说明


4
为什么零填充如此普遍?在图像处理中,使用了许多不同的边界模式,例如各种类型的镜像或边缘处的值继续。与实际图像/特征相比,纯零具有非常不同的结构。
isarandi

3

在我看来,最重要的原因是要保留空间大小。如您所说,我们可以通过删除池化层来权衡空间大小的减少。但是,许多最新的网络结构(例如残差网络初始网络分形网络)都在不同层的输出上运行,这需要它们之间具有一致的空间大小。

另一件事是,如果没有填充,输入角的像素只会影响输出对应角的像素,而中心的像素会影响输出中的邻域。当几个无填充层堆叠在一起时,网络会忽略图像的边界像素。

仅出于我的理解,我相信还有其他充分的理由。


2

好问题。Drag0很好地解释了,但我同意,有些不对劲。

就像看着照片,必须处理边界。在现实生活中,您可以将眼睛移到更远的地方。没有真正的边界。因此这是媒介的局限性。

除了保留大小外,这还重要吗?我没有一个令人满意的答案,但我猜想(未经证实),通过对注意力和遮挡(部分物体)的实验,我们不需要边界上丢失的信息。如果您要做一些更聪明的事情(例如复制它旁边的像素),尽管我没有做过任何尝试,但这不会改变答案。用0填充是快速的并且保留大小,因此这就是我们这样做的原因。


1

这是我的想法。零填充在初始时间对于保持输出特征向量的大小很重要。上面的人说零填充具有更高的性能。

但是最后一次呢?图像特征向量分辨率很小,像素值意味着某种全局大小的向量。

我认为在最后一种情况下,某种镜像比零填充更好。


1

为了详细说明如何将信息保留在边界上,基本上,卷积时在拐角处的像素(绿色阴影)将仅使用一次,而在中间的像素(如红色阴影)将多次有助于生成特征图。 ,我们将图像填充如图2所示


1

我将尝试从信息的角度告诉您什么时候可以填充,什么时候不可以填充。

让我们以张量流填充功能为例。它提供了两种情况,“有效”或“相同”。相同将保留输出的大小,并通过添加适当的填充将其保持与输入的大小相同,而有效则不会这样做,并且有人声称这会导致信息丢失,但是,这很重要。

这种信息丢失取决于内核的大小或您使用的过滤器。例如,假设您有一个28x28的图片,且滤镜大小为15x15(假设)。输出的尺寸应为16x16,但如果在Tensorflow中使用“相同”进行填充,则其尺寸将为28x28。现在,12行和12列本身没有携带任何有意义的信息,但仍以噪音的形式存在。并且我们都知道深度学习模型对噪声有多大的影响。这会大大降低培训质量。因此,如果您使用大型过滤器,最好不要使用填充。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.