Receptive Field
感受野是神经网络中能够影响某个单元的输入图像区域。了解感受野如何随网络深度、步幅和膨胀率增大,以及相关代码。
卷积神经网络(CNN)中某个单元的感受野,是指能够影响该单元数值的输入图像区域。网络第一层 3 × 3 卷积层中的单元能看到 3 × 3 像素的区域;而更深层中的单元会看到逐渐扩大的区域,因为每一层都会组合前一层相邻单元的输出。感受野决定了特征可利用多少上下文:能够识别整辆公交车的单元必须看到整辆公交车。这个术语源自神经科学,指能够驱动单个神经元的视觉区域。
感受野如何扩大#
每一层都会使感受野增加 (k − 1) × j 个像素,其中 k 是卷积核大小,j 是步幅间距,表示该层输入中相邻单元在输入图像中的距离,等于此前所有步幅的乘积。这会带来三个结果:
- 堆叠小卷积核:三个步幅为 1 的 3 × 3 层可以覆盖 7 × 7 区域,效果等同于一个 7 × 7 层。对于 C 个通道,前者有 27C² 个权重,而后者有 49C² 个权重;VGG 网络正是以此为依据,采用了由 3 × 3 卷积构成的深层堆叠结构。
- 步幅与池化:每经过一个步幅为 2 的层或池化步骤,步幅间距就会翻倍,因此后续层扩大感受野的速度也会加快一倍。CNN 正是通过这种方式在缩小特征图的同时,将感受野扩大到数百个像素。
- 空洞卷积:采用膨胀率 d 的 3 × 3 空洞卷积,其卷积核采样点之间相隔 d 个像素,覆盖范围为 2d + 1 个像素;它无需下采样就能扩大感受野,因此适合语义分割等逐像素密集任务。
直接测量感受野可以验证这些规律:从一个输出值开始反向传播,观察哪些输入像素获得了非零梯度。
import torch
from torch import nn
# Three stacked 3x3 convolutions in three configurations: (stride, dilation)
for name, stride, dilation in (("plain", 1, 1), ("strided", 2, 1), ("dilated", 1, 2)):
convs = [nn.Conv2d(1, 1, 3, stride, padding=dilation, dilation=dilation, bias=False) for _ in range(3)]
for conv in convs:
nn.init.ones_(conv.weight) # positive weights, so no input pixel's gradient cancels out
layers = nn.Sequential(*convs)
# Backpropagate from the central output value; input pixels with nonzero gradient form its receptive field
image = torch.zeros(1, 1, 64, 64, requires_grad=True)
output = layers(image)
output[0, 0, output.shape[2] // 2, output.shape[3] // 2].backward()
rows = image.grad[0, 0].sum(dim=1).nonzero()
size = rows.max().item() - rows.min().item() + 1
print(f"{name}: {size}x{size} pixels")代码会输出:普通堆叠的感受野为 7 × 7;步幅堆叠的感受野为 15 × 15,其步幅间距从 1 增至 2、再增至 4;空洞堆叠的感受野为 13 × 13,其中每一层都会增加 4 个像素。
理论感受野与有效感受野#
公式给出的是理论感受野,也就是所有可能影响某个单元的像素。有效感受野则衡量每个像素实际产生的影响:这种影响大致呈高斯分布,集中在中心,且只覆盖理论面积的一部分。更大的卷积核会扩大有效感受野;RepLKNet使用了最大为 31 × 31 的深度卷积核,并报告其有效感受野远大于小卷积核 CNN。在视觉 Transformer中,自注意力让每个图像块从第一层开始就能利用其他所有图像块的信息,因此无论网络深度如何,理论感受野都覆盖整张图像。
感受野与相关术语的比较#
- 卷积核大小:单次卷积从自身输入中读取的窗口大小,例如 3 × 3。感受野是该区域在原始图像中的累积范围;三个堆叠的 3 × 3 卷积核就能产生 7 × 7 的感受野。
- 特征图:某一层的输出网格。感受野描述该网格中单个位置对应的输入区域。
- 上下文窗口:语言模型一次读取的 token 数量,相当于图像网格上的感受野在序列中的对应概念。
目标检测中的感受野#
检测器会通过精细特征图预测小目标,通过具有较大感受野的粗粒度深层特征图预测大目标;而特征金字塔网络(FPN)会将深层上下文融合回精细特征图。感受野如果小于目标,就只能看到目标的一部分;微小目标仍需要精细层级,因为在步幅为 32 的特征图上,20 像素的目标连一个网格单元都占不满。YOLO26会根据步幅为 8、16 和 32 的特征图进行预测,并在主干网络末端应用一个 SPPF 模块:该模块使用等效于 5 × 5、9 × 9 和 13 × 13 网格单元的窗口对步幅为 32 的特征图进行最大池化,随后再通过一个覆盖整张步幅为 32 的特征图的自注意力模块。










