关于感受野的计算有许多问题。这在StackOverflow上解释得很好,这里可以找到详细的说明。
然而,关于如何在完全卷积层中计算感受野,即在包含残差块、特征图拼接和上采样层(如特征金字塔网络)的情境下,目前还没有相关的博客或教程。
-
据我所知,残差块和跳跃连接不会影响感受野,可以忽略。答案可以在这里找到。
-
上采样层如何处理?例如,如果我们有一个有效感受野为900的层,之后跟随一个上采样层,感受野会减半吗?
-
当与前层特征图拼接时,感受野会发生变化吗?
提前感谢!
回答:
为了逐一回答你的问题,我们首先从这个上下文中感受野的定义开始:
单个感觉神经元的感受野是指在感觉空间的特定区域(例如,身体表面或视野),在这个区域内刺激会改变该神经元的放电情况。
如从维基百科所述。这意味着我们正在寻找输入中所有影响当前输出的像素。逻辑上,如果你进行卷积操作——例如,使用一个3×3的滤波核——单个像素的感受野就是在该特定步骤中卷积的输入区域中对应的3×3图像区域。
从视觉上看,在这个图形中,底部的较暗区域标记了输出中特定像素的感受野:
现在,回答你的第一个问题:残差块当然仍然会影响感受野!我们将残差块表示如下:
F(X)
:残差块g_i(X)
:单个卷积块
然后我们可以将残差块表示为F(X) = g_3(g_2(g_1(X))) + X
,因此在这个例子中我们将堆叠3个卷积(作为示例)。当然,这个卷积的每一层仍然会改变感受野,因为这与开头解释的一样。简单地再次加上X当然不会改变感受野。但仅此加法并不会构成一个残差块。
同样,跳跃连接不会以跳过层的方式影响感受野,因为跳过层几乎总是会导致不同的(通常是较小的)感受野。正如你在链接的答案中所解释的,如果你的跳跃连接具有更大的感受野,那将会有所不同,因为感受野是通过你的流程图中不同路径的不同区域的最大值(更具体地说,是并集)。
关于上采样层的问题,你可以通过问自己以下问题来猜测答案:输入图像的区域是否在图像内的任何地方受到上采样的影响?
答案应该是“显然没有”。本质上,你仍然在查看输入区域的相同区域,尽管现在你有了更高的分辨率,类似的像素实际上可能在查看相同的区域。回到上面的GIF图:如果你在绿色区域中拥有4倍的像素数,每个像素仍然必须查看蓝色区域中特定的大小不变的输入区域。所以,不,上采样不影响这一点。
对于最后一个问题:这与第一个问题非常相关。实际上,感受野查看所有影响输出的像素,因此根据你拼接的特征图,它可能会发生变化。
同样,结果的感受野是你拼接的特征图的感受野的并集。如果它们彼此包含(要么A是B的子集
,要么B是A的子集
,其中A
和B
是要拼接的特征图),那么感受野不会改变。否则,感受野将是A并B
。