2、深度学习模型基础:神经网络结构、卷积/Transformer基础、模型大小与计算量评估指标(FLOPs、MACs、参数量)

在进入模型压缩与量化剪枝的具体技术之前,必须首先建立对深度学习模型本体的精确认知。无论是针对嵌入式设备(如ARM Cortex-A系列、RISC-V或NPU/DSP)的部署,还是面向云端推理的优化,模型的参数量(Params)、计算量(FLOPs/MACs)以及内存访问量(MACs Memory)是决定能否落地、以何种帧率落地的三大核心约束。本章将系统梳理神经网络的结构演进(从卷积到Transformer),并深入剖析评估模型复杂度的关键指标,为后续章节的剪枝、量化、知识蒸馏等压缩手段提供统一的度量基准。

模型复杂度评估体系 网络结构类型 CNN 卷积网络 · Conv2d / Depthwise · 局部感受野 + 权值共享 · 代表:ResNet / MobileNet · 计算量受K×K×C_in×C_out控制 Transformer 自注意力 · Q/K/V 线性投影 · 全局感受野,建模长距离 · 计算量 O(N²·d) · 代表:ViT / Swin / BERT · 内存占用随序列长度平方增长 核心评估指标 参数量 Params · 存储占用 = Params × 字节数 · 影响模型文件大小与内存带宽 FLOPs 浮点运算次数 · 所有浮点乘加运算总和 · 衡量理论计算负载 MACs 乘加运算次数 · 1 MAC = 2 FLOPs · 硬件DSP/NPU常用指标 嵌入式部署约束 存储带宽瓶颈 · SRAM/Flash容量限制 · DDR带宽决定推理速度 · 权重读取次数 > 计算时间 算力限制 · NPU/DSP的MAC阵列大小 · CPU的SIMD指令集 · 实时性要求(fps) 功耗约束 · 内存访问能耗 > 计算能耗 · 量化可降低带宽需求 压缩目标:在保持精度的前提下,同时降低 Params、FLOPs 与内存访问量

上图展示了本章的核心知识框架:左侧为网络结构的两大主流范式(CNN与Transformer),中间为评估模型复杂度的三大指标,右侧为嵌入式部署时的物理约束。理解这三者之间的关联——即结构决定指标,指标映射到硬件资源——是后续所有优化工作的逻辑起点。

2.1 神经网络结构核心原理:从卷积到自注意力

2.1.1 卷积神经网络(CNN)的基本构成

卷积神经网络(Convolutional Neural Network, CNN)是深度学习视觉任务的基石。其核心操作是卷积运算:通过一个可学习的卷积核(Kernel)在输入特征图上滑动,计算局部区域的加权和。一个标准二维卷积层的参数量与计算量由以下公式决定:

# 卷积层参数计算
输入特征图: H_in × W_in × C_in
卷积核: K_h × K_w × C_in × C_out
偏置: C_out
参数量 = (K_h × K_w × C_in + 1) × C_out
输出特征图: H_out × W_out × C_out
计算量(FLOPs) = 2 × H_out × W_out × C_out × K_h × K_w × C_in
计算量(MACs) = H_out × W_out × C_out × K_h × K_w × C_in

在嵌入式部署中,深度可分离卷积(Depthwise Separable Convolution)是MobileNet等轻量级网络的核心。它将标准卷积分解为逐通道卷积(Depthwise Conv)和逐点卷积(Pointwise Conv,即1×1卷积),计算量可降低至标准卷积的约1/9(当K=3时)。这一结构变化直接影响了FLOPs与参数量,是剪枝和量化时需要特别关注的敏感层。

2.1.2 Transformer与自注意力机制

Transformer架构最初用于自然语言处理,现已广泛渗透至视觉领域(ViT、Swin Transformer等)。其核心是多头自注意力(Multi-Head Self-Attention, MHSA)机制。对于输入序列长度为N、特征维度为d的张量,自注意力的计算过程如下:

  1. 线性投影:生成Q(Query)、K(Key)、V(Value)三个矩阵,每个矩阵的维度为N×d。
  2. 注意力分数:计算 Q × K^T,得到N×N的分数矩阵,除以√d进行缩放。
  3. Softmax归一化:对分数矩阵的每一行进行Softmax操作。
  4. 加权求和:将归一化后的分数矩阵与V相乘,得到输出。

该过程的计算复杂度为O(N²·d),其中N²部分来自Q×K^T矩阵乘法。当输入图像分辨率较高时(例如N=196,对应14×14的patch),自注意力的计算量将急剧上升。相比之下,CNN的局部感受野计算复杂度为O(N·K²·d),与序列长度呈线性关系。这一根本差异决定了在压缩Transformer模型时,注意力头剪枝和序列长度缩减往往比单纯减少通道数更有效。

关键洞察:在嵌入式设备上,Transformer模型的内存访问量(MACs Memory)往往比FLOPs更成为瓶颈。因为自注意力机制需要频繁读写N×N的注意力分数矩阵,这对片上SRAM容量提出了极高要求。例如,对于N=196、d=64的注意力头,分数矩阵大小为196×196×4字节≈150KB,这已经超出了许多MCU的SRAM总量(通常为512KB-1MB)。因此,在部署Transformer时,内存规划比计算优化更为优先。

2.2 模型大小与计算量评估指标详解

2.2.1 参数量(Params)与存储占用

参数量是模型所有可学习参数的总数,直接决定了模型文件的大小和运行时权重内存占用。在嵌入式部署中,我们通常关注以下换算关系:

数据类型字节数1M参数占用典型应用场景
FP324 Bytes4 MB服务器端训练与推理
FP162 Bytes2 MBGPU/部分NPU推理
INT81 Byte1 MB嵌入式NPU/CPU推理
INT40.5 Bytes0.5 MB极端压缩场景(需特殊硬件支持)

值得注意的是,参数量并不直接等于内存占用。在推理过程中,除了权重本身,还需要存储中间激活值(Activation)。例如,一个输入为224×224×3的图像,经过第一层卷积(输出通道64)后,激活值大小为224×224×64×4字节≈12.8MB(FP32)。这解释了为什么在嵌入式设备上,即使模型参数量很小,也可能因为激活值内存过大而无法运行。

2.2.2 FLOPs与MACs的精确计算

FLOPs(Floating Point Operations)指浮点运算次数,MACs(Multiply-Accumulate Operations)指乘加运算次数。两者的关系为:1 MAC = 2 FLOPs(一次乘法和一次加法)。在硬件实现中,MACs是更常用的指标,因为DSP和NPU通常将乘加运算作为单条指令执行。

以MobileNetV2为例,其核心模块(Bottleneck)的计算量分解如下:

# MobileNetV2 Bottleneck 计算量分析(输入112×112×32,扩展因子6)
1. 1×1 扩展卷积: 112×112×32 → 112×112×192
   MACs = 112×112×192×1×1×32 = 77,070,336
2. 3×3 Depthwise卷积: 112×112×192 → 112×112×192
   MACs = 112×112×192×3×3 = 216,760,320
3. 1×1 投影卷积: 112×112×192 → 112×112×32
   MACs = 112×112×32×1×1×192 = 77,070,336
总MACs ≈ 370M,其中Depthwise卷积占58.6%

这个案例揭示了深度可分离卷积的一个关键特征:计算量高度集中在Depthwise层,而参数量则集中在1×1卷积层。因此,在剪枝时,对1×1层进行通道剪枝可以显著减少参数量,但对FLOPs的削减有限;而对Depthwise层进行剪枝则相反。理解这一差异,有助于制定差异化的压缩策略。

2.2.3 内存访问量(MACs Memory)与带宽瓶颈

在嵌入式设备上,内存访问量(Memory Access Cost, MACs Memory)往往比FLOPs更能决定实际推理速度。这是因为内存访问的能耗和延迟远高于计算操作。根据Roofline模型,当计算密度(FLOPs/Byte)低于硬件平台的算术强度时,模型将受限于内存带宽而非计算能力。

以树莓派4B(Broadcom BCM2711)为例,其内存带宽约为4.2GB/s,CPU算力(Cortex-A72)约为4.8 GFLOPS(FP32)。对于MobileNetV2(约300M MACs,权重约3.4MB),理论计算时间为300M×2/4.8G≈125ms,而权重读取时间为3.4MB/4.2GB/s≈0.8ms。但实际推理中,激活值的读写次数远大于权重,导致内存访问成为主要瓶颈。因此,量化(INT8)不仅减少了存储占用,更关键的是将内存带宽需求降低4倍,从而直接提升推理速度。

常见误区:许多初学者认为FLOPs越低,模型推理越快。实际上,在嵌入式设备上,内存访问量(MACs Memory)才是首要优化目标。一个FLOPs较低但内存访问频繁的模型(如深度可分离卷积),可能比FLOPs较高但内存访问集中的模型(如标准卷积)更慢。因此,在评估压缩效果时,必须同时关注FLOPs、Params和内存访问量三个维度。

2.3 案例拆解:ResNet-18在嵌入式设备上的部署评估

为了将上述理论应用于实际,我们以ResNet-18在典型嵌入式平台(如NVIDIA Jetson Nano)上的部署为例,进行完整的评估流程演示。

背景与约束:Jetson Nano的GPU算力为472 GFLOPS(FP16),内存带宽为25.6GB/s,可用内存4GB。目标是在该平台上实现实时(≥30 FPS)的图像分类任务。

初始指标分析:

指标ResNet-18(FP32)ResNet-18(FP16)ResNet-18(INT8)
参数量11.69M11.69M11.69M
模型大小46.8 MB23.4 MB11.7 MB
FLOPs(224×224输入)1.82G1.82G1.82G
理论计算时间1.82G/0.472G = 3.86ms1.82G/0.472G = 3.86ms1.82G/0.236G = 7.7ms
权重内存读取46.8MB/25.6GB/s = 1.83ms23.4MB/25.6GB/s = 0.91ms11.7MB/25.6GB/s = 0.46ms

分析判断过程:从表中可见,FP32模式下,权重读取时间(1.83ms)与计算时间(3.86ms)处于同一量级,但实际推理中还需考虑激活值读写,导致总延迟约15-20ms,无法达到30FPS。转换为FP16后,权重读取时间减半,但计算时间不变,总延迟降至约10-12ms,仍不满足实时要求。采用INT8量化后,虽然计算时间因GPU不支持INT8而增加(需模拟),但权重读取时间大幅降低,且激活值内存占用减少4倍,实际总延迟可降至约8ms,满足30FPS目标。

实际操作步骤:

  1. 使用PyTorch的torch.quantization模块对ResNet-18进行量化感知训练(QAT),校准数据集为ImageNet验证集的1000张子集。
  2. 将量化后的模型导出为ONNX格式,并使用TensorRT进行INT8引擎构建。
  3. 在Jetson Nano上运行基准测试,记录延迟和吞吐量。

结果对比与复盘:量化后模型精度从69.8%(Top-1)下降至68.9%,损失0.9%,在可接受范围内。实际推理延迟从FP32的18ms降至INT8的7.2ms,加速比2.5倍。复盘发现,第一层卷积和最后的全连接层对量化敏感,需要保留FP16精度。这一发现指导我们在后续章节中,将重点放在混合精度量化策略上。

经验总结:在嵌入式部署评估中,建议遵循以下流程:① 使用torchsummary或ptflops工具获取模型的Params和FLOPs;② 根据目标硬件的算力和带宽,计算理论延迟;③ 使用onnxruntime或TensorRT进行实际基准测试;④ 对比理论值与实测值,找出瓶颈(计算密集还是内存密集);⑤ 针对瓶颈选择压缩策略(剪枝减少计算,量化减少内存)。

2.4 常见误区与总结复盘

在模型复杂度评估中,以下误区需要特别警惕:

  • 误区一:只关注参数量而忽略激活值内存。许多轻量级网络(如EfficientNet)参数量很小,但激活值巨大,导致嵌入式设备无法运行。评估时必须同时考虑权重和激活值的内存占用。
  • 误区二:将FLOPs等同于推理时间。FLOPs是理论计算量,实际推理时间还受内存带宽、并行度、算子实现效率等因素影响。在嵌入式设备上,内存访问往往成为主导因素。
  • 误区三:忽略数据精度对计算量的影响。INT8计算在硬件上通常比FP32快2-4倍,但某些硬件(如Jetson Nano的GPU)对INT8支持不佳,反而更慢。必须针对具体硬件评估。
  • 误区四:混淆MACs与FLOPs。在阅读或技术文档时,务必确认作者使用的是MACs还是FLOPs,两者相差2倍。例如,MobileNetV2的FLOPs为600M,MACs为300M。