你知道如何计算CNN感受野吗?这里有一份详细指南

前 言

作者:叶虎

本文翻译自A guide to receptive field arithmetic for Convolutional Neural Networks,原作者保留版权。

感受野(receptive field,RF)也许是CNN中最重要的概念之一,从文献上来看,它应当引起足够的重视。目前所有最好的图像识别方法都是在基于感受野理念来设计模型架构。然而,据我所知,目前并没有一个完整的教程来介绍如何计算并可视化一个CNN的感受野。这篇文章将填补这一空白,这里介绍CNN特征图可视化的一种新方法,可视化可以显示感受野信息,并且给出一个完整的感受野计算公式,它适用于任何CNN架构。我也实现了一个简单的程序来验证这个计算公式,任何人都可以利用该公式计算它们所设计的CNN的感受野,从而对所设计的架构有更多的认识。

要阅读这篇文章,你必须要熟悉CNN的核心概念,特别是卷积和池化操作。你可以通过阅读这篇论文(A guide to convolution arithmetic for deep learning)来复习CNN的基础知识。如果你对CNN有一定的了解,你将用不了半个小时来看完。这篇文章实际上是在这篇论文基础上完成的,使用相同的符号标记。

如果你想学习CNN如何应用在图像识别上,可以阅读这篇文章。

1固定大小的CNN特征图可视化

感受野指的是一个特定的CNN特征(特征图上的某个点)在输入空间所受影响的区域。一个感受野可以用中心位置(center location)和大小(size)来表征。然而,对于一个CNN特征来说,感受野中的每个像素值(pixel)并不是同等重要。一个像素点越接近感受野中心,它对输出特征的计算所起作用越大。这意味着某一个特征不仅仅是受限在输入图片中某个特定的区域(感受野),并且呈指数级聚焦在区域的中心。这个重要的发现会在下一篇文章中讲。现在,我们关注如何计算一个特定感受野的中心位置和大小。

图1为给出了某些感受野实例。其中输入特征图大小为5X5,采用的卷积参数如下:卷积核大小k=3X3,padding大小p=1X1,步长s=2X2。经过一次卷积之后,得到大小为3X3的输出特征图(绿色)。在这个特征图上继续采用相同的卷积,得到一个2X2的特征图(橙色)。输出特征图的大小可以通过如下公式计算(参考A guide to convolution arithmetic for deep learning):

image

为了简化讲解,这里假定CNN架构是对称的,并且输入图片是方形的。因此所有的卷积层的所有参数在两个维度上都是相同的。如果CNN架构或者输入图片是非对称的,你可以为各个维度单独计算特征图的属性。

image

图1 CNN特征图的两种可视化方

图1的左栏给出了CNN特征图可视化最常用的方式。在这个可视化中,我们可以看到每个特征图所包含的特征数,但是很难知道每个特征的感受野的中心位置和大小,对于深度CNN,我们没有办法追踪到感受野信息。右栏给出的是固定大小的CNN可视化,所有的特征图固定大小并保持与输入特征图大小一致,这可以解决前面的问题。每个特征被标记在其感受野所在的中心(从而定位出感受野中心位置)。由于一个特征图中所有的特征都有相同大小的感受野,我们可以简单地在每个特征周围画出一个边界框,从而获得感受野的大小。我们也没有必要将这个边界框向下映射到输入层,因为特征图已经与输入层具有相同的大小。图2给出了另外一个实例,其中输入特征图更大,为$7\times7$,与前面例子采用相同的卷积。图的左栏和右栏分别给出了固定大小CNN特征图的3D和2D可视化。可以看出感受野大小增加迅速,以至于第二个特征层的中心特征的感受野已经覆盖了整个输入特征图。这在深度CNN中是一个很重要的设计理念以提升性能。

image

图2 7x7大小的输入特征图的可视

2感受野计算公式

为了计算CNN每一层的感受野,除了要知道特征图每个维度的特征数n,还需要记录每一层的其他信息,这包括当前层的感受野大小r,两个相邻特征的距离(跳跃的距离,如前面可视化所示)j,和左上角特征(第一个特征)的中心坐标start。注意感受野(其实是特征图第一个特征的感受野)的中心坐标就等于这个特征的中心坐标,就如前面可视化中所示。当采用的卷积其核大小为k,padding大小为p,步长为s,输出特征图的感受野可以按照如下公式计算:

image

第一个式子根据输入特征图大小以及卷积参数计算输出特征图大小,前面已经说过。

第二个式子计算输出特征图的特征间的间隔,其等于上一层的间隔值乘以卷积的步长,所以间隔值将是按照步长呈指数级增长。

第三个式子计算输出特征图的感受野大小,其等于前一层感受野大小加上(k-1) * j_in,所以感受野是呈指数级增加,并且还有一个因子k-1。

第四个式子计算输出特征图的第一个特征感受野的中心坐标,其等于第一层的中心坐标加上(k-1) / 2 * j_in*,再减去p *j_in,注意两项都要乘以前一层的间隔距离以得到实际距离。

对于第一层,一般是输入图片,其各项值为:n=image_size, r=1, j =1, start=0.5。图3给出了一个如何计算感受野的实例,图中的坐标系统中,输入层的第一个特征中心位置记为0.5。通过利用上面公式迭代地进行计算,你可以计算出CNN中所有特征图的感受野信息。

image

我也写了一个简单的Python程序来计算某个特定CNN架构的各个层的感受野信息。它可以通过输入某一个特征图的姓名或者索引值,给出相应的感受野大小和位置信息。下面的图给出了在AlexNet上的计算结果:

image

3附文

对于感受野大小的计算,另外有一个博客(Calculating Receptive Field of CNN)给出一个更简洁的计算公式,对于第k层的感受野大小计算如下:

image

其中l_k-1是第k-1层的感受野大小,而f_k是当前层的卷积核大小,s_i是第i层的步长。从这个公式可以看到,相比前一层,当前层的感受野大小在两层之间增加了

image

如果stride大于1的话,这是一个指数级增加。这个公式也可以这样理解,对于第k层,其卷积核为f_k,那么相比前一层需要计算 f_k个位置(或者神经元,意思是k层的一个位置在k-1层的视野大小是f_k),但是这些位置要一直向前扩展到输入层。对于第一个位置,扩展后的感受野为l_k-1,正好是前一层的感受野大小,但是对于剩余的f_k-1 个位置就要看stride大小,你需要扩展到前面所有层的stride(注意不包括当前层的stride,当前层的stride只会影响后面层的感受野),所以需要乘以

image

这样剩余f_k-1个位置的感受野大小就是

image

和第一个位置的感受野加到一起就是上面的公式了。。其实这个公式算是整合了前面的公式2和公式3(第一层的j=1$),两个本质上是一致的,不过如果你仅想计算感受野大小可以用这个公式更方便。

小结

在CNN中,感受野应该是一个很重要的东西,但是往往被大家忽略,在我看到的文献中,图像分割模型DeepLab就提到了感受野大小的问题,但是那里并没有给出计算公式,如果采用上面的公式就可以快速得到结果。对于图像分割,感受野大小对分割效果是有很大影响的,所以DeepLab采用了扩展卷积(Atrous Convolution, Dilated Convolution)来增加感受野大小。对于空洞卷积来说,你可以将其转化为普通卷积(卷积核大小增加)来计算特征图的感受野。另外,上面的公式同样适用于池化层,因为其在结构上与卷积层是类似的。

作者:机器学习算法工程师

链接:https://www.jianshu.com/p/856538bde67f

來源:简书

简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,284评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,115评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,614评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,671评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,699评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,562评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,309评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,223评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,668评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,859评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,981评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,705评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,310评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,904评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,023评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,146评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,933评论 2 355

推荐阅读更多精彩内容