卷积神经网络中感受野的计算

本文仅考虑正方形卷积核,不考虑dilation,感受野用标量表示,实际指的是正方形感受野的边长.

理解感受野

虽然说起感受野,都说是卷积核的感受野,但我认为更贴切的说法应该叫feature map的感受野.感受野的大小体现的是经过当前操作后,得到的feature map的一个元素对应到输入feature map中的区域大小.假设感受野为5,则当前feature map的一个元素是由该位置对应到输入feature map的位置的周围共计 5×55\times 5的区域合成的.当然了,每个输入feature map的元素对当前元素的贡献比例是不同的,一般来看,越靠近中间的元素贡献越大.

stride对感受野的影响

在进行conv或pooling操作时,都会存在stride,最简单常见的情况是卷积的stride为1,pooling(例如max-pooling)的stride为2.stride对feature map的影响是以乘法累积的,例如,初始的64x64的feature map,经过1次stride为2的操作后,得到的feature map尺寸为32x32;经过2次stride为2的操作后,得到的feature map尺寸为16x16.可见,经过2次stride为2的操作后,得到的feature map上每个元素对应着初始64x64的feature map中的4x4的区域,此时,如果再有一个3x3的卷积核作用在该16x16的feature map上,其感受野应为12.

多层conv对感受野的影响

stack多层conv是很常见的,当有两层3x3的conv作用于feature map时,第1层conv的感受野是3,这很好理解.第2层的conv的感受野应为5.
2 layers of 3x3
不考虑stride情况下,第1层卷积的核尺寸为c1×c1c_1\times c_1,第2层卷积的核尺寸为c2×c2c_2\times c_2,则第2层感受野大小为 c2+2×c112c_2+2\times \frac{c_1 -1}{2}, 其中 c112\frac{c_1 -1}{2} 可以理解为蓝框右上角多出来的部分, 乘以2是因为左下角还有相同的一部分.
考虑stride的影响,初始feature map,第一步先进行 2×22\times 2 的max-pooling,得到的feature map每个元素对应初始feature map的2×22\times 2区域.然后,用两层卷积作用其上,第1层卷积的核尺寸为c1×c1c_1\times c_1,第2层卷积的核尺寸为c2×c2c_2\times c_2.第1层卷积的感受野为 2c12\cdot c_1,第2层感受野大小为 2c2+2×2×c1122\cdot c_2+2\times 2\times \frac{c_1 -1}{2}.

pooling对感受野的影响

2×22\times 2 的max-pooling为例,其对感受野的作用主要是在扩展1个尺寸.

如上图,认为红色为当前元素,max-pooling的对感受野作用就是加了蓝色(包括旁边两个未填色)元素,感受野尺寸上增加1.如果存在stride,则感受野尺寸上增加 1×stride1 \times stride.
如果来个9×99\times 9 的pooling,则感受野尺寸上增加 8×stride8 \times stride.

实例

  • VGG 参考知乎专栏文章 "深度学习(2)——感受野"中给出的VGG的计算例.
    vgg

  • CPM 参考论文 Wei, Shih-En, Varun Ramakrishna, Takeo Kanade, and Yaser Sheikh. "Convolutional pose machines." In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, pp. 4724-4732. 2016.
    cpm

操作 累积stride 感受野
C1(9x9) 1 9
P1(2x2) 1 9+1=10
C2(9x9) 2 10+2x4x2=26
P2(2x2) 2 26+1x2=28
C3(9x9) 4 28+2x4x4=60
P3(2x2) 4 60+1x4=64
C4(5x5) 8 64+2x2x8=96
C5(9x9) 8 96+2x4x8=160