查看原文
其他

深度学习100问-18:如何计算CNN的感受野?

louwill 机器学习实验室 2022-08-08

深度学习100问


Author:louwill

Machine Learning Lab

     

     感受野(Receptive Field)是CNN中最重要的基础概念之一。相信很多朋友是在学习CNN的时候和卷积核、卷积步长、padding、特征图等概念一起接受感受野的概念的。卷积核扫过的区域我们称之为感受野,相信这是大多数朋友对于感受野的印象。但很多时候,我们对于感受野并未深入理解和特别重视,也很少有教程来专门来介绍感受野。

     什么是感受野?感受野在CNN中如何计算?这是本文需要厘清的两个问题,深入理解感受野对于一些任务的网络结构设计和优化有着重要意义,比如语义分割模型的空洞卷积,其中就涉及到对感受野的深刻理解。

     这里默认大家都有CNN基本知识储备,对于卷积核和特征图等概念都有基本理解,熟悉CNN的计算原理。所以我们直接来切入正题,先来看如何给感受野一个明确的定义。

     所谓感受野,是指输出特征图上某个像素对应到输入空间中的区域范围。所以感受野可以理解为特征图像素到输入区域的映射。先来回顾一个从输入到特征图的计算过程:

     其中n_in为输入size,p为padding大小,f为卷积核size,s为卷积步长。假设输入大小为5*5,f=3*3,padding为1*1,卷积步长为2*2,那么输出特征图size根据公式可计算为3*3。如下图所示:

     然后我们继续对3*3的特征图执行卷积,卷积参数同第一次卷积一样,可得输出特征图size为2*2。我们把输入、两次卷积过程和对应特征图放到一起看一下:

     可以看到两次卷积的特征图分别对应到输入空间的感受野大小,第一次卷积对应关系如图中绿色线条所示,感受野大小为3*3,第二次卷积对应关系如图中黄色线条所示,感受野大小为7*7。所以关键问题是特征图和输入空间的对应关系中,感受野的大小是如何计算的?

     下面我们给出感受野大小的计算公式:

     其中RF_l+1为当前特征图对应的感受野大小,也就是我们要计算的目标感受野,RF_l为上一层特征图对应的感受野大小,f_l+1为当前卷积层卷积核大小,最后一项连乘项则表示之前卷积层的步长乘积。

     根据感受野的计算公式我们来看上图中两次卷积的感受野计算过程:

     原始输入size为5*5,第一层卷积核为3*3,输入步长为1,输入层初始化感受野为1*1,根据公式计算可得第一层卷积后的特征图对应的输入空间的感受野大小为1+(3-1)*1=3。

     第一层卷积输出特征图的感受野size为3,第二层卷积核size为3,卷积步长为2,则第二层的的感受野size计算为3+(3-1)*2*1=7。所以我们可以看到当前层特征图的感受野大小对应到输入空间与前层的感受野和卷积步长以及当前层的卷积核大小密切相关。当步长大于1时,感受野的大小会呈现指数级增长。

     上述计算的图示过程如下:


     感受野还有一点比较重要的是,对于一个卷积特征图而言,感受野中每个像素并不是同等重要的,越接近感受野中间的像素相对而言就越重要。

     深刻理解感受野的概念对于CNN结构设计意义重大,语义分割中很多网络结构的设计都会在感受野上做文章,比如说我们下一问会讲到的空洞卷积,以及后续的deeplab系列分割网络。


参考资料:

https://medium.com/mlreview/a-guide-to-receptive-field-arithmetic-for-convolutional-neural-networks-e0f514068807



往期精彩:

深度学习100问-17:语义分割有哪些常用的评价指标?

深度学习100问-16:为什么U-Net在医学图像上表现优越?

深度学习100问-15:什么是深监督(Deep Supervision)?

深度学习100问-14:图像语义分割有哪些经典的上采样方法?

深度学习100问-13:深度学习如何制作个人数据集?

深度学习100问-12:深度学习有哪些经典数据集?

深度学习100问-11:什么是学习率衰减?

深度学习100问-10:如何部署一个轻量级的深度学习项目?

深度学习100问-9:为什么EfficientNet号称是最好的分类网络?

深度学习100问-8:什么是Batch Normalization?

深度学习100问-7:dropout有哪些细节问题?

深度学习100问-6:有哪些经典的卷积类型?

深度学习100问-5:如何阅读一份深度学习项目代码?

深度学习100问-4:深度学习应遵循怎样的论文研读路线?

深度学习100问-3:深度学习应掌握哪些Linux开发技术?

深度学习100问-2:深度学习应掌握哪些Git开发技术?

深度学习100问-1:深度学习环境配置有哪些坑?







一个算法工程师的成长之路


长按二维码.关注机器学习实验室



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存