4、模型选型:适合TinyML的关键点检测网络(如MobileNetV2、EfficientNet-Lite)、参数量与精度权衡
在TinyML关键点检测项目的工程化落地中,模型选型是决定部署成败的首要技术决策。与云端或边缘服务器不同,Ethos-U系列NPU(如Ethos-U55、Ethos-U65)所服务的MCU级系统,其Flash通常仅有数百KB至数MB,RAM往往不足1MB,且CPU主频多在数百MHz量级。在这样的资源约束下,选择一个“精度尚可但参数量爆炸”的模型,或是选择一个“轻量但关键点定位漂移严重”的模型,都会导致项目返工。本章将围绕MobileNetV2、EfficientNet-Lite等典型轻量级网络,系统讲解参数量、计算量(MACs)、内存峰值与关键点检测精度之间的权衡方法,并给出面向Ethos-U部署的选型决策框架。
上图展示了TinyML关键点检测模型选型的完整决策链路。与图像分类任务不同,关键点检测属于坐标回归任务,其输出是人体关节或物体特征点的(x, y)坐标。这意味着模型不仅需要提取语义特征,还需要保留一定的空间分辨率信息。因此,在选型时不能简单照搬分类任务的“最优模型排行榜”,而必须结合Ethos-U的硬件特性、量化后的精度损失以及关键点任务的特定评估指标(如PCK、OKS)进行综合判断。
4.1 核心原理:为什么MobileNetV2和EfficientNet-Lite适合TinyML关键点检测
MobileNetV2和EfficientNet-Lite之所以成为TinyML关键点检测的常用骨干网络,其核心原理在于它们采用了深度可分离卷积(Depthwise Separable Convolution)和线性瓶颈结构(Linear Bottleneck)。深度可分离卷积将标准卷积分解为深度卷积(Depthwise Conv)和逐点卷积(Pointwise Conv),计算量约为标准卷积的1/9至1/8。以MobileNetV2为例,其倒残差结构(Inverted Residual Block)先通过1x1卷积升维,再进行3x3深度卷积,最后用1x1卷积降维,这种“先升后降”的设计在保持特征表达能力的同时大幅减少了参数量。
EfficientNet-Lite则是Google针对边缘设备优化的EfficientNet变体,去除了Squeeze-and-Excitation模块(该模块在NPU上效率较低),并调整了激活函数以适配INT8量化。其核心思想是通过复合缩放(Compound Scaling)统一调整网络的深度、宽度和输入分辨率。对于关键点检测,我们通常不直接使用EfficientNet-Lite的分类头,而是将其作为骨干网络,在其后接上反卷积或上采样层来恢复空间分辨率。
在Ethos-U上部署时,这两个网络还有一个重要优势:结构规整,算子类型少。Ethos-U的NPU针对3x3深度卷积、1x1卷积等算子做了深度优化,而MobileNetV2和EfficientNet-Lite恰好以这两种算子为主。相比之下,ResNet中的7x7大卷积核、DenseNet中的密集连接在NPU上会产生大量内存搬运和算子调度开销,导致实际推理速度远低于理论MACs所暗示的水平。
| 网络结构 | 参数量(@224x224) | MACs(M) | Ethos-U友好度 | 关键点检测适配性 |
|---|---|---|---|---|
| MobileNetV2-1.0 | 3.4M | 300 | 高(算子规整) | 需修改输出头,下采样倍数32倍偏大 |
| MobileNetV2-0.35 | 0.5M | 42 | 高 | 适合低分辨率输入(96x96或128x128) |
| EfficientNet-Lite0 | 4.7M | 390 | 中高(需移除SE) | 需调整最后几层stride |
| EfficientNet-Lite1 | 5.4M | 540 | 中 | Flash占用可能超限 |
| MobileNetV3-Small | 2.5M | 56 | 中(含SE模块) | SE在NPU上效率低,不推荐 |
4.2 判断方法:参数量、MACs与内存峰值的量化评估流程
在选定具体网络之前,必须建立一套可量化的评估流程。第一步是计算理论指标:使用TensorFlow或PyTorch的模型分析工具(如tf.profiler、torchsummary)获取参数量和MACs。但要注意,理论MACs并不等于Ethos-U上的实际延迟,因为NPU的利用率受算子调度、内存带宽和量化方式影响。第二步是模拟量化影响:使用TensorFlow Lite的量化工具将模型转换为INT8,并记录量化前后的精度变化。对于关键点检测,通常关注PCK(Percentage of Correct Keypoints)指标,即预测关键点与真值距离小于阈值(如0.2倍躯干直径)的比例。
第三步是内存峰值估算。关键点检测模型的内存占用分为三部分:权重存储(Flash)、激活值(RAM)和临时缓冲区。激活值大小与输入分辨率、网络深度和通道数直接相关。例如,一个输入为128x128x3的MobileNetV2-0.35模型,其第一层卷积输出的特征图大小为64x64x16,占用64KB(INT8),而最后一层特征图可能为4x4x320,仅占5KB。峰值通常出现在网络中间层。使用如下公式估算:
激活内存峰值 ≈ max(各层输出特征图大小) × 2(双缓冲)
权重Flash占用 ≈ 参数量 × 1字节(INT8量化后)
总RAM需求 ≈ 激活峰值 + 输入/输出缓冲区 + 中间结果暂存
第四步是在Ethos-U上实测。使用Arm的Vela编译器对TFLite模型进行编译,Vela会生成针对Ethos-U优化的二进制文件,并报告预期的周期数和内存使用。建议在开发板上运行基准测试,测量实际帧率(FPS)和延迟。一个实用的经验法则是:如果模型在PC仿真中推理时间小于10ms,在Ethos-U上通常可以做到30FPS以上,但前提是模型结构规整且无大量Padding操作。
4.3 案例拆解:手部关键点检测模型的选型实战
我们以一个实际项目为例:在Cortex-M55+Ethos-U55平台上实现21点手部关键点检测,输入为96x96x3的灰度图像,要求帧率≥30FPS,Flash占用≤800KB,RAM占用≤400KB,PCK@0.2≥85%。
初始方案与问题:团队最初选择了MobileNetV2-1.0作为骨干网络,输入分辨率128x128。在PC上验证精度达到PCK@0.2=91%,但转换为INT8后,Flash占用达到3.4MB,远超800KB的限制。即使将输入降到96x96,Flash占用仍为3.4MB(权重大小与输入分辨率无关),无法满足要求。
分析过程:通过Vela编译器分析发现,MobileNetV2-1.0的最后一层卷积通道数为1280,占用了大量权重空间。同时,128x128输入导致第一层卷积的激活值达到64x64x32=128KB,RAM峰值接近500KB。团队决定采用宽度因子0.35的MobileNetV2,并将输入分辨率降至96x96。此时参数量降至0.5M,Flash占用约500KB,但PCK@0.2降至82%,未达85%的指标。
优化操作:团队没有盲目更换网络,而是进行了两项针对性调整。第一,将骨干网络的最后三个阶段(stride=16和stride=32的特征层)改为stride=8,保留更高分辨率的特征图。具体做法是将stage4和stage5的stride从2改为1,并适当增加通道数以补偿感受野损失。第二,在检测头中引入空间注意力模块(一个1x1卷积+Sigmoid),仅增加2K个参数,但将PCK提升至86.5%。最终模型参数量为0.62M,Flash占用620KB,RAM峰值360KB,在Ethos-U55上实测帧率达到38FPS。
| 方案 | 参数量 | Flash | RAM峰值 | PCK@0.2 | 帧率 | 结论 |
|---|---|---|---|---|---|---|
| MobileNetV2-1.0 @128 | 3.4M | 3.4MB | 512KB | 91% | 12FPS | 资源超限 |
| MobileNetV2-0.35 @96 | 0.5M | 500KB | 280KB | 82% | 45FPS | 精度不足 |
| MobileNetV2-0.35+高分辨率特征 @96 | 0.62M | 620KB | 360KB | 86.5% | 38FPS | 满足要求 |
复盘经验:这个案例揭示了关键点检测选型的核心矛盾——分类任务中“小模型”可能直接可用,但关键点检测必须考虑空间分辨率。MobileNetV2-0.35在分类任务中精度下降有限,但在关键点检测中,由于下采样倍数过大(32倍),小目标关键点的定位误差被放大。通过调整stride保留高分辨率特征,比单纯增加宽度因子更有效。此外,量化感知训练(QAT)比训练后量化(PTQ)能多保留2-3%的PCK,在精度临界时值得采用。
4.4 常见误区与总结复盘
在模型选型过程中,工程师常陷入以下误区。第一个误区是盲目追求“最高精度”的预训练模型。ImageNet上精度高的模型不一定适合关键点检测,因为关键点检测需要的是特征定位能力而非分类能力。第二个误区是忽略输入分辨率的影响。将输入从224降到96,MACs减少约5倍,但精度下降可能超过10%。对于关键点检测,建议输入分辨率不低于64x64,否则小关节(如手指尖)的定位误差会超过一个像素,导致PCK急剧下降。第三个误区是不进行量化感知训练。TinyML部署必然使用INT8量化,如果只在FP32下训练然后直接PTQ,关键点坐标的回归值对量化误差非常敏感,可能导致PCK下降5-8%。
总结本章的选型决策要点:
- 先定输入分辨率:根据关键点最小尺寸和定位精度要求,确定输入分辨率,通常为96x96或128x128。
- 选择骨干网络:优先考虑MobileNetV2(宽度因子0.25-0.5)或EfficientNet-Lite0,并检查其下采样倍数是否适合关键点任务。
- 调整输出stride:将骨干网络最后1-2个stage的stride改为1,保留8倍或16倍下采样的特征图。
- 设计轻量检测头:使用1x1卷积降维+全连接或1x1卷积直接回归坐标,避免使用反卷积(增加大量计算)。
- 量化评估:使用QAT训练,并在量化后验证PCK/OKS指标,确保损失在可接受范围内。
- Vela编译验证:使用Vela编译器生成NPU配置,检查Flash/RAM占用和周期数,必要时回调宽度因子或输入分辨率。