#感受野#

感受野定义:

感受野(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 TypeKernel SizeStride
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。

 

posted @ 2021-09-23 19:31  tanyayangyang  阅读(760)  评论(0)    收藏  举报