感受野手记
感受野(receptive field)是卷积神经网络(Convolutional Neural Network,CNNs)中最重要的概念之一,当前流行的物体识别方法的架构大都围绕感受野的设计。
从CNN可视化的角度来讲,感受野就是输出featuremap某个节点的响应对应的输入图像的区域就是感受野。
比如我们第一层是一个3*3的卷积核,那么我们经过这个卷积核得到的featuremap中的每个节点都源自这个3*3的卷积核与原图像中3*3的区域做卷积,那么我们就称这个featuremap的节点感受野大小为3*3。
如果再经过pooling层,假定卷积层的stride是1,pooling层大小2*2,stride是2,那么pooling层节点的感受野就是4*4。
有几点需要注意的是,padding并不影响感受野,stride只影响下一层featuremap的感受野,size影响的是该层的感受野。
至于如何计算感受野,我的建议是top to down的方式。下面我拿一个例子来算算
pool3的一个输出对应pool3的输入大小为2*2
依次类推,对应conv4的输入为4*4,因为2*2的每个角加一个3*3的卷积核,就成了4*4,当然这是在stride=1的情况下才成立的,但是一般都是stride=1,不然也不合理
对应conv3的输入为6*6
对应pool2的输入为12*12
对应conv2的输入为14*14
对应pool1的输入为28*28
对应conv1的输入为30*30
所以pool3的感受野大小就是30*30
(该计算里,遇到卷积就把n*n做(n+2)*(n+2),遇到2*2池化就(n*2)*(n*2),这是由于卷积核大小3*3,例如在第一行卷积到最后一个值的时候,3*3的最左边一列搭在输入上,右边有两列都是padding,因此比原图大了两列,行同理,所以最后就多了两行两列)。