为什么卷积总是使用奇数作为 filter_size

数据挖掘 深度学习 计算机视觉 卷积神经网络 卷积
2021-10-11 23:10:06

如果我们看一下使用 CNN(ConvNet)发表的 90-99% 的论文。他们中的绝大多数使用奇数的过滤器大小:{1, 3, 5, 7} 是最常用的。

这种情况可能会导致一些问题:使用这些过滤器大小,通常卷积操作并不完美,填充为 2(常见填充),并且 input_field 的某些边缘在此过程中会丢失......

问题 1:为什么只对卷积过滤器大小使用奇数?

问题2:在卷积过程中省略一小部分input_field实际上是一个问题吗?为什么是/不是?

3个回答

简单地说,卷积运算是两个矩阵的元素乘积的组合。只要这两个矩阵在维度上一致,就不应该有问题,因此我可以理解您查询背后的动机。

A.1。然而,卷积的目的是根据滤波器或内核对源数据矩阵(整个图像)进行编码。更具体地说,我们正在尝试对锚/源像素附近的像素进行编码。看看下图: 在此处输入图像描述 通常,我们将源图像的每个像素都视为锚点/源像素,但我们并不局限于此。事实上,包含一个步幅并不少见,其中我们锚/源像素由特定数量的像素分隔。

好的,那么源像素是什么?它是内核居中的锚点,我们正在编码所有相邻像素,包括锚/源像素。由于内核是对称形状的(内核值不对称),因此锚像素的所有边(4-连通性)都有相等数量(n)的像素。因此,无论这个像素数量如何,我们对称形状内核的每一边的长度都是 2*n+1(锚点的每一边 + 锚点像素),因此过滤器/内核总是奇数大小。

如果我们决定打破“传统”并使用非对称内核怎么办?你会遇到混叠错误,所以我们不这样做。我们认为像素是最小的实体,即这里没有子像素的概念。

A.2 使用不同的方法处理边界问题:一些忽略它,一些零填充它,一些镜像反射它。如果您不打算计算逆运算,即反卷积,并且对原始图像的完美重建不感兴趣,那么您不必关心由于边界问题而导致的信息丢失或噪声注入。通常,池化操作(平均池化或最大池化)无论如何都会删除您的边界伪影。因此,请随意忽略您的“输入字段”的一部分,您的池化操作将为您执行此操作。

--

卷积之禅:

在老式信号处理领域,当输入信号被卷积或通过滤波器时,没有办法先验判断卷积/过滤响应的哪些分量是相关的/信息性的,哪些不相关。因此,目的是在这些转换中保留信号分量(全部)。

这些信号成分是信息。一些组件比其他组件提供更多信息。唯一的原因是我们对提取更高层次的信息感兴趣;与某些语义类别相关的信息。因此,那些不提供我们特别感兴趣的信息的信号分量可以被删掉。因此,与关于卷积/过滤的老派教条不同,我们可以按照自己的意愿随意合并/修剪卷积响应。我们觉得这样做的方式是严格删除所有无助于改进我们的统计模型的数据组件。

1) 假设input_field除 index 处的一个条目外全为零idx奇数过滤器大小将返回以 为中心的峰值的数据idx,偶数过滤器大小不会 - 考虑大小为 2 的统一过滤器的情况。大多数人希望在过滤时保留峰值的位置。

2)所有这些input_field都与卷积相关,但output_field由于必要的数据不包含在 中,因此无法准确计算边缘input_field如果我想计算 的第一个元素的答案output_field,过滤器必须以 的第一个元素为中心input_field但是有些过滤器元素不对应于input_field. 有各种技巧可以猜测output_field.

对于奇数大小的过滤器,所有前一层像素都将对称地围绕输出像素。如果没有这种对称性,我们将不得不考虑使用偶数大小的内核时发生的跨层失真。因此,偶数大小的内核过滤器大多被跳过以促进实现的简单性。如果您将卷积视为从给定像素到中心像素的插值,我们无法使用偶数大小的滤波器插值到中心像素。

为什么均匀大小的过滤器不起作用

来源:https ://towardsdatascience.com/deciding-optimal-filter-size-for-cnns-d6f7b56f9363