#感受野#
感受野定义:
感受野(Receptive Field)的定义:卷积神经网络每一层输出的特征图(feature map)上的像素点映射回输入图像上的区域大小。通俗点的解释是,特征图上一点,相对于原图的大小,也是卷积神经网络特征所能看到输入图像的区域。
感受野的作用:
1、小尺寸的卷积代替大尺寸的卷积,可减少网络参数、增加网络深度、扩大感受野(例如:3 个 3 x 3 的卷积层的叠加可以替代7*7的卷积),网络深度越深感受野越大性能越好;
2、对于分类任务来说,最后一层特征图的感受野大小要大于等于输入图像大小,否则分类性能会不理想;
3、对于目标检测任务来说,若感受野很小,目标尺寸很大,或者目标尺寸很小,感受野很大,模型收敛困难,会严重影响检测性能;所以一般检测网络anchor的大小的获取都要依赖不同层的特征图,因为不同层次的特征图,其感受野大小不同,这样检测网络才会适应不同尺寸的目标。
举例:
假设输入层的大小为 5 x 5,局部感受野(或称卷积核)的大小为 3 x 3,那么输出层一个神经元所对应的计算过程(下文简称「卷积计算过程」)如下:

每个卷积核对应的权重 W 在计算卷积过程中,值是固定的,我们称为权重共享。
如果将输入层想像成黑板,局部感受野就像是黑板擦,他会从左往右,从上至下的滑动,每次滑动 1 个步长(Stride)并且每次滑动都重复上述的计算过程,我们就可以得到输出的特征图(feature map),如下图:
有时候,按照规定步数滑动到黑板边缘时,黑板擦一部分会露出在黑板外,这个时候就 不能够顺利执行卷积过程了,解决的方法是填充,常见的有两种填充(Padding)方法,第一种方法为 Valid,第二种方法为 Same,如下图所示:

Valid 是丢弃的方法,比如上述的 input_width = 7,kernel_width = 5,stride = 3,只允许滑动 1 次,多余的元素则丢掉。
Same 是补全的方法,对于上述的情况,允许滑动 3 次,但是需要补 4 个元素,左边补 2 个 0,右边补 2 个 0,这种方法则不会抛弃边缘的信息,关于如何计算填充数量会在下小节中讲到。
在实际应用中,输入的都为彩色图像(RGB 三通道),也就是说输入的维度是 [图片数,图片高,图片宽,通道数],这个时候,执行卷积的过程:

特征图大小计算公式:
假定:
- 输入图片 i(只考虑输入宽高相等)
- 卷积核大小 f
- 步长 s
- 填充的像素数 p
则特征图大小o计算公式如下:

-
当填充方式为 VALID 时,p 值等于 0,代入相应的 i,f,p,s 就可以相应的计算出 o 值了。
-
当填充方式为 SAME 时,步长 s 为 1 时,输出的 o == i,我们则可以计算出相应的 P 值为 p = (f-1) / 2
感受野的计算
(1)注意:
1、感受野大小的计算方式是从最后一层feature map开始,往下往上的计算方法,即先计算最深层在前一层上的感受野,然后以此类推逐层传递到第一层。
2、感受野大小的计算不考虑padding的大小;
3、最后一层的特征图感受野的大小等于其卷积核的大小;
4、第i层特征图的感受野大小和第i层的卷积核大小和步长有关系,同时也与第(i+1)层特征图的感受野大小有关。
(2)感受野计算公式:
其中, 表示
层感受野大小,
表示当前特征层的层数,
是卷积的步长,
是本层卷积核的大小。
例子:
| Layer Type | Kernel Size | Stride |
|---|---|---|
| Input | ||
| Conv1 | 3*3 | 1 |
| Pool1 | 2*2 | 2 |
| Conv2 | 3*3 | 1 |
| Pool2 | 2*2 | 2 |
| Conv3 | 3*3 | 1 |
| Conv4 | 3*3 | 1 |
| Pool3 | 2*2 | 2 |
从最后一层的Pool3池化层开始计算感受野:
pool3:RF=2(最后一层池化层输出特征图的感受野大小等于卷积核的大小)
conv4:RF=(2-1)*1+3=4
conv3:RF=(4-1)*1+3=6
pool2:RF=(6-1)*2+2=12
conv2:RF=(12-1)*1+3=14
pool1:RF=(14-1)*2+2=28
conv1:RF=(28-1)*1+3=30
因此,pool3输出的特征图在输入图片上的感受野为30*30。

浙公网安备 33010602011771号