CNN的感受野计算过程,以AlexNet为例
感受野概念
在卷积神经网络中,感受野(Receptive Field)的定义是卷积神经网络每一层输出的特征图(feature map)上每个像素点在原始图像上映射的区域大小,这里的原始图像是指网络的输入图像,是经过预处理(如resize,warp,crop)后的图像。
为什么要计算感受野?
因为感受野代表了深度学习网络每一层中的像素映射到输入图像的区域,感受野的大小直接影响网络层对于输入图像的特征感受级别,即每一层获得的特征(feature map)是全局的、语义层次比较高的,还是局部的、细节的特征。一般来说感受野小的时候,也就是CNN网络的头部层,其经过卷积和池化的次数较小,输出的feature map大小较大,反映的特征也更为精细和注重细节;而在CNN网络的尾部层,输入图像经过了大量的卷积和池化次数,feature map的尺寸大小降低的很小,感受野也变的很大,一个像素可以看到前部层的很大一个区域,因此这种feature map反映出来的特征更加注重整体和全局。所以这也是感受野概念的来源,精确计算感受野的大小对于设计良好的网络具有重要作用。
感受野计算公式—从第一层开始计算
数学公式输入起来比较费劲,我直接翻译解释一下:
公式中l k-1表示第k-1层的感受野大小,fk代表第k层滤波核的大小(假设滤波核的高度和宽度一致),si代表第i层的步长。
这个公式计算的是从第1层开始的感受野,即需要从第一层的感受野逐步开始计算后面所有的感受野。直观地来看,第k层的感受野相对第k-1层中多包涵了(fk-1)*sk-1个像素数。然而这种增加需要回传到第一层,所以这种增加是阶乘——即第k-1层中的步长是比更低层中的步长呈现指数级增长的。
ps:公式中那个特殊的符号代表连乘。
来源于主要参考博客2一个公式如下:
r代表感受野大小,k代表kernel大小,s代表stride步长。
AlexNet感受野计算过程
我将使用下面公式进行计算:
下表为AlexNet每一层输入尺寸大小、卷积核大小、步长、补圈数、输出尺寸以及感受野大小参数表。
以第一层为例,计算第一层的时候认为s0=1,l0(感受野大小)=1,kernel_size=1111,所以带入公式就是下表中第二行。
第二层,s1=4,l1=11,kernel_size=33,带入公式就是下表中第三行,依次类推。
即可完全求出AlexNet网络每一层的感受野大小
No. | 计算过程 | 感受野大小 |
---|---|---|
1 | 1+(11-1)x1=11 | 11 |
2 | 11+(3-1)x4 =19 | 19 |
3 | 19+(5-1)x4x2=51 | 51 |
4 | 51+(3-1)x4x2x1=67 | 67 |
5 | 67+(3-1)x4x2x1x2=99 | 99 |
6 | 99+(3-1)x4x2x1x2x1=131 | 131 |
7 | 131+(3-1)x4x2x1x2x1x1=163 | 163 |
8 | 163+(3-1)x4x2x1x2x1x1x1=195 | 195 |
感受野计算的过程只是针对 卷积层和池化层,同时padding不会影响感受野大小的计算。
附上一张图,可视化表示感受野的大小,来源于主要参考博客1。
2019.10.18.
希望能帮到你。你的点赞是对我最大的认可。谢谢