卷积神经网络中感受野的理解和计算

什么是感受野

“感受野”的概念来源于生物神经科学,比如当我们的“感受器”,比如我们的手受到刺激之后,会将刺激传输至中枢神经,但是并不是一个神经元就能够接受整个皮肤的刺激,因为皮肤面积大,一个神经元可想而知肯定接受不完,而且我们同时可以感受到身上皮肤在不同的地方,如手、脚,的不同的刺激,如痛、痒等。这说明皮肤感受器是由很多不同的神经元控制的,那么每一个神经元所能够反映的那块感受器的区域就称之为“感受野”,感受野即每一个神经元所支配的区域,也可以说这个神经元的活动受到那一块区域的影响。

卷积神经网络中,整个卷积运算的过程正好和上面的皮肤刺激过程类似,我们可以将原始图像对应看成感受器(皮肤),将最终的输出看成是做出反应的那个神经元。最终输出到底是什么状态(神经元的状态)所受到的初始图像哪一块区域的影响(受到那一块皮肤的刺激)不正是上面所描述的过程吗?于是我们给出感受野的定义如下:

卷积神经网络每一层输出的特征图(feature map)上的像素点在原始图像上映射的区域大小;通俗点说,就是图像的最终输出的每一个特征(每一个像素)到底受到原始图像哪一部分的影响。

在这里插入图片描述

图解说明

为了更好地说明整个卷积神经网络的工作过程,下面以一个例子说明,原始图像的大小为10x10,一共设计了5个网络层,前面4个是卷积层,卷积核的大小为3x3,最后一个是池化层,大小为2x2,为了较简单的说明,本次所有的步幅stride均为1.

注意:感受野在计算的时候不考虑“边界填充”,因为填充的边界已经不是原始图像本身的内容了,感受野描述的是输出特征到原始图像的映射关系,故而不考虑padding 。实际建模过程中可能需要填充边界,原理一样,只是计算稍微复杂点。

图解步骤拆分
1. 第一次卷积运算

在这里插入图片描述
从上面可以看出:第一层网络输出的图像中,输出结果为8x8,output1输出的每一个特征(即每一个像素)受到原始图像的3x3区域内的影响,故而第一层的感受野为3,用字母表示为

RF1=3 (每一个像素值与原始图像的3x3区域有关)

2. 第二次卷积运算

在这里插入图片描述

从上图可以看出,经历两次卷积运算之后,最终的输出图像为6x6,output2输出的每一个特征(即每一个像素)受到output1的范围影响为3x3,而output1中的这个3x3又收到原始图像的5x5的范围的影响,故而第二层的感受野为5,即

RF2=5 (每一个像素值与原始图像的5x5区域有关)

3. 第三次卷积运算

在这里插入图片描述
从上图可以看出,经历三次卷积运算之后,最终的输出图像为4x4,output3输出的每一个特征(即每一个像素)受到output2的范围影响为3x3,而output2中的这个3x3又受到output1的5x5的范围的影响,而output1中的这个5x5又受到原始图像的7x7的范围的影响,故而第三层的感受野为7,即

RF3=7 (每一个像素值与原始图像的7x7区域有关)

4. 第四次卷积运算

在这里插入图片描述

从上图可以看出,经历四次卷积运算之后,最终的输出图像为2x2,output4输出的每一个特征(即每一个像素)受到output3的范围影响为3x3,而output3中的这个3x3又受到output2的5x5的范围的影响,而output2中的这个5x5又受到output1的7x7的范围的影响,而output1中的这个7x7又受到原始图形的9x9的范围的影响,故而第四层的感受野为9,即

RF4=9 (每一个像素值与原始图像的9x9区域有关)

5. 第五次卷积运算

在这里插入图片描述
从上图可以看出,经历四次卷积运算和一次池化运算之后,最终的输出图像为1x1,output5输出的每一个特征(即每一个像素)受到output4的范围影响为2x2,而output4中的这个2x2又受到output3的4x4的范围的影响,而output3中的这个4x4又受到output2的6x6的范围的影响,而output2中的这个6x6受到output1的8x8的范围的影响,而output1中的这个8x8受到原始图像的10x10的范围的影响,故而第五层的感受野为10,即

RF5=10 (每一个像素值与原始图像的10x10区域有关)

结论: 从上面的地推过程可以看出,随着卷积层数的逐渐增加,感受野的范围在逐渐扩大,也就是说,越靠近后面的输出,所受到的图像的像素影响的范围更加宽阔。卷积神经网络正是通过这种层层推进的方式,每一个卷基层都能学习到不同的特征,最后实现相关的识别、分类等功能的。

递推公式

从上面的过程可以看出,感受野的推导是一个递推的过程,下面将展示这一过程。

RF1=3           k1(第一层的感受野,永远等于第一个卷积核的尺寸大小)k表示第几个卷积层

RF2=5       k1 + (k2-1)       RF1+ (k2-1)

RF3=7       k1 + (k2-1) + (k3-1)       RF2+ (k3-1)

RF4=9       k1 + (k2-1) + (k3-1) + (k4-1)       RF3+ (k4-1)

RF4=10       k1 + (k2-1) + (k3-1) + (k4-1) + (k5-1)       RF4+ (k5-1)

从上面可以看出,感受野的大小的求解是一个不断第一的过程,因为第一层的每一个像素的感受野始终是第一个卷积核的大小,故而RF1总是最先确定,然后以此类推,逐步求出RF2、RF3、RF4、RF5……

但是上面的所有步长均为 1 ,如果每一次卷积运算的步长 stride 不为1呢,同理,这里直接给出递推公式:

RFn=RFn-1 + (kn-1)*stride_n

其中stride_n表示的是第n次卷积的移动步幅stride。

求解过程是从RF1开始的。

感受野的例子

(1)两层33的卷积核卷积操作之后的感受野是55,其中卷积核(filter)的步长(stride)为1、padding为0,如图2所示:
在这里插入图片描述
图2:两层33卷积核操作之后的感受野是55

(2)三层33卷积核操作之后的感受野是77,其中卷积核的步长为1,padding为0,如图3所示:
在这里插入图片描述
图3:三层33卷积核操作之后的感受野是77

感受野的计算

感受野计算时有下面几个知识点需要知道:

  • 最后一层(卷积层或池化层)输出特征图感受野的大小等于卷积核的大小。
  • 第i层卷积层的感受野大小和第i层的卷积核大小和步长有关系,同时也与第(i+1)层感受野大小有关。
  • 计算感受野的大小时忽略了图像边缘的影响,即不考虑padding的大小。

关于感受野大小的计算方式是采用从最后一层往下计算的方法,即先计算最深层在前一层上的感受野,然后逐层传递到第一层,使用的公式可以表示如下:
在这里插入图片描述
其中,是第i层卷积层的感受野,是(i+1)层上的感受野,stride是卷积的步长,Ksize是本层卷积核的大小。

注意: 此公式与上边的递归公式在原理上是一致的,一个向前计算一个向后计算。

计算VGG16网络每层的感受野

(1)引例:VGG16网络有点复杂,我们先来计算一个简单的例子,先学会计算感受野,在来分析复杂的网络
在这里插入图片描述
图4:简单的网络结构

我们从最后一层的池化层开始计算感受野:

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。

(2)VGG16网络每层感受野计算
在这里插入图片描述
图5:VGG16网络结构
在VGG16网络中,我们从全连接层开始倒推,直到输入层,过程如下:

pool5:RF=2。(最后一层池化层输出特征图感受野的大小等于卷积核的大小)

conv5_3:RF=(2-1)* 2+2=4。

conv5_2:RF=(4-1)*1+3=6。

conv5_1:RF=(6-1)*1+3=8。

pool4:RF=(8-1)*2+2=16。

… … … … … … …

类推…

因此我们可以得出:pool5输出的特征图在输入图片上的感受野为212212;conv5_3输出的特征图在输入图片上的感受野为196196,其它层依次类推:

在这里插入图片描述
图6:VGG16网络感受野计算结果

总结

感受野是卷积神经网络中非常核心的概念,它有助于我们层层剖析每一步卷积所发生的过程,对于我们理解卷积神经网络的运算过程、本质原理都非常有帮助。

参考

  1. https://blog.csdn.net/qq_27825451/article/details/83302662
  2. https://blog.csdn.net/program_developer/article/details/80958716
  3. https://blog.csdn.net/SIGAI_CSDN/article/details/80743475(卷积神经网络为什么有效)

猜你喜欢

转载自blog.csdn.net/qq_36653505/article/details/83473943
今日推荐