我正在从一篇论文中读到这篇文章:“我不是在第一个转换层中使用相对较大的感受域,而是在整个网络中使用非常小的3×3感受域,这些字段与每个输入的输入卷积在一起像素(有步幅1)。很容易看出,两个3×3转换层的堆叠(中间没有空间池)具有5×5的有效感受域;三个这样的层具有7×7有效接收场“。
他们如何以7x7的重复领域结束?
这就是我理解的方式:假设我们有一个100x100的图像。
第一层:对图像进行零填充并使用3x3滤镜对其进行处理,输出另一个100x100滤镜图像。
第二层:对先前过滤的图像进行零填充,并将其与另一个3x3过滤器进行卷积,输出另一个100x100过滤后的图像。
第3层:对先前过滤的图像进行零填充,并将其与另一个3x3过滤器进行卷积,输出最终的100x100过滤图像。
我在那里错过了什么?
答案 0 :(得分:6)
这是一种思考方式。考虑以下小图像,每个像素编号如下:
00 01 02 03 04 05 06
10 11 12 13 14 15 16
20 21 22 23 24 25 26
30 31 32 33 34 35 36
40 41 42 43 44 45 46
50 51 52 53 54 55 56
60 61 62 63 64 65 66
现在考虑中心的像素33。对于第一个3x3卷积,像素33处的生成值将包含像素22,23,24,32,33,34,42,43和44的值。但请注意,每个像素也将包含他们的周围的像素值。
对于下一个3x3卷积,像素33将再次合并其周围像素的值,但现在,这些像素的值合并了来自原始图像的周围像素。实际上,这意味着像素33的值由达到5x5“平方影响力”的值来控制。
每个额外的3x3卷积都会使每个方向上的另一个像素拉伸有效的感受野。
我希望这不会让它更令人困惑......
答案 1 :(得分:2)
16 ------> Layer3
13 14 15 ------->Layer2
8 9 10 11 12 ------->Layer1
1 2 3 4 5 6 7 ------->Input Layer
为了更清晰,我们考虑用1D代替2D。将每个数值视为一个像素,将每个垂直水平视为卷积层。现在让我们决定每层的感受野(F)= 3,填充(P)= 0和步幅(S)= 1。 W 是每层0的数字。因此通过公式:
W_j+1 = ((W_j - F + 2P)/S +1)
在这种情况下,我们在输入层有7个像素,因此通过使用上面的公式,您可以轻松计算每个上层的层数。现在,如果您在第3层看到名为16的像素,它将从13 14和15接收它的输入,因为F = 3。类似地,13,14和15分别从(8 9 10),(9 10 11)和(10 11 12)获得输入,原因与S = 1和F = 3相同。
同样,8将从(1 2 3)获得输入,9从(2 3 4)获得输入,......,12从(5 6 7)获得输入。
因此,如果你看到w.r.t为16,它将从所有底部7个像素中获得它的输入。
现在使用小型感受野的主要优点是双重的。首先,与使用较大的感受野相比,参数数量较少,而其他我们已将非线性很好地包含在底部7像素的组合中,如果使用大的感受野,这是不可能的。我建议你去检查当然这个令人敬畏的链接(下面)当然是CS231,所有这些都在那里得到了很好的解释。
答案 2 :(得分:0)
我认为@ Aenimated1提供了一个很好的答案。但@chirag提供的链接提供了一个很好的方法来回答。我再次粘贴这里的链接给任何其他来这里的人:
[1]: http://cs231n.github.io/convolutional-networks/
回答问题的具体摘录是:
假设您将三个3x3 CONV层堆叠在一起(当然,其间具有非线性)。在这种布置中,第一CONV层上的每个神经元具有输入体积的3×3视图。第二CONV层上的神经元具有第一CONV层的3×3视图,因此通过扩展获得输入体积的5×5视图。类似地,第三个CONV层上的神经元具有第二个CONV层的3x3视图,因此输入音量为7x7视图。
为了支持这个答案,我发现这篇文章可能非常有用。它回答了有关容器领域的任何疑问:
答案 3 :(得分:0)
假设我们有一个仅的网络架构,其中包含多个卷积层。对于每个卷积层,我们定义一个平方核大小和一个膨胀率。另外,假设步幅为1。因此,您可以通过以下python代码计算网络的接收场:
K=[3,3] # Kernel Size
R=[1,2] # Dilation Rate
RF=1
d=1 # Depth
for k,r in zip(K,R):
support=k+(k-1)*(r-1) # r-dilated conv. adds r-1 zeros among coefficients
RF=support+(RF-1)
print('depth=%d, K=%d, R=%d, kernel support=%d'%(d,k,r,support))
d=d+1
print('Receptive Field: %d'%RF)
作为一个例子,让我们计算众所周知的DnCNN(去噪卷积神经网络)[1]的感受野(RF)。 将上面的代码与以下输入配合使用,以计算该网络的RF。 (您将获得RF = 35)。
# In DnCNN-S, the network has 17 convolution layers.
K=[3]*17 # Kernel Size
R=[1]*17 # Dilation Rate
[1] Zhang Kai Kai等。 “除了高斯降噪器之外,还可以对深度cnn进行残差学习以进行图像降噪。” IEEE Transactions on Image Processing 26.7(2017):3142-3155。