为什么膨胀的卷积层不会降低接收场的分辨率?

时间:2019-03-05 16:14:10

标签: deep-learning conv-neural-network deeplab

我试图了解膨胀卷积。我已经熟悉通过用零填充空白来增加内核的大小。它可用于覆盖更大的区域并更好地了解更大的物体。 但是请有人能解释一下,扩张的卷积层如何保持接收场的原点分辨率。它用在DeeplabV3 +结构中,频率从2到16不等。怎么可能使用内核更大但没有零填充的膨胀卷积,输出大小将保持一致。

deeplabV3 +结构:

enter image description here

我很困惑,因为当我在这里查看这些解释时:

enter image description here

膨胀的卷积层的输出尺寸(3x3)较小?

非常感谢您的帮助!

卢卡斯

3 个答案:

答案 0 :(得分:0)

在这里,跨步式卷积和扩张式卷积之间可能会有小的混淆。交错卷积是一种一般的卷积运算,其作用类似于滑动窗口,但是在计算当前像素和下一个像素的卷积结果时,每次使用跨度时都不会跨越一个像素,而是跨越一个像素。膨胀的卷积在一个更大的窗口上“看”-而不是获取相邻的像素,而是将它们带“孔”。膨胀因子定义了这些“孔”的大小。

答案 1 :(得分:0)

好吧,如果不填充,输出将变得小于输入。这种效果与普通卷积的减少效果相当。

想象一下,您有一个具有1000个元素的1d张量和一个扩张因子为3的扩张的1x3卷积核。这对应于“总核长”为1 + 2free + 1 + 2free + 1 = 7。 1的输出将是具有1000 + 1-7 = 994个元素的1d张量。在具有1x3内核且步幅为1的正常卷积的情况下,输出将具有1000 + 1-3 = 998个元素。如您所见,可以像普通卷积一样计算效果:)

在两种情况下,输出都会变小而不会填充。但是,如您所见,膨胀因子对输出大小没有缩放作用,就像跨步因子一样。

您为什么认为在deeplab框架内没有填充?我认为在官方的tensorflow实现中使用了填充。

最佳弗兰克

答案 2 :(得分:0)

我的理解是,作者说,在应用3x3卷积(在DCNN(例如VGG16或ResNet)中很典型)进行特征提取并随后进行跟踪之前,无需对图像(或任何中间特征图)进行下采样。通过对语义分割进行上采样。在典型的编解码器网络(例如UNet或SegNet)中,首先需要对特征图进行一半下采样,然后进行卷积运算,然后再对特征图进行上两倍采样。

所有这些效果(下采样,特征提取和上采样)都可以在单个无用卷积中捕获(当然,步幅= 1)。而且,与相同的“下采样,特征提取和上采样”相比,无用卷积的输出是密集的特征图,这导致备用特征图。有关更多详细信息,请参见下图。它来自DeepLabV1 paper。因此,您可以通过在中间层用无规卷积替换任何常规卷积来控制要素图的大小。

这也是为什么您在上面发布的图片(级联模型)的所有圆角卷积中都有恒定的“ output_stride(输入分辨率/特征图分辨率)”为16的原因。

enter image description here