最近面试问到了有关感受野的知识,所以总结 了一下:
参考链接:CNN中感受野的计算、深度学习中的感受野计算
定义:感受野就是网络中输出特征图对应输入图像的区域。简单地说,就是特征图里面的一个元素受输入图像多大区域像素的影响。
所以根据定义,如果我们只计算某两个连续层之间的感受野,则可以通过直接画图,看输入图像多大的范围对应特征图中的一个点来确定两者之间的感受野。
但是,如果网络比较深,那么计算最后的特征图和输入图像的感受野,则变得异常麻烦。好在有人已经总结了公式,如下:
k_j表示的第j层的kernel_size,s_j表示第j层的stride.这个式子分为两部分,一部分是指k_j,即局部感受野,另一部分是stride,可理解为当前层在每多一个原子,上一层的感受野多增加stride个(在第一个局部感受野的基础上增加的;
其中,F(i,i)=1;i为最后一层,0为输入层。一般算到F(i,0)。
下面我拿一个例子来算算:
答案如下:
pool3的一个输出对应pool3的输入大小为2*2
对应conv4的输入为4*4
对应conv3的输入为6*6
对应pool2的输入为12*12
对应conv2的输入为14*14
对应pool1的输入为28*28
对应conv1的输入为30*30
所以pool3的感受野大小就是30*30
卷积中的特征图大小计算方式有两种,分别是‘VALID’和‘SAME’,卷积和池化都适用,除不尽的结果都向上取整。
1.如果计算方式采用'VALID',则:
其中为输出特征图的大小,为输入特征图的大小,F为卷积核大小,stride为卷积步长。
2.如果计算方式采用'SAME',输出特征图的大小与输入特征图的大小保持不变,
其中padding为特征图填充的圈数。
若采用'SAME'方式,kernel_size=1时,padding=0;kernel_size=3时,padding=1;kernel_size=5时,padding=3
---------------------
作者:HelloZEX
来源:优快云
原文:https://blog.youkuaiyun.com/HelloZEX/article/details/81109136
版权声明:本文为博主原创文章,转载请附上博文链接!