【深度学习】感受野(receptive fields)概念计算及如何增加感受野总结

在深度学习论文里,经常会看到感受野(receptive fields), 根据自己看到的和网上资料稍微整理总结一下。

感受野的定义

感受野是卷积神经网络(CNN)每一层输出的特征图(feature map)上的像素点在原始输入图像上映射的区域大小[1]
这里写图片描述

感受野的计算

感受野的计算从最深层开始向浅层计算,逐步计算到第一层(即上图的蓝色层开始向红色层传递计算),所以计算前要知道网络的整体结构和参数。
计算公式:

'''
RF: 待计算的feature map上的感受野大小
stride: 卷积的步长(之前所有层stride的乘积)
fsize: 卷积层滤波器的大小
'''
RF = 1
for layer in (high layer To low layer):
  RF = ((RF -1)* stride) + fsize

[python代码实现感受野的计算]

如何增加感受野

在深度学习中,对具体的任务有时需要增加感受野来提高性能,比如在人体姿态估计中,大的感受野对学习长距离的空间位置关系(long-range spatial relationship),建立内隐空间模型(implicit spatial model)有帮助,因此也要知道增大感受野的手段。
根据以上说的感受野的计算,也可以分析出,增加层数、增大strides,增加fsize即卷积滤波器的大小都可以增加感受野的大小。
在看CPM(Convolutional Pose Machines) 时,作者做了一个简单的总结:

Large receptive fields can be achieved either by pooling at the expense of precision, increasing the kernel size of the convolutional filters at the expense of increasing the number of parameters, or by increasing the number of convolutional layers at the risk often countering vanishing gradients during training.

总结一下共三种方法:

  • 增加pooling层,但是会降低准确性(pooling过程中造成了信息损失)
  • 增大卷积核的kernel size,但是会增加参数(卷积层的参数计算参考[2]
  • 增加卷积层的个数,但是会面临梯度消失的问题(梯度消失参考[3]

CPM中作者用的增加卷积层个数的方法来增加感受野,但是他用多阶段训练的方式并引入中间层监督的方法来解决梯度消失的问题。

增加pooling层带来信息损失的解决办法可以参考[dilated conv带孔卷积、pooling层提高感受野 反卷积 的理解]

阅读更多

没有更多推荐了,返回首页