1. 概述

在设计或理解卷积神经网络(CNN)时,感受野(Receptive Field)是一个非常关键的概念。它帮助我们分析网络结构的内部机制,并为优化模型提供依据。

简单来说,感受野是指输入图像中影响某个卷积层输出特征的区域大小。这个概念在图像分割、目标检测等任务中尤为重要。例如在图像分割中,如果网络的感受野不够大,就可能无法完整识别大尺寸物体的边界,导致预测结果不完整。

2. 定义与理解

感受野可以理解为:某个卷积层中的一个输出特征值,是由输入张量中的哪一部分区域经过卷积运算得到的。

举个例子:

感受野示意图

这是一个两层卷积网络的示意图。绿色区域是第二层中一个像素的感受野,黄色区域是第三层一个像素的感受野。可以看到,随着网络加深,感受野逐渐扩大。

我们通常最关心的是输入层的感受野大小,即最终输出特征所依赖的输入图像区域。这直接影响模型对输入信息的感知范围。

3. 计算原理

3.1. 符号说明

我们考虑一个全卷积网络(Fully Convolutional Network, FCN),共 L 层,记第 l 层的输出为 fₗ,输入图像为 f₀,最后一层输出为 fᴸ。

每层卷积操作有三个参数:

  • kₗ:卷积核大小(kernel size)
  • sₗ:步长(stride)
  • pₗ:填充(padding)

我们的目标是计算输入层的感受野大小 r₀。

3.2. 递推公式

我们可以通过递归的方式从最后一层反推到输入层:

递推公式

$$ r_{l-1} = s_l \cdot r_l + (k_l - s_l) $$

这个公式考虑了卷积核和步长之间的差异,当 kₗ > sₗ 时,卷积之间会有重叠;当 kₗ < sₗ 时,卷积之间会有空隙。

通过递归展开,最终可以得到输入层的感受野大小:

最终公式

$$ r_0 = \sum_{l=1}^{L} \left( (k_l - 1) \cdot \prod_{i=1}^{l-1} s_i \right) + 1 $$

这个公式可以理解为每一层对感受野的“增量”之和。

3.3. 起始与终止位置计算

除了感受野的大小,我们有时也关心它在输入图像中的具体位置范围。我们可以使用如下公式计算起始和结束索引:

起始索引公式

$$ u_{l-1} = -p_l + u_l \cdot s_l $$

结束索引公式

$$ v_{l-1} = -p_l + v_l \cdot s_l + k_l - 1 $$

这些公式可以帮助我们定位感受野在输入图像中的确切区域,对于调试网络结构很有帮助。

4. 实现方法

4.1. 感受野大小计算伪代码

algorithm AnalyticalSolution(k, s, p, L):
    // k = [k_1, k_2, ..., k_L]
    // s = [s_1, s_2, ..., s_L]
    // L = 网络层数
    
    r <- 1
    S <- 1
    
    for l in 1 to L:
        for i in 1 to l:
            S <- S * s[i]
        r <- r + (k[l] - 1) * S
    
    return r

4.2. 起始与结束位置计算伪代码

algorithm RecursiveSolution(k, s, p, L):
    // k = [k_1, ..., k_L]
    // s = [s_1, ..., s_L]
    // p = [p_1, ..., p_L]
    
    u <- 0
    v <- 0
    for l in L downto 1:
        u <- -p[l] + u * s[l]
        v <- -p[l] + v * s[l] + k[l] - 1
    
    return (u, v)

5. 小结

总结要点

内容 说明
感受野定义 输入图像中影响某个特征输出的区域
感受野大小 反映网络对输入信息的感知范围
感受野位置 可通过递推公式定位其在输入图像中的具体区域
关键公式 r₀ = ∑((kₗ-1)·∏sᵢ) + 1
应用场景 图像分割、目标检测、模型调试等

⚠️ 常见误区

  • 感受野越大越好 ❌。过大的感受野可能引入冗余信息,影响模型效率。
  • 感受野大小等于输入图像尺寸 ❌。实际感受野可能远小于图像尺寸,尤其是在网络较浅时。

通过本文介绍的公式和方法,你可以准确计算任意 CNN 网络的感受野大小和位置,帮助你更好地理解和优化网络结构。


原始标题:How to Calculate Receptive Field Size in CNN