问题来源
讲论文的时候,突然被别人问到感受野 是个什么东东? 就百度查了一下:
重要知识链接总结
画深度学习的模型图方法:知网链接 神经网络模型图网站:画模型
感受野
一、感受野的概念
感受野(Receptive Field)的定义:卷积神经网络每一层输出的特征图(feature map)上的像素点映射回输入图像上的区域大小。通俗点的解释是,特征图上一点,相对于原图的大小,也是卷积神经网络特征所能看到输入图像的区域。
二、举例说明
-
若输入图像的尺寸大小是5*5,经过两次3*3的卷积核(其中stride=1,padding=0)后,其感受野大小为5*5,如下图所示: (由卷积计算公式:N=(W-F+2P)/S+1,得到第一次卷积后的图像大小为3*3,第二次卷积后的图像大小为1*1) -
若输入图像的尺寸大小是7*7,经过三次3*3的卷积核(其中stride=1,padding=0)后,其感受野大小为7*7,如下图所示: (由卷积计算公式:N=(W-F+2P)/S+1,得到第一次卷积后的图像大小为5*5,第二次卷积后的图像大小为3*3,第三次卷积后的图像大小为1*1)
三、感受野的计算
-
注意: 1、感受野大小的计算方式是从最后一层feature map开始,往下往上的计算方法,即先计算最深层在前一层上的感受野,然后以此类推逐层传递到第一层。 2、感受野大小的计算不考虑padding的大小; 3、最后一层的特征图感受野的大小等于其卷积核的大小(见上面示例图); 4、第i层特征图的感受野大小和第i层的卷积核大小和步长有关系,同时也与第(i+1)层特征图的感受野大小有关。(为什么?) -
感受野计算公式:
R
F
i
=
(
R
F
i
+
1
?
1
)
×
?stride?
i
+
K
size?
R F_{i}=\left(R F_{i+1}-1\right) \times \text { stride }_{i}+K_{\text {size }}
RFi?=(RFi+1??1)×?stride?i?+Ksize?? 其中,
R
F
i
R F_{i}
RFi?表示
i
i
i 层感受野大小,
i
i
i 表示当前特征层的层数,
s
t
r
i
d
e
stride
stride 是卷积的步长,
K
size
K_{\text{size}}
Ksize? 是本层卷积核的大小。 -
例子: 从最后一层的Pool3池化层开始计算感受野:
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。
四、感受野的应用
感受野的作用: 1、小尺寸的卷积代替大尺寸的卷积,可减少网络参数、增加网络深度、扩大感受野(例如:3 个 3 * 3 的卷积层的叠加可以替代7*7的卷积),网络深度越深感受野越大性能越好; 2、对于分类任务来说,最后一层特征图的感受野大小要大于等于输入图像大小,否则分类性能会不理想; 3、对于目标检测任务来说,若感受野很小,目标尺寸很大,或者目标尺寸很小,感受野很大,模型收敛困难,会严重影响检测性能;所以一般检测网络anchor的大小的获取都要依赖不同层的特征图,因为不同层次的特征图,其感受野大小不同,这样检测网络才会适应不同尺寸的目标。
|