参考文章:卷积神经网络的感受野

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;
  • 每经过一次卷积层,感受野的计算公式为:
    rn1=(rn1)sn+kr_{n_{-1}}=\left(r_{n}-1\right) * s_{n}+k
    其中,
    rnr_{n}-当前层的感受野,
    rn1r_{n-1}-前一层(前向传播中的前后)的感受野,
    sns_{n}-前向传播过程计算当前层的feature map时的步长,
    kk-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 全局的计算方法

  • 全局感受野rr:通过上述方法,一步一步计算得出
  • 全局步进SS:等于经过所有层的步进累乘, S=s1s2s3...sn1snS = s_{1} · s_{2} · s_{3} ... · s_{n-1} · s_{n}
  • 全局扩充PP:经过的所有层所加padding都可以等效加在输入图像,等效值P,直接用卷积的输入输出公式反推出P即可 P=[(fout1)S+rfin]/2P = [(f_{out} - 1) * S + r - f_{in}] / 2

3.2 从前往后计算方法

这里介绍的方式是通用的,来自一篇著名博客(需翻墙),再次强调上述方法的结果是这里的完全一致。
文中给出了通用的计算公式,也是逐层计算,不同点在于这里是从前往后计算,核心四个公式:nout=nin+2pks+1jout=jinsinrout=rin+(k1)jinstartout=startin+(k12p)jin\begin{aligned} n_{o u t} &=\left|\frac{n_{i n}+2 p-k}{s}\right|+1 \\ j_{o u t} &=j_{i n} * s_{i n} \\ r_{o u t} &=r_{i n}+(k-1) * j_{i n} \\ \operatorname{start}_{o u t} &=\operatorname{start}_{i n}+\left(\frac{\mathrm{k}-1}{2}-\mathrm{p}\right) * j_{i n} \end{aligned}
上式中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时不变

博客中还给出了一个计算示例:
CNN中的感受野

3.3 下图展示了感受野的变化过程

CNN中的感受野

3. 有效感受野

NIPS 2016论文Understanding the Effective Receptive Field in Deep Convolutional Neural Networks提出了**有效感受野(Effective Receptive Field, ERF)**理论,论文发现并不是感受野内所有像素对输出向量的贡献相同,在很多情况下感受野区域内像素的影响分布是高斯,有效感受野仅占理论感受野的一部分,且高斯分布从中心到边缘快速衰减,下图第二个是训练后CNN的典型有效感受野。

相关文章:

  • 2021-09-13
  • 2021-04-07
  • 2021-11-22
  • 2021-04-27
  • 2021-11-08
  • 2022-12-23
  • 2021-05-10
猜你喜欢
  • 2021-12-18
  • 2022-12-23
  • 2021-07-18
  • 2022-01-23
  • 2021-05-06
相关资源
相似解决方案