2、基础知识:CNN核心组件(卷积、池化、全连接)与计算量/参数量评估指标(FLOPs、MACs、Params)
在进入 TinyML 轻量级模型(MobileNet、EfficientNet-Lite 等)的讨论之前,必须先厘清卷积神经网络(CNN)的基本构成单元,以及衡量这些单元“轻”与“重”的量化标尺。TinyML 场景下的模型设计,本质上是在表达能力与资源消耗之间寻找帕累托最优解。若不了解卷积、池化、全连接各自的计算特性,不理解 FLOPs、MACs、Params 三个指标背后的物理含义,后续对轻量级网络结构的优化分析将无从谈起。本章将系统拆解 CNN 核心组件的计算模式,并建立一套用于评估模型复杂度的指标体系,为后续章节的模型选型与部署优化打下坚实基础。
2.1 卷积层:特征提取的核心引擎
卷积层是 CNN 中计算量最集中的部分,也是轻量化改造的重点对象。其核心操作是使用一组可学习的卷积核(Kernel)在输入特征图上滑动,通过局部感受野的加权求和提取空间特征。一个标准的二维卷积操作,假设输入特征图尺寸为 H×W×C_in,卷积核尺寸为 K×K,输出通道数为 C_out,则输出特征图的空间尺寸 H_out、W_out 由步长(Stride)和填充(Padding)决定。每个输出像素点需要执行 K×K×C_in 次乘法与 K×K×C_in-1 次加法,再加上偏置的 1 次加法,总计约 2×K²×C_in 次浮点运算。整个卷积层的 FLOPs 为 2×K²×C_in×C_out×H_out×W_out。
从参数量角度看,卷积层的权重数量为 K×K×C_in×C_out,加上 C_out 个偏置项。值得注意的是,卷积层的参数量与输入特征图的空间尺寸 H、W 无关,只与卷积核尺寸、输入输出通道数相关。这一特性使得卷积层在参数量上远小于全连接层,也是 CNN 能够高效处理图像数据的关键原因之一。在 TinyML 场景中,3×3 卷积是最常用的配置,因为它在感受野大小与计算量之间取得了良好平衡;5×5 或 7×7 卷积虽然感受野更大,但计算量呈平方级增长,通常会被分解为多个 3×3 卷积的堆叠。
2.2 池化层:空间降维与特征压缩
池化层(Pooling Layer)在 CNN 中承担着逐步降低特征图空间分辨率、扩大感受野、增强平移不变性的任务。最常见的两种池化操作是最大池化(Max Pooling)和平均池化(Average Pooling)。最大池化取窗口内最大值,对纹理边缘等高频特征更敏感;平均池化取窗口内均值,对背景等低频信息更平滑。池化层没有可学习的参数,因此 Params 恒为 0。其计算量也极低:对于 2×2 池化窗口、步长为 2 的配置,每个输出像素仅需比较或累加 4 个输入值,FLOPs 约为输入像素总数的 4 倍(最大池化)或 3 次加法加 1 次除法(平均池化)。
在轻量级网络设计中,池化层往往与卷积层的步长设置协同工作。例如,MobileNetV1 使用步长为 2 的深度卷积替代部分池化操作,在降低分辨率的同时完成特征提取,减少了网络层数。EfficientNet-Lite 则采用 MBConv 模块中的 SE(Squeeze-and-Excitation)注意力机制配合全局平均池化(Global Average Pooling)来替代全连接层,大幅削减参数量。全局平均池化将每个通道的特征图压缩为一个标量,直接输出长度为通道数的向量,彻底消除了全连接层中巨大的权重矩阵。
2.3 全连接层:特征映射与分类决策
全连接层(Fully Connected Layer)将卷积和池化提取到的二维特征图展平为一维向量,并通过矩阵乘法映射到样本标记空间。假设输入维度为 I(展平后的特征总数),输出维度为 O(类别数或隐藏层神经元数),则全连接层的权重矩阵尺寸为 I×O,偏置向量长度为 O,参数量为 I×O + O。计算量方面,每个输出神经元需要执行 I 次乘法和 I 次加法,总计 FLOPs 为 2×I×O。
全连接层是 CNN 中参数量爆炸的主要来源。以 VGG16 为例,其最后一个全连接层输入维度为 7×7×512=25088,输出维度为 4096,仅这一层的参数量就超过 1 亿,占整个模型参数的 74% 以上。在 TinyML 场景中,这种规模的参数量完全不可接受。因此,现代轻量级网络普遍采用全局平均池化 + 1×1 卷积的组合替代全连接层。例如,MobileNetV2 在分类头之前使用 1×1 卷积将特征通道数映射到类别数,再通过全局平均池化输出最终分类结果,参数量仅为 C_in×C_out + C_out,比全连接层减少数个数量级。
| 层类型 | 参数量公式 | FLOPs 公式 | 典型值(输入 32×32×3,输出 10 类) |
|---|---|---|---|
| 标准卷积(3×3, 64 通道) | 3×3×3×64 + 64 = 1792 | 2×3×3×3×64×30×30 ≈ 3.1M | Params: 1.8K, FLOPs: 3.1M |
| 深度可分离卷积(3×3, 64 通道) | (3×3×3 + 3) + (3×64 + 64) = 238 | 2×3×3×3×30×30 + 2×3×64×30×30 ≈ 0.4M | Params: 238, FLOPs: 0.4M |
| 最大池化(2×2, 步长 2) | 0 | ≈ 输入像素数 × 3(比较操作) | Params: 0, FLOPs: ≈ 27K |
| 全连接层(输入 1024, 输出 10) | 1024×10 + 10 = 10250 | 2×1024×10 = 20480 | Params: 10.2K, FLOPs: 20K |
2.4 三大评估指标:FLOPs、MACs 与 Params 的工程含义
在 TinyML 模型选型与部署中,FLOPs、MACs、Params 三个指标各有侧重,不能相互替代。Params 直接决定模型文件在 Flash 中的存储占用,以及运行时权重数据需要占用的 RAM 空间。对于典型 MCU(如 Cortex-M4 或 M7),Flash 容量通常在 256KB 到 2MB 之间,RAM 在 64KB 到 512KB 之间。一个 1MB 的模型文件可能直接超出低端 MCU 的存储上限。FLOPs 则反映模型推理所需的算术运算总量,与推理延迟和动态功耗强相关。在相同硬件条件下,FLOPs 越低,推理速度越快,单位时间内的能量消耗也越低。MACs 与 FLOPs 的关系为 FLOPs = 2 × MACs,因为一次乘加操作(MAC)包含一次乘法和一次加法,在硬件 DSP 指令中通常计为一次操作。
需要特别注意的是,FLOPs 并不直接等同于推理时间。实际推理延迟还受到内存访问带宽、数据复用率、硬件并行度、算子实现效率等因素影响。例如,深度可分离卷积虽然 FLOPs 远低于标准卷积,但其内存访问频率更高,在缺乏优化的 MCU 上可能无法达到理论加速比。因此,在评估模型时,应同时关注 Params(存储压力)和 FLOPs(计算压力),并结合目标硬件的实际 benchmark 结果进行综合判断。
2.5 案例拆解:CIFAR-10 分类模型的复杂度对比
为了直观理解上述指标的实际应用,我们设计一个小型实验:在 CIFAR-10 数据集(32×32×3 输入,10 类输出)上,分别构建三个结构不同但精度相近的 CNN 模型,对比其 Params 与 FLOPs 差异。模型 A 使用两层标准 3×3 卷积(通道数 32→64)+ 全连接层;模型 B 使用两层深度可分离卷积(通道数 32→64)+ 全局平均池化;模型 C 使用一层 5×5 标准卷积(通道数 32)+ 一层 3×3 标准卷积(通道数 64)+ 全局平均池化。
模型 A 的参数量计算:第一层卷积 3×3×3×32 + 32 = 896,第二层卷积 3×3×32×64 + 64 = 18496,展平后特征维度为 8×8×64 = 4096,全连接层参数量为 4096×10 + 10 = 40970,总计约 60K 参数。FLOPs 约为 2×3×3×3×32×30×30 + 2×3×3×32×64×14×14 + 2×4096×10 ≈ 1.55M + 7.24M + 0.08M ≈ 8.87M。模型 B 的参数量:深度可分离卷积第一层 3×3×3 + 3 + 3×32 + 32 = 134,第二层 3×3×32 + 32 + 32×64 + 64 = 2432,全局平均池化无参数,总计约 2.6K 参数。FLOPs 约为 0.4M + 1.2M ≈ 1.6M。模型 C 的参数量:第一层 5×5×3×32 + 32 = 2432,第二层 3×3×32×64 + 64 = 18496,总计约 21K 参数。FLOPs 约为 2×5×5×3×32×28×28 + 2×3×3×32×64×12×12 ≈ 3.76M + 5.31M ≈ 9.07M。
从结果可以看出,模型 B 在保持相近分类精度(约 82% vs 84%)的前提下,参数量仅为模型 A 的 4.3%,FLOPs 仅为模型 A 的 18%。模型 C 虽然参数量比模型 A 少,但由于 5×5 卷积在 32×32 输入上的计算开销较大,FLOPs 反而略高于模型 A。这一案例清晰展示了深度可分离卷积在轻量化方面的巨大优势,也提醒我们:单纯减少参数量并不一定能降低计算量,必须同时关注卷积核尺寸和特征图分辨率对 FLOPs 的影响。
2.6 总结与复盘
本章系统梳理了 CNN 三大核心组件的计算特性与复杂度评估方法。卷积层是特征提取的主力,其 FLOPs 与 K²、C_in、C_out、H_out、W_out 五个因素相关,参数量仅与 K²、C_in、C_out 相关;池化层无参数、计算量极低,主要用于空间降维;全连接层参数量巨大,在轻量级网络中应尽量避免或替换为全局平均池化。FLOPs、MACs、Params 三个指标分别从计算量、乘加次数、存储占用三个维度刻画模型复杂度,在 TinyML 场景下需综合考量。