3、视觉模型基础:卷积神经网络(CNN)核心概念、图像分类与目标检测模型简介
在进入TinyML与Ethos-U硬件加速的实战之前,必须先建立对视觉模型本身的清晰认知。视觉模型的核心是卷积神经网络(CNN),它通过模拟人类视觉皮层的层级感知机制,从原始像素中逐层抽象出边缘、纹理、部件直至语义信息。本章将聚焦CNN的三大核心概念——卷积、池化与全连接,并对比图像分类与目标检测两类任务的模型架构差异,为后续在Ethos-U上完成模型转换、量化与部署打下坚实的理论基础。
上图展示了CNN处理视觉信息的主干流程。输入图像经过多次“卷积+池化”组合,空间分辨率逐步降低,通道数逐步增加,最终通过全连接层输出分类概率。目标检测模型则在此基础上增加边界框回归分支。下面我们将逐一拆解这些核心概念。
3.1 卷积层:特征提取的引擎
卷积层是CNN中最核心的运算单元。它通过一组可学习的卷积核(Filter/Kernel)在输入特征图上滑动,计算局部区域的加权和,从而提取特定模式的特征。每个卷积核负责检测一种特征,例如边缘、角点、纹理或更复杂的语义模式。
核心原理:局部连接与权值共享
与传统全连接层不同,卷积层具有两个关键特性:局部连接和权值共享。局部连接意味着每个输出神经元只与输入的一个局部窗口相连,这符合图像中局部像素相关性强的特点;权值共享则指同一个卷积核在整个输入上滑动时权重不变,大幅减少了参数量。例如,一个3x3的卷积核在224x224x3的输入上滑动,其参数量仅为27个(3x3x3),而全连接层则需要数百万个参数。
Output = (Input - K + 2*Padding) / Stride + 1。在TinyML场景中,通常选择较小的卷积核(如3x3)和步长1,以平衡计算量与特征提取能力。
判断方法:如何选择卷积核参数
- 卷积核尺寸:3x3是主流选择,两个3x3堆叠等效于一个5x5的感受野,但参数量更少(18 vs 25),且非线性更强。
- 步长:步长1保持空间分辨率,步长2用于下采样。在Ethos-U上,步长2的卷积可替代池化层,减少计算量。
- 填充:'SAME'填充保持尺寸不变,'VALID'填充则缩小尺寸。对于边缘特征重要的任务,建议使用SAME填充。
案例拆解:MobileNetV1中的深度可分离卷积
在资源受限的TinyML设备上,标准卷积的计算量往往难以承受。以MobileNetV1为代表的轻量级模型引入了深度可分离卷积,将标准卷积分解为深度卷积(Depthwise Convolution)和逐点卷积(Pointwise Convolution)。深度卷积对每个输入通道独立使用一个卷积核,逐点卷积则使用1x1卷积核融合跨通道信息。这种分解将计算量降低为原来的约1/8到1/9。例如,输入112x112x64,输出112x112x128,标准3x3卷积的计算量约为 112x112x64x128x3x3 ≈ 924M MACs,而深度可分离卷积仅需约 112x112x64x3x3 + 112x112x64x128 ≈ 102M MACs,计算量降低近90%。
| 卷积类型 | 参数量 | 计算量(MACs) | 适用场景 |
|---|---|---|---|
| 标准卷积 | 3x3x64x128=73,728 | ~924M | 高精度要求,资源充足 |
| 深度可分离卷积 | 3x3x64 + 1x1x64x128 = 8,768 | ~102M | TinyML、边缘设备 |
| 1x1卷积 | 1x1x64x128=8,192 | ~102M | 通道变换、降维 |
3.2 池化层与激活函数:下采样与非线性
池化层(Pooling)用于降低特征图的空间维度,同时保留主要特征。最常见的最大池化(Max Pooling)取窗口内的最大值,平均池化(Average Pooling)取平均值。池化层不仅减少了后续层的计算量,还提供了平移不变性,即微小的位置偏移不会显著影响输出。
操作流程:池化与激活的标准组合
- 卷积:提取局部特征,输出特征图。
- 批归一化(BatchNorm):加速收敛,稳定训练。在推理时,BN层可融合到卷积层中,减少计算。
- 激活函数:引入非线性。ReLU(Rectified Linear Unit)是默认选择,计算简单且能缓解梯度消失。量化模型中常用ReLU6(限制最大输出为6),便于低精度推理。
- 池化:下采样,通常使用2x2窗口、步长2,将空间尺寸减半。
实战场景:在Visual Wake Words任务中调整池化策略
Visual Wake Words(VWW)是一个典型的TinyML图像分类任务,目标是检测图像中是否包含人物。该任务使用MobileNetV1作为骨干网络,输入尺寸96x96x3。在部署到Ethos-U55时,我们发现将最后一个池化层从平均池化改为全局平均池化(GAP)可以显著减少参数量。GAP将整个特征图(3x3x1024)直接平均为1024维向量,替代了原来的全连接层,参数量从1024x1001≈100万降至0。这一改动使模型大小从4.3MB降至3.8MB,推理时间从85ms降至72ms,而精度仅下降0.3%。
| 方案 | 参数量 | 模型大小 | 推理时间(Ethos-U55) | 精度(Top-1) |
|---|---|---|---|---|
| 原始:全连接层 | ~1.02M | 4.3MB | 85ms | 87.2% |
| 优化:全局平均池化 | ~0.02M | 3.8MB | 72ms | 86.9% |
3.3 图像分类模型:从LeNet到EfficientNet
图像分类是视觉任务中最基础的问题,目标是给整张图像分配一个类别标签。CNN分类模型通常由特征提取器(卷积层堆叠)和分类头(全连接层+Softmax)组成。在TinyML领域,模型设计需要在精度、参数量和计算量之间取得平衡。
主流模型对比
| 模型 | 参数量 | 计算量(MACs) | ImageNet Top-1 | TinyML适用性 |
|---|---|---|---|---|
| LeNet-5 | 60K | 0.3M | ~80%(MNIST) | 极简任务 |
| MobileNetV1 | 4.2M | 569M | 70.6% | 经典选择 |
| MobileNetV2 | 3.4M | 300M | 72.0% | 推荐,带线性瓶颈 |
| EfficientNet-B0 | 5.3M | 390M | 77.1% | 精度优先 |
| MobileNetV3-Small | 2.5M | 56M | 67.4% | 极致低功耗 |
判断方法:如何为Ethos-U选择分类模型
- 内存约束:Ethos-U55的SRAM通常为512KB-4MB,模型权重必须能装入SRAM或外部Flash。MobileNetV2量化后约3.4MB,可存入外部Flash,但推理时需分块加载。
- 计算约束:Ethos-U55的算力为0.1-1 TOPS(8位整数)。以MobileNetV2为例,300M MACs在1 TOPS算力下理论推理时间为0.6ms,但实际因内存带宽限制,通常在10-30ms。
- 量化友好性:选择带有ReLU6激活的模型(如MobileNetV2/V3),因为ReLU6的输出范围有限,更适合8位量化,能减少精度损失。
3.4 目标检测模型:从SSD到Tiny-YOLO
目标检测不仅需要识别图像中的物体类别,还要定位其位置(边界框)。与分类模型不同,检测模型需要同时输出类别概率和边界框坐标。在TinyML场景中,常用的检测模型包括SSD(Single Shot MultiBox Detector)和YOLO(You Only Look Once)的轻量级变体。
核心原理:锚框与边界框回归
现代检测模型通常基于锚框(Anchor Box)机制。模型在特征图的每个位置预定义多个不同尺寸和宽高比的锚框,然后预测每个锚框内是否包含物体(置信度)、物体类别以及边界框的偏移量。例如,在SSD中,对于一张300x300的输入,会在6个不同尺度的特征图上生成8732个锚框。在TinyML中,锚框数量需要大幅减少,通常控制在1000-2000个以内。
操作流程:Tiny-YOLOv3的部署步骤
- 模型设计:使用Darknet-Tiny作为骨干,输入尺寸416x416,输出13x13和26x26两个尺度的特征图。
- 锚框聚类:在训练集上使用K-Means聚类确定9个锚框的尺寸,分配到两个尺度。
- 量化:使用TensorFlow Lite Converter进行8位量化,校准数据集选择500张代表性图像。
- Ethos-U部署:将量化后的TFLite模型通过Vela编译器转换为Ethos-U可执行的格式。
- 后处理:在MCU上执行非极大值抑制(NMS),去除重叠的边界框。
案例拆解:工业零件缺陷检测
在某电子制造工厂的PCB板缺陷检测项目中,我们使用Tiny-YOLOv3在STM32H7+Ethos-U55平台上实现了实时检测。项目背景是传统人工目检效率低(每块板需3秒),且漏检率高(约2%)。初始方案使用YOLOv4-tiny,模型大小12MB,推理时间450ms,无法满足产线节拍(<200ms)。
关键优化过程:
- 输入尺寸:从416x416降至256x256,计算量降低约60%。
- 通道裁剪:将骨干网络的通道数从32/64/128裁剪为24/48/96,参数量减少40%。
- 量化感知训练:在训练阶段模拟量化误差,最终8位量化后精度仅下降0.8%。
- NMS优化:将NMS的IoU阈值从0.45调整为0.35,减少候选框数量,后处理时间从35ms降至12ms。
最终模型大小2.1MB,推理时间85ms,检测精度mAP@0.5达到96.3%,漏检率降至0.3%。产线节拍提升至150ms/块,整体效率提升20倍。复盘经验:在TinyML检测任务中,输入尺寸和通道数的裁剪比更换模型架构更有效,且量化感知训练是保证精度的关键。
| 优化阶段 | 模型大小 | 推理时间 | mAP@0.5 | 备注 |
|---|---|---|---|---|
| 初始YOLOv4-tiny | 12MB | 450ms | 97.1% | 无法满足节拍 |
| 输入降为256 | 12MB | 280ms | 95.8% | 仍超时 |
| 通道裁剪 | 4.5MB | 120ms | 94.2% | 接近目标 |
| 量化+优化NMS | 2.1MB | 85ms | 96.3% | 满足要求 |
3.5 分类与检测的共性架构与Ethos-U适配要点
无论是分类还是检测模型,其骨干网络(Backbone)都是卷积层堆叠。Ethos-U硬件加速器对CNN的支持具有以下特点:支持8位整数运算、支持3x3和1x1卷积的硬件加速、支持深度可分离卷积的流水线优化。在模型设计时,应遵循以下原则:
- 算子约束:仅使用硬件支持的算子(Conv2D、DepthwiseConv2D、Add、MaxPool、AveragePool、Reshape、Softmax)。避免使用自定义算子或复杂激活函数。
- 张量布局:Ethos-U要求特征图的通道数尽量为8的倍数,以便充分利用SIMD指令。例如,将MobileNetV2的宽度乘数设为0.75,输出通道为24/48/96,均为8的倍数。
- 内存规划:特征图存储在SRAM中,权重可存储在Flash中。Ethos-U的DMA支持权重流式加载,但需确保Flash读取带宽足够。