参考文章:卷积神经网络的感受野
目录
1. 前言
经典目标检测和目标跟踪都用到了RPN(region proposal network),锚框(anchor)是RPN的基础,感受野(receptive field, RF)是anchor的基础。本文介绍感受野及其计算方法,和有效感受野概念。
2. 感受野
2.1 定义
感受野:在CNN网络中,FC层每个输出节点的值都依赖FC层所有输入,而CONV层每个输出节点的值仅依赖CONV层输入的一个区域,这个区域之外的其他输入值都不会影响输出值,该区域就是感受野。一般在对比感受野大小时,都会将其映射到输入图像上后再进行对比。
3. 感受野的计算
我们首先介绍一种从后向前计算方法,极其简单适合人脑计算,看看网络结构就知道感受野了,之后介绍一种通用的从前往后计算方法,比较规律适合电脑计算,简单编程就可以计算出感受野大小和位置。
3.1 从后向前计算方法
从后往前的计算方式的出发点是:一个conv5x5的感受野等于堆叠两个conv3x3,反之两个堆叠的conv3x3感受野等于一个conv5x5,推广之,一个多层卷积构成的FCN感受野等于一个conv rxr,即一个卷积核很大的单层卷积,其kernelsize=r,padding=P,stride=S。
3.1.1 层与层之间的计算方法:
- 初始feature map的感受野为1;
- 每经过一次卷积层,感受野的计算公式为:
其中,
-当前层的感受野,
-前一层(前向传播中的前后)的感受野,
-前向传播过程计算当前层的feature map时的步长,
-kernel size,卷积核的大小 - 每经过一次Conv k*k s1的卷积层,感受野 r = (r - 1) + k,常用k=3感受野 r = r - 1 + 3, k=5感受野r = r - 1 + 5;
- 每经过一次Conv k*k s2的卷积层,感受野 r = (r - 1) * 2 + k,常用k=3感受野 r =( r - 1) * 2 + 3, k=5感受野r = ( r - 1) * 2 + 5;
- 每经过一个maxpool2x2 s2的max/avg pooling下采样层,感受野 r = r x 2
- 特殊情况,经过conv1x1 s1不会改变感受野,经过FC层和GAP层,感受野就是整个输入图像
- 经过多分枝的路径,按照感受野最大支路计算,shotcut也一样所以不会改变感受野
- ReLU, BN,dropout等元素级操作不会影响感受野
3.1.2 全局的计算方法
- 全局感受野:通过上述方法,一步一步计算得出
- 全局步进:等于经过所有层的步进累乘,
- 全局扩充:经过的所有层所加padding都可以等效加在输入图像,等效值P,直接用卷积的输入输出公式反推出P即可
3.2 从前往后计算方法
这里介绍的方式是通用的,来自一篇著名博客(需翻墙),再次强调上述方法的结果是这里的完全一致。
文中给出了通用的计算公式,也是逐层计算,不同点在于这里是从前往后计算,核心四个公式:
上式中n是feature map的大小,p是padding,k是kernel size,j是jump(前面的S),r是感受野大小,start是第一个特征向量(左上角位置)对应感受野的中心坐标位置。搬运并翻译:
- 公式一是通用计算卷积层输入输出特征图大小的标准公式
- 公式二计算输出特征图的jump,等于输入特征图的jump乘当前卷积层的步进s
- 公式三计算感受野大小,等于输入感受野加当前层的卷积影响因子(k - 1) * jin,注意这里与当前层的步进s没有关系
- 公式四计算输出特征图左上角位置第一个特征向量,对应输入图像感受野的中心位置,注意这里与padding有关系。从以上公式可以看出:start起始值为0.5,经过k=3, p=1时不变,经过k=5, p=2时不变。
博客中还给出了一个计算示例:
3.3 下图展示了感受野的变化过程
3. 有效感受野
NIPS 2016论文Understanding the Effective Receptive Field in Deep Convolutional Neural Networks提出了**有效感受野(Effective Receptive Field, ERF)**理论,论文发现并不是感受野内所有像素对输出向量的贡献相同,在很多情况下感受野区域内像素的影响分布是高斯,有效感受野仅占理论感受野的一部分,且高斯分布从中心到边缘快速衰减,下图第二个是训练后CNN的典型有效感受野。