关于感受野的总结
概念
感受野是每个神经元仅与输入神经元相连接的一块区域。通俗的讲,就是该层输出特征图上的一点映射到输入特征图的区域大小。可以说成,神经元所看到的输入特征图的区域大小。
计算感受野
ps:我当时就说怎么公式不一样,原来有两个。。。
- 公式1:
R F n = R F n − 1 + ( K n − 1 ) ∗ ∏ i = 0 n − 1 S t r i d e i RF_{n} = RF_{n-1} +(K_{n}- 1)*\prod_{i=0}^{n-1}Stride_{i} RFn=RFn−1+(Kn−1)∗i=0∏n−1Stridei
注意: R F n − 1 RF_{n-1} RFn−1为第n-1层输出特征图的感受野大小,其中 R F 0 = 1 RF_{0}=1 RF0=1。 - 公式2:
R F n = ( R F n + 1 − 1 ) ∗ S t r i d e n + K n RF_{n} = (RF_{n+1}-1) *Stride_{n}+K_{n} RFn=(RFn+1−1)∗Striden+Kn
注意:从上往下推导, R F n + 1 RF_{n+1} RFn+1为第n+1层输出特征图的感受野大小,其中最后一层输出特征图的感受野大小为其kernel_size大小。
计算可以参考如何计算感受野
感受野的作用
-
例如在VGGNet中,采用3x3卷积组合代替大尺寸的卷积(两个3x3的卷积可以代替5x5卷积来获得相同的感受野),可减少网络参数、增加网络深度。
-
在分类任务中,感受野一般要大于输入图像的大小,因为大的感受野可以让你忽略的信息更少。但也不能太大,一般我们在设计卷积神经网络时,对于最高层网络特征感受野大小的存在限制。
-
在目标检测中,放置anchor层的感受野的大小一般要与anchor大小差不多。如果感受野大于anchor大小的话,就像给你一张世界地图,就让你去检测到故宫的位置。说白了就是你看到的信息太多了,难以做出正确的判断。同理,如果感受野小于anchor的大小,得到的信息太少也难以检测到正确的结果。
增大感受野的方式
- 使用空洞卷积。在语义分割中,使用空洞卷积代替下采样操作,避免信息损失,扩大感受野。因为池化会降低分辨率,丢失信息,导致准确率下降。
- 使用大的卷积核。从公式中得知,感受野与卷积核大小和步长有关,所以使用大的卷积核也可以获得更大的感受野。
- 增加网络层数(卷积、池化),但是要避免网络的开销过大。