【新智元导读】作为目前的研究和应用热点,图形识别使用 CNN 模型架构。感受野则是 CNN 中最为重要的概念之一,但此前还没有任何关于如何计算和可视化 CNN 感受野信息的完整指南。本文引入一种新的方式来显示 CNN 中的特征图,揭示了感受野信息,并附上可用于任何 CNN 架构的完整的感受野计算,填补了这个空白。作者还提供了一个简单的程序来做计算演示。
感受野可能是卷积神经网络(CNN)中最重要的概念之一,其相关文献值得关注。所有最先进的对象识别方法的模型架构都是围绕这一想法设计的。然而,据我所知,目前还没有任何关于如何计算和如何可视化 CNN 感受野信息的完整指南。本文引入一种新的方式来显示 CNN 中的特征图,揭示了感受野信息,并附上可用于任何 CNN 架构的完整的感受野计算,填补了这个空白。我还用了一个简单的程序来做计算演示,以便任何人都可以开始计算感受野,并获得更好的有关 CNN 架构的知识。
作为读懂本文的前提,我假设你熟悉 CNN 的概念,特别是卷积和池化操作。你可以阅读“深度学习卷积运算指南”这篇论文(A guide to convolution arithmetic for deep learning),来更新你的 CNN 知识。这篇文章实际上就是受到该论文的启发,并使用了类似的符号。
固定大小的CNN特征图可视化
感受野被定义为特定 CNN 特征正在“看”(即受其影响)的输入空间中的区域。特征的感受野可以通过其中心位置及其大小进行充分描述。图1 显示了一些感受野的实例。通过应用卷积 C (它在5x5 输入图上 Kernel size k= 3×3,paddingsize p = 1x1,stride s = 2x2),我们将得到输出 3x3 特征图(绿色图)。将相同的卷积应用在 3x3 特征图上,我们将获得一个 2x2 的特征图(橙色图)。可以使用以下公式计算每个维度中的输出特征数。
请注意,在本文中,为了简化说明,我假设 CNN 架构是对称的,并且输入图像是正方形的。因此,所有变量的两个维度都具有相同的值。如果 CNN 架构或输入图像不对称,则可以为每个维度分别计算特征图属性。
图1:可视化 CNN 特征图的两种方式。在各种情况下,我们都使用内核 size k = 3×3,paddingsize p = 1x1,stride s = 2x2 的卷积C 。(上排)在5x5 的输入图上产出 3x3
的绿色特征图。(下排)在绿色特征图的顶部应用同样的卷积,产生2x2的橙色特征图。(左列)可视化 CNN 特征图的一般方法。只看特征图,我们不知道特征在“看”哪里(感受野的中心位置)以及该区域的大小(感受野的大小)。在深度 CNN 中无法追踪感受野的信息。(右列)固定大小的 CNN 特征图可视化,其中每个特征图的大小是固定的,特征位于感受野的中心。
图1的左列显示了可视化 CNN 特征图的常见方式。在该可视化中,虽然通过观察特征图,我们可以知道它包含多少个特征,但不可能知道每个特征所“看”的区域(感受野的中心位置)以及该区域的大小(其感受野大小)。图1的右栏显示了固定大小 CNN 的可视化,其问题是通过保持所有特征图的大小不变并等于输入图来解决的。每个特征在其感受野的中心位置被标记。由于特征图中的所有特征都具有相同的感受野大小,因此我们可以简单地绘制围绕一个特征的边界框来表示其感受野大小。我们不必将该边界框映射到输入层,因为特征图已经表示为和输入层相同的大小。图2显示了另一个示例,使用了相同卷积但应用于较大输入图(7x7)。我们可以在 3D(左)或 2D (右)中绘制固定大小的CNN 特征图。注意,图2中感受野的大小非常快速地升高,以致第二特征层的中心特征的感受野覆盖了几乎整个输入图。这对于改进深度CNN 的设计有非常重要的参考意义。
图2:另一个固定大小的 CNN 特征图表征。同样的卷积 C 应用于更大的输入图( i = 7x7)。我在中心特征周围画出了感受野的边界框,为了看得更清楚,去掉了填充网格。固定大小的 CNN 特征图可以用 3D (左)或 2D (右)表示。
感受野计算
为了计算每一层的感受野,除了每个维度中的特征数 n 之外,我们还需要跟踪每层的一些额外信息,包括当前感受野大小r,两个相邻(或跳跃)特征之间的距离j,以及左上部特征(第一个特征)的中心坐标 Start。注意,特征的中心坐标被定义为其感受野的中心坐标,如上文中固定大小 CNN 特征图所示。当应用 Kernel 大小为 k,padding 大小为 p 和 stride 大小为 s 的卷积时,输出层的属性可以通过以下方程计算:
第一层是输入层,总有 n= image size, r = 1,j = 1 以及 start = 0.5。请注意,在图 3 中,我使用了输入层第一个特征的中心为0.5的坐标系。通过递归地应用上述四个方程,我们可以计算 CNN 中所有特征图的感受野信息。图 3 显示了这些方程是如何工作的。
我还创建了一个小型的 python 程序,它可以计算给定 CNN 架构中所有层的感受野信息,还允许你输入任何特征图的名称和该图中特征的索引,并返回相应的感受野的大小和位置。下图显示了使用 AlexNet 时的输出示例。该代码在本文末尾提供。
原文地址:https://medium.com/@nikasa1889/a-guide-to-receptive-field-arithmetic-for-convolutional-neural-networks-e0f514068807