前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【干货】CNN 感受野首次可视化:深入解读及计算指南

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

作者头像
新智元
发布2018-03-27 17:29:19
1.6K0
发布2018-03-27 17:29:19
举报
文章被收录于专栏:新智元

【新智元导读】作为目前的研究和应用热点,图形识别使用 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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-04-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 新智元 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
灰盒安全测试
腾讯知识图谱(Tencent Knowledge Graph,TKG)是一个集成图数据库、图计算引擎和图可视化分析的一站式平台。支持抽取和融合异构数据,支持千亿级节点关系的存储和计算,支持规则匹配、机器学习、图嵌入等图数据挖掘算法,拥有丰富的图数据渲染和展现的可视化方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档