深度学习网络基础——感受野

深度学习网络基础——感受野

什么是感受野

感受野指的是特征图上的某个点在输入空间所受影响的区域。一个感受野可以用中心位置(center location)和大小(size)来表征。

感受野的计算

参考blog

1、首先计算卷积后特征图的尺寸

公式1:
N o u t = ⌊ N i n + 2 p − k s ⌋ + 1 N_{out} = \lfloor \frac{N_{in}+2p -k}{s}\rfloor+1 Nout=sNin+2pk+1

其中:
N o u t N_{out} Nout :输出特征图尺寸
N i n N_{in} Nin : 输入图像或特征图尺寸
k , p , s k,p,s k,p,s :分别为卷积核尺寸、padding 大小、滑动步长

例如:一个 5 x 5的图像,使用3 x 3的卷积核,步长为1,padding 为 0 ,
那么输出结果为:3 x 3的特征图。

import torch

input = torch.rand(1, 1, 5, 5)
print(input.shape)
conv1 = torch.nn.Conv2d(1, 1, kernel_size=3, stride=1, padding=0)
conv2 = torch.nn.Conv2d(1, 1, kernel_size=3, stride=1, padding=1)
out1 = conv1(input)
out2 = conv2(input)
print(out1.shape)
print(out2.shape)

结果输出:
深度学习网络基础——感受野_第1张图片

2、感受野计算

N o u t = ⌊ N i n + 2 p − k s ⌋ + 1 N_{out} = \lfloor \frac{N_{in}+2p -k}{s}\rfloor+1 Nout=sNin+2pk+1

  • 公式1根据输入特征图大小以及卷积参数计算输出特征图大小,

1 、计算输出特征图的特征间的间隔 j j j
j o u t = j i n ∗ s j_{out} = j_{in}*s jout=jins
s s s 为卷积的步长,
其等于上一层的间隔值乘以卷积的步长,所以间隔值将是按照步长呈指数级增长。

2 、计算输出特征图的感受野大小
r o u t = r i n + ( k − 1 ) ∗ j i n r_{out} = r_{in}+(k-1)*j_{in} rout=rin+(k1)jin
r i n r_{in} rin是前一层感受野大小 , k k k为卷积核大小所以感受野是呈指数级增加。

3 、计算输出特征图的第一个特征感受野的中心坐标
s t a r t o u t = s t a r t i n + ( k − 1 2 − p ) ∗ j i n start_{out} = start_{in}+(\frac{k-1}{2}-p)*j_{in} startout=startin+(2k1p)jin
两项都要乘以前一层的间隔距离以得到实际距离。

计算实例:
如下图,Layer 0 为输入层,大小 5 x 5,感受野大小r0 = 1, 特征间隔j0 = 1start = 0.5(中心点坐标)

使用k = 3, p=1, s=2 进行卷积操作,
N o u t = ⌊ 5 + 2 ∗ 1 − 3 2 ⌋ + 1 = 3 N_{out} = \lfloor \frac{5+2*1-3}{2}\rfloor+1 = 3 Nout=25+213+1=3
得到 3 x 3的输出特征图Layer 1
那么 r1 = 1 * 2 = 2, j1 = 1 + (3 - 1) * 1 = 3
start1 = 0.5 + [(3 - 1) / 2 - 1] * 1 = 0.5

同理可以计算出下一层的感受野。
深度学习网络基础——感受野_第2张图片

其他方法

关于感受野大小的计算方式是采用从最后一层往下计算的方法,即先计算最深层在前一层上的感受野,然后逐层传递到第一层,使用的公式可以表示如下:

r i = ( r i + 1 − 1 ) ∗ s i + k i r_{i} = (r_{i+1} - 1) * s_i+k_i ri=(ri+11)si+ki

其中, r i r_i ri是第 i i i层卷积层的感受野, r i + 1 r_{i+1} ri+1 i + 1 i+1 i+1层上的感受野,s是卷积的步长,k是本层卷积核的大小。

你可能感兴趣的:(ML&DL,深度学习,神经网络)