我读到深度学习算法在对矩阵应用滤波器之前会应用零填充,但这不会扭曲图像的边缘吗,尤其是如果过滤后的图像被重复使用的话?
我不确定我是否错了,但我认为当滤波器应用到零填充的部分时,图像的边缘值会持续降低,因此当重复这个过程时,‘零边界’会增大。
回答:
您提到的这种情况在卷积神经网络领域中很常见,当一层的应用核大于1×1时,边缘像素会被切掉以产生结果特征图。这不一定是问题。一些架构如U-Net通过仔细定义初始图像大小来解决这个问题,因此像MaxPooling这样的操作可以处理偶数输入维度。大多数情况下,填充被应用于卷积层,因为这使得处理不同分辨率变得更加容易。输入和输出将具有相同的空间分辨率。
正如您指出的,这意味着需要对边缘进行一些额外的处理,以免篡改值。一种方法是使用零填充并除以调整后的相关像素数量。例如,如果一个3×3的核计算特征图的角值,它将覆盖5个填充像素和4个实际图像像素。
因此,操作的最后一步不是像我们通常那样除以9,而是除以4,因为只有4个相关像素当前被核覆盖。
另一种方法是使用一种填充,其中边缘像素值被复制到新边界上。这就是为什么在Keras中例如被称为padding='same'
的原因。