感触野

卷积神经网络中,感触野(Receptive Field)的界说是卷积神经网络每一层输出的特征图(feature map)上每个像素点在原始图画上映射的区域巨细,这儿的原始图画是指网络的输入图画,是经过预处理(如resize,warp,crop)后的图画。

神经元之所以无法对原始图画的一切信息进行感知,是因为在卷积神经网络中普遍使用卷积层和pooling层,在层与层之间均为部分衔接。

神经元感触野的值越大表明其能接触到的原始图画规模就越大,也意味着它或许包括更为全局,语义层次更高的特征;相反,值越小则表明其所包括的特征越趋向部分和细节。因而感触野的值能够用来大致判断每一层的抽象层次.

总而言之,咱们感触野就额是要求神经网络中心某一层的输出特征图上的一个元素地点原图上的覆盖巨细.

感触野的核算

如下图所示的原始图画,经过kernel_size=3, stride=2的Conv1,kernel_size=2, stride=1的Conv2后,输出特征图巨细为22,很明显,原始图画的每个单元的感触野为1,Conv1的每个单元的感触野为3,而因为Conv2的每个单元都是由规模的Conv1构成,因而回溯到原始图画,每个单元能够看到巨细的区域规模。

卷积神经网络(CNN)中感触野的核算问题

那么卷积神经网络的每一层感触野应该如何核算呢?很明显,深层卷积层的感触野巨细和它之前一切层的滤波器巨细和步长有联系,而涉及到这两个参数的有卷积层和pooling层。咱们用分别kn,sn,rn表明第n层的kernel_size,stride,receptive_field,经过对n-1层输出特征图的knkn个感触野为rn−1的特征单元卷积得到的n层输出特征单元最大的感触野为rn−1kn,但在对n-1层输入特征图进行卷积时,常常会因为sn−1小于kn−1而存在堆叠,因而要减去个堆叠部分(kn=2存在一个堆叠部分,kn=3存在两个堆叠部分)。

堆叠的部分怎么算呢?明显堆叠的部分一定是与你的stride的有关的,假如你的stride很大,明显是不会有重合,所以,越小重合越多.(留意:这儿核算的是在原图上的重合)

明显,kn−sn表明的是一次重合的多少。假如要核算在原图上的重合,则

(kn−sn)rn−1

是不是很简单啊,由此咱们能够知道要求第n层输出的感触野,就要知道前一层n-1的感触野,以及本层的kernel和stride巨细,这是一个不断递推的进程.

关于卷积神经网络,其感触野核算有如下规则:

卷积神经网络(CNN)中感触野的核算问题

或者写为:

卷积神经网络(CNN)中感触野的核算问题

卷积神经网络(CNN)中感触野的核算问题

另一种核算卷积核的方法——逆向

从当时层开端核算,渐渐往上核算:

RF=(RF−1)∗stride kernelsize

卷积神经网络(CNN)中感触野的核算问题

如何添加感触野

在深度学习中,对详细的使命有时需求添加感触野来进步性能,比如在人体姿势估计中,大的感触野对学习长距离的空间位置联系(long-range spatial relationship),建立内隐空间模型(implicit spatial model)有帮助,因而也要知道增大感触野的手段。

根据以上说的感触野的核算,也能够分分出,添加层数、增大strides,添加fsize即卷积滤波器的巨细都能够添加感触野的巨细。

在看CPM(Convolutional Pose Machines) 时,作者做了一个简单的总结:

Large receptive fields can be achieved either by pooling at the expense of precision, increasing the kernel size of the convolutional filters at the expense of increasing the number of parameters, or by increasing the number of convolutional layers at the risk often countering vanishing gradients during training.

总结一下共三种方法:

  • 添加pooling层,可是会降低准确性(pooling进程中造成了信息损失)
  • 增大卷积核的kernel size,可是会添加参数(卷积层的参数核算参考[2])
  • 添加卷积层的个数,可是会面对梯度消失的问题(梯度消失参考[3])

CPM中作者用的添加卷积层个数的方法来添加感触野,可是他用多阶段训练的方法并引入中心层监督的方法来处理梯度消失的问题。