3、深度学习模型基础:卷积神经网络(CNN)、Transformer、常见模型(ResNet、MobileNet、YOLO)及其计算特性
在嵌入式AI与边缘计算场景中,模型压缩与量化并非孤立的技术操作,而是必须建立在深刻理解模型架构与计算特性的基础之上。不同模型家族(CNN、Transformer)在算子类型、内存访问模式、并行度、数据复用率等方面存在本质差异,这直接决定了量化策略(如逐层量化、混合精度)与剪枝方案(结构化/非结构化)的适用边界。本章将系统梳理CNN与Transformer的核心计算原语,并针对ResNet、MobileNet、YOLO三类部署高频模型,剖析其计算瓶颈与压缩敏感度,为后续章节的量化与剪枝实践奠定架构级认知。
3.1 卷积神经网络(CNN)的计算原语与部署特征
CNN的核心计算单元是卷积层(Convolution Layer),其本质是滑窗式的乘加运算(MAC)。在嵌入式部署视角下,CNN的计算特性可归纳为三点:权重静态化(训练完成后权重固定,便于量化与剪枝)、数据复用性强(同一权重被多个空间位置共享)、算子结构规整(卷积、池化、激活、批归一化均为固定模式)。这些特性使得CNN成为量化与剪枝技术最成熟的模型家族。
3.1.1 核心原理:卷积的数学本质与内存访问模式
设输入特征图为 \(X \in \mathbb{R}^{C_{in} \times H \times W}\),卷积核为 \(W \in \mathbb{R}^{C_{out} \times C_{in} \times K \times K}\),输出特征图 \(Y \in \mathbb{R}^{C_{out} \times H' \times W'}\)。单次卷积操作可表示为:
Y[n, h, w] = bias[n] + Σ_{c=0}^{C_in-1} Σ_{i=0}^{K-1} Σ_{j=0}^{K-1} X[c, h*s+i, w*s+j] * W[n, c, i, j]
其中s为步长(stride)。从硬件角度看,该计算涉及两类内存访问:权重读取(每次滑窗需读取全部 \(C_{in} \times K \times K\) 个权重)和输入特征图读取(相邻滑窗存在重叠区域)。在边缘设备(如Cortex-M系列MCU或低功耗NPU)上,权重通常存储在Flash或SRAM中,而激活值则需频繁读写。因此,权重复用率(即每个权重被使用的次数)是衡量CNN计算效率的关键指标——对于3×3卷积,权重复用率约为 \(H' \times W'\) 次,远高于全连接层。
3.1.2 判断方法:计算密度与内存占用评估
在决定压缩策略前,需先评估模型的计算密度(Compute Intensity)与内存占用。计算公式如下:
- 计算量(FLOPs):\(2 \times C_{out} \times C_{in} \times K^2 \times H' \times W'\)(乘加各计一次)
- 权重内存:\(C_{out} \times C_{in} \times K^2 \times 4\) 字节(FP32)
- 激活内存:\(C_{out} \times H' \times W' \times 4\) 字节(单层峰值)
若计算量/权重内存比值大于10(即每字节权重对应10次以上MAC),则该层为计算密集型,优先考虑量化而非剪枝;若比值小于5,则为内存密集型,剪枝(减少权重数量)效果更显著。例如,MobileNet的深度卷积层(Depthwise Conv)计算量小但权重占比高,剪枝收益明显。
3.1.3 案例拆解:ResNet-18在边缘设备上的压缩决策
假设需将ResNet-18部署到带有2MB SRAM的MCU上。初始模型大小约45MB(FP32),远超存储限制。通过逐层分析发现:
| 层类型 | FLOPs占比 | 权重占比 | 压缩策略 |
|---|---|---|---|
| Conv1 (7×7, 64) | 12% | 0.3% | 保留FP32或INT16(敏感) |
| Conv2_x (3×3, 64) | 28% | 8% | INT8量化 + 通道剪枝30% |
| Conv3_x (3×3, 128) | 32% | 16% | INT8量化 + 通道剪枝40% |
| Conv4_x (3×3, 256) | 20% | 32% | INT8量化 + 通道剪枝20% |
| Conv5_x (3×3, 512) | 8% | 44% | INT8量化(保留残差分支) |
实际执行时,先对Conv3_x和Conv4_x进行通道剪枝(基于BN的缩放因子γ排序),再统一量化。结果:模型从45MB降至4.2MB(INT8),精度损失仅1.8%。关键经验是残差连接(Shortcut)对应的卷积层剪枝需谨慎,因为其输出直接与主路径相加,误差会累积。
3.2 Transformer模型的计算特性与量化挑战
Transformer架构(如ViT、Swin Transformer)在视觉任务中逐渐普及,但其计算特性与CNN截然不同。核心组件包括多头自注意力(MHSA)、前馈网络(FFN)、层归一化(LayerNorm)和残差连接。从部署角度看,Transformer面临三大挑战:动态计算图(注意力权重依赖输入)、高内存占用(注意力矩阵与KV缓存)、激活值分布宽泛(不利于低比特量化)。
3.2.1 核心原理:自注意力的计算开销分析
自注意力机制的计算过程为:给定输入 \(X \in \mathbb{R}^{N \times D}\)(N为序列长度,D为特征维度),通过三个线性变换生成Q、K、V矩阵,然后计算:
Attention(Q,K,V) = softmax(QK^T / √d_k) V
其中 \(QK^T\) 的维度为 \(N \times N\),当N较大时(如ViT处理224×224图像,patch size=16时N=196),该矩阵乘法的计算复杂度为 \(O(N^2 \cdot D)\)。在边缘设备上,这不仅消耗算力,更关键的是中间矩阵 \(QK^T\) 需要存储在片上内存,其大小为 \(N^2 \times 4\) 字节(FP32)。对于N=196,单头就需要约150KB,多头累加后极易超出SRAM容量。
3.2.2 判断方法:Transformer的量化敏感度评估
与CNN不同,Transformer的激活值(尤其是注意力权重经过Softmax后的分布)通常集中在0-1区间,但Q、K、V的中间值可能具有较大动态范围。量化前需进行逐层激活分布统计:
- 收集校准数据集(约100-500张代表性图片)的激活值直方图
- 计算每层的动态范围(min/max)和标准差
- 若某层激活值标准差大于均值的3倍,则建议保留FP16或使用混合精度
- 对Softmax输出层,由于值域固定为[0,1],可直接使用INT8量化
实践中发现,LayerNorm层对量化误差极为敏感,因为其输出直接参与后续残差连接。建议将LayerNorm保留在FP32,或使用幂次缩放(Power-of-2 Scale)的INT8近似。
3.2.3 案例拆解:ViT-Tiny在边缘NPU上的INT8量化
某智能摄像头方案采用ViT-Tiny(参数量5.7M)进行图像分类,目标部署到算力1TOPS的NPU。初始FP32模型推理延迟为85ms,需优化至30ms以内。量化过程中发现:
- 第1-3层(Patch Embedding + 前两个Block)激活值动态范围达[-12.8, 11.2],直接INT8量化后精度下降4.5%
- 第4-6层激活值逐渐收敛至[-3.2, 3.5],INT8量化精度损失仅0.8%
- 最终采用混合精度方案:前3层FP16,后3层INT8,模型大小从22MB降至8.5MB,延迟降至28ms
3.3 常见模型架构对比:ResNet、MobileNet、YOLO
三类模型分别代表了高精度基准(ResNet)、轻量化设计(MobileNet)和实时检测(YOLO)的典型范式。理解其架构差异是制定压缩策略的前提。
3.3.1 核心原理:架构设计对压缩的影响
ResNet(残差网络)通过跳跃连接缓解梯度消失,但残差分支的存在使得剪枝时必须保持输入输出通道一致,限制了剪枝自由度。其计算特性为:3×3卷积占主导,通道数逐阶段翻倍(64→128→256→512),计算量集中在后两个阶段。
MobileNet(深度可分离卷积)将标准卷积分解为深度卷积(Depthwise Conv)和逐点卷积(Pointwise Conv)。深度卷积的FLOPs仅为标准卷积的1/9(3×3核),但权重数量也相应减少。这种结构对剪枝极为友好——深度卷积层可直接剪枝通道,因为每个通道独立计算,互不干扰。
YOLO(You Only Look Once)系列采用CSPDarknet或类似主干+FPN(特征金字塔)+检测头。其计算特性为:多尺度特征融合(P3/P4/P5层)导致内存访问频繁;检测头(Head)包含大量1×1卷积,计算密度高但权重占比小;后处理NMS(非极大值抑制)虽不占FLOPs,但影响端到端延迟。
3.3.2 对比分析:压缩策略选择矩阵
| 模型 | 主要算子 | 计算瓶颈 | 推荐压缩方法 | 注意事项 |
|---|---|---|---|---|
| ResNet-50 | 3×3 Conv, BN, ReLU | Stage3/4的卷积层 | 通道剪枝 + INT8量化 | 残差分支需保持通道匹配 |
| MobileNetV2 | DW Conv, PW Conv | PW Conv(1×1) | 深度卷积通道剪枝 + INT8 | 倒残差块(Inverted Residual)的扩展层不宜过度剪枝 |
| YOLOv5s | Conv, CSP, Detect Head | 主干Stage3/4 + Head | 结构化剪枝(稀疏训练后) + 量化 | 检测头保留更多通道,避免定位精度下降 |
3.3.3 实战场景:YOLOv5s在边缘盒子上的压缩调优
某工业质检项目需将YOLOv5s部署到Jetson Nano(算力472 GFLOPS),要求检测速度≥25 FPS,mAP@0.5≥0.85。初始模型FP32推理速度为12 FPS,mAP=0.89。优化过程如下:
- 稀疏化训练:在BN层γ上施加L1正则,训练50个epoch,γ稀疏度达70%
- 通道剪枝:按γ值排序,剪除主干网络中40%的通道,检测头仅剪除15%
- INT8量化:使用500张验证图片进行校准,采用逐通道量化(Per-channel)
- TensorRT优化:层融合(Conv+BN+ReLU),启用FP16备用
最终结果:模型大小从28MB降至9.6MB,推理速度提升至28 FPS,mAP=0.86。复盘发现,检测头(Detect Head)的通道剪枝比例超过20%时,小目标(<32×32像素)的召回率下降明显,因此后续调整为主干剪枝45%、检测头剪枝10%的配比。
3.4 常见误区与总结复盘
在模型压缩实践中,工程师常陷入以下误区:
- 误区一:所有层使用相同量化位宽。实际上,浅层(靠近输入)对量化更敏感,深层相对鲁棒。建议采用敏感度驱动的混合精度量化。
- 误区二:剪枝比例越高越好。当剪枝超过某阈值(如ResNet的50%),精度会急剧下降。需通过逐层剪枝-评估-微调的迭代流程找到拐点。
- 误区三:忽略内存访问模式。即使FLOPs降低,若剪枝导致内存碎片化或缓存命中率下降,实际延迟可能不降反升。需在目标硬件上实测验证。
- 误区四:对Transformer直接套用CNN量化方案。Transformer的LayerNorm和Softmax需要特殊处理,建议使用基于熵的校准方法(如KL散度)而非简单的min/max。
总结而言,模型压缩的本质是在计算效率与表示能力之间寻找帕累托最优。CNN适合激进的权重量化与结构化剪枝,Transformer需谨慎处理动态激活,YOLO类检测模型则需平衡主干与检测头的压缩配比。建议在项目启动初期即建立模型-硬件联合分析流程:先通过profiling工具(如PyTorch Profiler、TensorRT Profiler)获取各层FLOPs、内存占用和延迟,再结合本章的架构特性知识制定压缩方案,最后在目标设备上进行端到端验证。