【干货】CNN 感受野首次可视化:深入解读及计算指南

【新智元导读】作为目前的研究和应用热点,图形识别使用 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 的卷积时,输出层的属性可以通过以下方程计算:

  • 第一个方程根据输入特征数量和卷积属性计算 number of output futures 的数量。
  • 第二个方程计算输出特征图中的 jump,其等于输入图中的jump 乘以您在应用卷积时 jump over 的 number of input features(stride大小)。
  • 第三个方程计算输出特征图的感受野大小,其等于由 k 个输入特征(k-1)*j_in 所覆盖的区域加上由输入特征的感受野覆盖的边界上的额外区域。
  • 第四方程计算第一输出特征的感受野的中心位置,其等于第一输入特征的中心位置加上从第一输入特征的位置到第一卷积的中心的距离(k-1)/ 2 * j_in 减去 padding space p * j_in。请注意,这两种情况下,我们都需要乘以输入特征图的 jump ,以获得实际的距离/空间。

第一层是输入层,总有 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

原文发布于微信公众号 - 新智元(AI_era)

原文发表时间:2017-04-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏新智元

谷歌官方:反向传播算法图解

【新智元导读】反向传播算法(BP算法)是目前用来训练人工神经网络的最常用且最有效的算法。作为谷歌机器学习速成课程的配套材料,谷歌推出一个演示网站,直观地介绍了反...

17000
来自专栏人工智能LeadAI

CNN卷积神经网络分析

CNN最大的优势在特征提取方面。由于CNN的特征检测层通过训练数据进行学习,避免了显示的特征抽取,而是隐式地从训练数据中进行学习;再者由于同一特征映射面上的神经...

13210
来自专栏weixuqin 的专栏

深度学习之 TensorFlow(四):卷积神经网络

16530
来自专栏数说工作室

【分类战车SVM】第三话:最大间隔分类器

分类战车SVM (第三话:最大间隔分类器) 1.回顾 前面说到,线性分类器就是找一个平面,能最好的区分不同类别的样本,logistic模型找的那个超平面,是尽...

28530
来自专栏人人都是极客

机器学习三要素之数据、模型、算法

我们都知道,机器学习需要大量的数据来训练模型,尤其是训练神经网络。在进行机器学习时,数据集一般会被划分为训练集和测试集,很多时候还会划分出验证集。

89020
来自专栏marsggbo

[转载]对深度可分离卷积、分组卷积、扩张卷积、转置卷积(反卷积)的理解

在可分离卷积(separable convolution)中,通常将卷积操作拆分成多个步骤。而在神经网络中通常使用的就是深度可分离卷积(depthwise se...

36820
来自专栏张俊红

支持向量机详解

总第81篇 (本文框架) 01|概念及原理: 支持向量机是一种二分类模型,它的基本模型是定义在特征空间上的间隔最大的线性分类器。 说的通俗一点就是就是在特征空...

36330
来自专栏深度学习计算机视觉

BP神经网络总结笔记

概念背景(来自百度百科) BP神经网络的代表者是D.Rumelhart和J.McCelland,“反向传播(backpropagation)”一词的使用出现在1...

29130
来自专栏xingoo, 一个梦想做发明家的程序员

吴恩达机器学习笔记 —— 13 支持向量机

总结来说:如果y=1,我们希望z的值大于等于1,如果y=0,我们希望z的值小于-1,这样损失函数的值都会为0.

12810
来自专栏专知

【CVPR2018论文笔记】非监督任意姿势人体图像合成

22720

扫码关注云+社区

领取腾讯云代金券