感受野与计算
什么是感受野?它对于 CNN 的设计有什么指导意义?¶

感受野(Receptive Field) 是指卷积神经网络中某一层输出特征图上的一个像素点在原始输入图像上能“看到”的区域大小。它决定了该神经元能够利用多大范围的上下文信息进行决策。
指导意义:
-
分类任务:网络最后的特征向量(如 GAP 后的特征)的感受野应至少覆盖输入图像的大部分区域,甚至整个图像,这样才能捕捉到物体的全局结构和类别特征。如果感受野过小,模型只能看到局部碎片,可能无法正确识别物体(例如只能看到猫的耳朵却看不到全身)。
-
目标检测与分割:需要多尺度感受野来处理大小不一的物体。浅层特征感受野小,适合检测小物体;深层感受野大,适合检测大物体。因此,特征金字塔(FPN)等多尺度结构应运而生。
-
密集预测任务:语义分割中,每个像素的分类需要足够大的感受野来获取上下文,以避免误分类(如局部纹理不足以区分道路和天空)。同时,不能无限扩大感受野而导致空间细节丢失,所以需要空洞卷积等技巧在不损失分辨率的情况下增大感受野。
-
网络深度设计:通过堆叠更多层或使用特定操作来获得期望的感受野,同时参数量和计算量可控。这直接影响架构设计,例如用两层 3×3 代替一层 5×5,既获得相同感受野,又减少参数并增加非线性。
-
有效感受野:实际中,感受野内不同像素对输出神经元的影响并不均匀,中心区域影响大于边缘。设计时需让重要的物体部分落在有效感受野的高斯权重中心,否则即使理论感受野足够,也可能无法很好地利用上下文。
因此,感受野分析是 CNN 架构设计的核心依据之一,决定了网络的深度、卷积核大小、空洞率、步长等关键参数的选择。
给出一个多层卷积网络,如何递推计算某一层的感受野大小?¶
递推计算公式:


这样逐层递推即可。
增大感受野的方法有哪些?空洞卷积、大核卷积、池化、步长卷积各有什么优缺点?¶
-
增加网络深度(堆叠小卷积核):感受野随深度线性增长,且增加非线性,是首选方法。但可能引入梯度问题,需要残差连接等辅助。
-
大核卷积:单个大核(如 7×7)直接提供大感受野。优点:简单,初期迅速扩大感受野。缺点:参数量大(随核大小平方增长),计算量大,缺少非线性堆叠的好处,且大核容易对输入进行过度平滑或难以学习细粒度特征。现代网络通常只在前几层使用一个 7×7 卷积来快速降采样和扩大感受野。
-
池化(Max/Avg Pooling):每次池化(步长 2,核 2×2)使空间尺寸减半,同时将感受野加倍。优点:无参数,计算极快,可引入平移不变性。缺点:丢失空间细节,无法复原,对密集预测任务不利;另外池化本身没有学习能力,只是固定下采样。
-
步长卷积(Strided Convolution):用步长>1的卷积替代池化进行下采样。优点:有可学习的参数,网络可以学习如何下采样,比固定池化更具表现力;同时扩大感受野。缺点:计算量略高于池化,但可控。现代网络多用步长卷积代替池化(如 ResNet 的 stem 层用 7×7 stride 2)。
-
空洞卷积:不进行下采样,通过注入空洞来指数级扩大感受野而不增加参数量。优点:保持特征图分辨率,非常适合语义分割等需要密集输出的任务;可在不降低分辨率的情况下聚合多尺度上下文。缺点:可能产生网格效应(当空洞率过大时,采样点过于稀疏,导致局部信息丢失);连续使用相同的空洞率会造成部分像素从未被利用;计算时内存带宽需求可能增加,实现上需优化。通常会采用一系列渐进增大的空洞率(如 1,2,4)或混合使用。
如何计算标准卷积层的参数量和 FLOPs?请给出公式。¶

对于深度可分离卷积,推导其参数量和 FLOPs 与标准卷积的比值。¶
深度可分离卷积 = 深度卷积 (Depthwise) + 逐点卷积 (Pointwise)。
标准卷积:

深度可分离卷积:

总参数量:

总 MACs:

比值:
参数量比:

计算量比:

分析 VGG 中,一个 3×3 卷积层的参数量和感受野,并与一个 5×5 卷积层对比。¶
感受野:
-
一层 3×3 卷积:感受野 = 3。
-
一层 5×5 卷积:感受野 = 5。 要达到 5×5 的感受野,可以用两层 3×3 卷积堆叠,其感受野 = 3 + (3-1)×1 = 5。因此两个 3×3 层和一个 5×5 层的最大感受野相同。

额外收益:两个 3×3 层之间多一个 ReLU 非线性层,增强了模型的表示能力。因此 VGG 提倡全部使用 3×3 卷积,既不牺牲感受野,又减少参数,增加非线性,性能更好。
在设计轻量级网络时,如何权衡 FLOPs 和参数量?两者反映的性能指标有何不同?¶
参数量 (Parameters):
-
反映模型的存储空间和内存占用。
-
决定模型文件大小、运行时参数驻留显存的大小。
-
与推理速度并不完全线性相关,因为即使参数多,如果计算量小,执行可能仍然快;但参数太多会导致显存不足,无法运行,同时权重加载和带宽可能成为瓶颈。
-
过多的参数可能引发过拟合,需要更多正则化。
FLOPs(或 MACs):
-
反映模型进行一次前向传播所需的计算量,大致关联推理延迟和能耗。
-
减少 FLOPs 可直接提升推理速度,尤其是在计算资源受限的设备上(如手机 CPU/GPU)。
-
但是 FLOPs 并不能完美代表实际速度,因为速度还受内存访问、并行度、硬件亲和性等影响。
权衡策略:
-
为了降低参数量,可以使用深度可分离卷积、全局平均池化、分组卷积、低秩分解等。
-
为了降低 FLOPs,除了上述方法,还可以用更小的输入分辨率、减少通道数、使用更少的层。
-
在轻量级网络设计中,通常优先控制FLOPs,因为它更直接影响延迟。但同时要保证参数量在内存预算内(如移动端通常限制在 5-20M 参数)。
-
有些操作参数量很小但 FLOPs 不小(如 1×1 卷积),或者反之(如全连接层参数量大但 FLOPs 相对少)。需要根据硬件特性调整:对于模型大小敏感的场景(App 下载大小),参数量重要;对于低延迟推理,FLOPs 和访存更关键。
两者不能相互替代,设计时需同时关注,并最终以实测推理速度为准。
计算 ResNet-50 中 bottleneck 块的 FLOPs,并与标准 residual block 比较。¶
ResNet-50 的 bottleneck 块(假设输入输出尺寸均为 56×56,通道数 256,中间通道 64):

标准 residual block(BasicBlock,ResNet-18/34 所用,假设同样 256 通道):

在给定输入尺寸和卷积配置下,计算出网络的总 FLOPs。¶
以简单的网络为例:输入 224×224×3,经过以下层:
-
Conv1: 7×7, stride 2, 64 通道, padding 3 → 输出 112×112×64。FLOPs = 77364112*112 次乘加(或×2算FLOPs)。
-
MaxPool: 3×3, stride 2 → 基本无 FLOPs(忽略)。
-
Conv2_x: 一系列 bottleneck 块。需要根据每个块的输入输出尺寸、通道变化,分别累加每一层的 FLOPs,再将所有块求和。可以使用公式或工具(如 torchinfo, fvcore)自动计算。

具体示例(部分):
ResNet-50 对 224×224 输入的总 FLOPs 约为 4.1 GFLOPs(乘加次数约 2.05G MACs,FLOPs=2×MACs)。具体数字需要查阅标准 benchmark。
为什么 FLOPs 不能完全代表推理速度?还要考虑哪些因素?¶
-
内存访问成本 (Memory Access Cost, MAC):实际推理中,从显存/内存读取数据和写回结果的耗时可能超过计算本身。例如,深度可分离卷积的 FLOPs 远小于标准卷积,但其计算密度(FLOPs/字节)较低,访存占比高,实际加速比往往达不到理论值。ShuffleNet 等设计特别关注减少 MAC。
-
并行度和硬件利用率:GPU 等并行处理器需要足够的工作量来填充计算单元。如果 FLOPs 过小(如 1×1 卷积),但需要启动大量 kernel 或产生同步开销,可能导致低占用率。块大小、分组卷积的组数会影响并行效率。
-
计算图开销:框架调度、kernel launch 等开销在处理小网络或移动端时尤为显著。
-
稀疏性和权重布局:某些操作(如 ReLU 后的零值)可以跳过计算,但 FLOPs 统计通常不考虑稀疏加速。
-
精度和量化:混合精度、INT8 推理时,FLOPs 概念变得模糊,吞吐量由硬件张量核心的吞吐决定,而非简单的浮点运算次数。
-
分支和逐元素操作:残差连接、拼接、激活函数、归一化等操作虽 FLOPs 不计,却占用内存带宽和计算时间。
因此,评估模型实际速度需要实测推理延迟(latency)或吞吐量(throughput),并结合硬件特性优化,不能只看 FLOPs。
什么是“有效感受野”?它与理论感受野有何不同?如何通过实验测量?¶
有效感受野 (Effective Receptive Field, ERF)
理论感受野区域内每个像素对输出神经元的影响并不相同,中心区域的像素影响大,边缘像素影响小,呈二维高斯分布形状。有效感受野指实际对输出有显著贡献(梯度绝对值较大)的输入区域。
原因:
-
卷积核的多次叠加导致输入信号的中心像素被反复加权(多路径),而边缘像素参与的计算路径少,且多层随机初始化使得影响向中心集中。
-
非线性激活(如 ReLU)也会破坏均匀分布。
-
经过多层的复合效应,最终影响分布趋于高斯。
与理论感受野的不同:理论感受野是一个硬边界,有效感受野是软性的,只有部分区域真正驱动神经元。
实验测量方法:
-
梯度法:将输出层某个神经元对输入的梯度可视化。在输入图像上计算损失对该神经元激活值的导数,取绝对值,得到输入各像素的重要性热图。进行多次随机初始化或使用不同样本的平均,即可得到有效感受野分布。通常呈现为以理论感受野中心为中心的高斯衰减。
-
遮挡法:系统地遮挡输入区域,观察输出激活的变化,以此推测重要区域。
-
反向累积法:从输出层反向逐层递推梯度的期望值,直到输入层,分析各位置梯度的方差或期望。
有效感受野的概念对于理解网络真正利用了多少上下文至关重要,设计网络时应确保有效感受野覆盖目标。
在设计网络时,如何确保最后一个卷积层的感受野能够覆盖输入图像的关键区域?¶
策略:
-
理论感受野计算:递推计算直到最后一层,确保其理论感受野 > 输入图像尺寸(或至少接近)。
-
有效感受野分析:即使理论感受野覆盖全图,有效感受野可能只有中央的一小部分。因此需要使目标对象落在有效感受野的高权区域。通常通过以下手段:
- 增加网络深度:堆叠更多层使感受野和有效感受野自然增大。
- 使用下采样(池化或步长卷积):下采样让后续层的一个像素对应更大的输入区域,感受野快速扩大。
- 采用空洞卷积:在不损失分辨率的情况下扩大感受野,特别适合分割任务,使得深层特征仍能覆盖全图。
- 全局池化:在最后使用 GAP 直接汇聚全图信息,感受野直接覆盖全图。
-
多尺度特征融合:利用特征金字塔等方式,使不同层级的特征都参与最终决策,兼顾小感受野(细节)和大感受野(上下文)。
-
实验验证:绘制有效感受野热图,确保关键物体区域落入激活较高区域。如果发现有效感受野过小,可以增加上下文模块(如 PSPNet 的金字塔池化、ASPP)来显式聚合多尺度信息。
-
对于分类网络,通常通过架构设计保证最后 7×7 特征图上每个像素的感受野能覆盖 224×224 的大部分(如 ResNet 的感受野约 483×483,远大于输入,有效感受野覆盖核心区域足够)。对于分割,即使编码器感受野足够,解码器恢复分辨率时也要配合 skip connection 保证细节。最后输出层的感受野设计要能满足任务对上下文的需求。
以上是对各个问题的全面回答,涵盖了感受野理论、计算量分析和实际网络设计原则。