对CNN感受野一些理解

感受野(receptive field)被称作是CNN中最重要的概念之一。为什么要研究感受野呐?主要是因为在学习SSD,Faster RCNN框架时,其中prior box和Anchor box的设计,一直搞不明白。当我理解了感受野才有点恍然大悟的感觉。快速看完这篇文章的前提是,要对CNN有个大致了解,feature map等术语要知道。

先看八股式定义,感受野:在卷积神经网络CNN中,决定某一层输出结果中一个元素所对应的输入层的区域大小,被称作感受野receptive field。我们看这段定义非常简单,用数学的语言就是感受野是CNN中的某一层输出结果的一个元素对应输入层的一个映射。再通俗点的解释是,feature map上的一个点对应输入图上的区域。注意这里是输入图,不是原始图。好多博客写的都是原图上的区域,经过一番的资料查找,发现并不是原图。

另外加上一句,目前流行的物体识别方法都是围绕感受野来做的设计,就如上文提到的SSD和Faster RCNN。理解好感受野的本质我觉的有两个好处。一,理解卷积的本质;二,更好的理解CNN的整个架构。

看看感受野的计算和可视化是怎么回事?

对CNN感受野一些理解-LMLPHP

如上图所示,原文上是这样讲的,我们采用卷积核C的核大小(kernel size)k=3*3,填充大小(padding size)p=1*1,步长(stride)s=2*2。(图中上面一行)对5*5的输入特征图进行卷积生成3*3的绿色特征图。(图中下面一行)对上面绿色的特征图采用相同的卷积操作生成2*2的橙色特征图。(图中左边一列)按列可视化CNN特征图,如果只看特征图,我们无法得知特征的位置(即感受野的中心位置)和区域大小(即感受野的大小),而且无法深入了解CNN中的感受野信息。(图中右边一列)CNN特征图的大小固定,其特征位置即感受野的中心位置。

说的有点晦涩难懂,应该是学术的讲法,在我这里理解就是,左图是常规的卷积过程。右图呐?卷积后的图像和原图一样大,这个操作起来并不难,就是各个特征(可以理解为图像中的像素点)的位置在卷积后保持不变,空的部分用空白来填充。这样做有什么好处,在我们后面会说到。只要注意到,左图和右图在卷积后,其特征的数目(绿色和黄色点的数目)是一样的。

感受野的计算:

对CNN感受野一些理解-LMLPHP

看上图,信息量很大,内容很多,有CNN的卷积过程,有感受野的计算公式和过程。弄懂了上图就知道感受野到底是个怎么回事了。

还记得感受野的定义吗?具体看layer1的feature map左上角带有红点的特征(可以理解为一个像素),它对应输入layer0的区域大小就是我们要计算的感受野。

很显然,经过3*3卷积核卷积后,它对应layer0层上的灰色区域(可别忘了还有padding哦!)

再看layer1到layer2的过程,卷积过程的第一步是先加padding,p2=1,这里的1是特征所占的区域,换句话说就是一个特征所占的感受野。所以Conv2过程这张图才会在外面加上了三个格。s2=2也是同样的道理,步长也是跨过两个特征。k2=3也是如此,包含3*3个特征。经过卷积后就来到了layer2了,左上角特征的感受野大小也很明显了,就是灰色部分。它这一个点可要完成接下来组织交代的历史任务。

这整个过程下来,是不是明白点意思了。感受野的计算有卷积逆过程的意思,这里我不能给出直接的定义,因为还没有权威这么说。之前讲了,明白了感受野的计算能更好理解卷积过程对吧。从上图我们再琢磨一下。特征图的大小逐渐变小,一个特征表示的信息量越来越大,这不就是有点压缩的意思嘛。将原图感兴趣的信息提取出来,不关注的统统抛掉。提的过程就是CNN的前向传播,抛的过程就是CNN的反馈学习。这里畅想一下,如果卷积核的大小能够变化那又是一番景象啊。

再看感受野的计算公式数学定义:

除了每个维度上特征图的个数,还需要计算每一层的感受野大小,因此我们需要了解每一层的额外信息,包括:当前感受野的尺寸r,相邻特征之间的距离(或者jump)j,左上角(起始)特征的中心坐标start,其中特征的中心坐标定义为其感受野的中心坐标(如上述固定大小CNN特征图所述)。假设卷积核大小k,填充大小p,步长大小s,则其输出层的相关属性计算如下:

对CNN感受野一些理解-LMLPHP

  • 公式一基于输入特征个数和卷积相关属性计算输出特征的个数
  • 公式二计算输出特征图的jump,等于输入图的jump与输入特征个数(执行卷积操作时jump的个数,stride的大小)的乘积
  • 公式三计算输出特征图的receptive field size,等于k个输入特征覆盖区域对CNN感受野一些理解-LMLPHP加上边界上输入特征的感受野覆盖的附加区域对CNN感受野一些理解-LMLPHP
  • 公式四计算第一个输出特征的感受野的中心位置,等于第一个输入特征的中心位置,加上第一个输入特征位置到第一个卷积核中心位置的距离对CNN感受野一些理解-LMLPHP,再减去填充区域大小对CNN感受野一些理解-LMLPHP。注意:这里都需要乘上输入特征图的jump,从而获取实际距离或间隔。
05-11 11:22