3、嵌入式AI基础:嵌入式AI与传统AI的区别、模型量化原理、模型压缩技术概览
各位同学好,我是老周。今天咱们聊聊嵌入式AI的基础知识。说实话,这个章节是整个课程的地基,地基打不牢,后面盖楼就悬了。
我最早接触嵌入式AI是在2018年,那时候刚把一个大模型往STM32上塞,结果发现根本跑不动。后来才明白,嵌入式AI和传统AI完全是两码事。今天我就把这几年的经验掰开揉碎了讲给你听。
3.1 嵌入式AI vs 传统AI:到底差在哪?
很多人觉得,嵌入式AI不就是把模型放到小设备上跑吗?嗯,这么说也对,但太表面了。我习惯从三个维度来看它们的区别:
| 对比维度 | 传统AI(云端) | 嵌入式AI(边缘端) |
|---|---|---|
| 计算资源 | GPU集群,随便跑 | MCU/MPU,几MB内存 |
| 功耗限制 | 几百瓦,散热随便搞 | 毫瓦级,电池供电 |
| 实时性要求 | 秒级响应就行 | 毫秒级,甚至微秒级 |
| 数据隐私 | 数据上传云端 | 本地处理,不上传 |
| 模型大小 | 几百MB到几GB | 几十KB到几MB |
你看这个表就明白了。传统AI追求的是精度,恨不得把模型做到99.99%。但嵌入式AI呢?我经常跟团队说一句话:在嵌入式世界里,能跑起来的模型才是好模型。
举个例子。我之前做过一个工业异常检测项目,云端跑的ResNet-152,精度确实高。但客户要求部署到树莓派上,每秒处理30帧。你想想看,ResNet-152在树莓派上跑一帧要好几秒,根本没法用。最后我们换成了MobileNetV3,精度降了2%,但帧率到了35fps。客户很满意。
核心观点:嵌入式AI不是简单地把大模型变小,而是在资源受限的条件下,找到精度、速度、功耗三者之间的平衡点。
3.2 模型量化原理:把浮点数变成整数
量化,说白了就是把模型里的浮点数(比如3.1415926)变成整数(比如3)。为什么要这么做?因为MCU没有FPU(浮点运算单元),算浮点数慢得要命。
我习惯把量化分成两种:
- 训练后量化(PTQ):模型训练完了,直接转成整数。简单粗暴,但精度损失可能大一些。
- 量化感知训练(QAT):训练的时候就模拟量化效果,让模型学会适应。精度损失小,但训练时间翻倍。
量化的数学原理其实不复杂。以最常见的8位量化为例:
// 量化公式:q = round(r / scale) + zero_point
// 反量化公式:r = (q - zero_point) * scale
// 其中:
// r 是原始浮点数
// q 是量化后的整数(0~255)
// scale 是缩放因子
// zero_point 是零点偏移
举个例子。假设我们有一组权重值在[-1.0, 1.0]之间,量化到8位无符号整数(0~255):
scale = (1.0 - (-1.0)) / (255 - 0) = 2.0 / 255 ≈ 0.00784
zero_point = round(0 / 0.00784) + 0 = 128
// 原始值 0.5 量化后:
q = round(0.5 / 0.00784) + 128 = round(63.78) + 128 = 192
你看,就这么简单。但实际项目中坑很多。我曾经踩过一个坑:量化后模型精度从95%掉到了60%。排查了半天,发现是某个层的激活值分布太广,scale算得不准。后来我养成了一个习惯:量化前先做校准,用几百张图片跑一遍,统计每层的激活值范围。
我的经验:Reality AI平台自带的量化工具做得不错。它会自动做校准,还会给出每层的量化误差报告。我建议你第一次用的时候,先跑一遍PTQ看看精度,如果掉得太多再上QAT。
3.3 模型压缩技术概览:不只是量化
量化只是模型压缩的一种手段。实际上,嵌入式AI的压缩工具箱里还有不少好东西。我按使用频率排个序:
- 权值剪枝:把接近0的权重直接砍掉。我做过实验,ResNet-18剪掉50%的权重,精度只掉了0.3%。
- 知识蒸馏:用大模型(教师)教小模型(学生)。学生模型学到的不是原始数据,而是教师的"经验"。
- 低秩分解:把大矩阵拆成几个小矩阵的乘积。适合全连接层多的模型。
- 轻量化网络设计:从根上设计小模型,比如MobileNet、ShuffleNet这些。
这里我画了一张图,帮你理清这些技术的关系:
在实际项目中,我很少只用一种技术。通常是组合拳:先剪枝,再量化,最后用蒸馏微调一下。比如我之前做的语音唤醒词检测模型,原始模型1.2MB,剪枝后800KB,量化到8位后只有200KB,再蒸馏一下精度从92%恢复到了94%。
注意:压缩不是万能的。我曾经试过把模型压缩到原始大小的5%,结果精度直接崩了。记住一个原则:压缩比每翻一倍,精度损失风险增加10倍。建议从2倍压缩开始试,逐步加大。
3.4 在Reality AI平台上的实践建议
Reality AI平台对模型压缩的支持很全面。我个人习惯的工作流是这样的:
- 第一步:用平台自带的模型分析器看看模型里哪些层是"胖子"(参数量大)
- 第二步:对全连接层做剪枝,对卷积层做量化
- 第三步:用平台的自动压缩工具跑一遍,它会尝试不同的压缩策略
- 第四步:在目标硬件上做实测,看推理时间和精度
这里有个小技巧:Reality AI的量化工具支持混合精度量化。什么意思呢?就是敏感层用8位,不敏感层用4位甚至2位。我试过,模型大小能再降30%,精度几乎不变。
好了,嵌入式AI的基础就讲到这里。记住我说的:能跑起来的模型才是好模型。下一章咱们会深入Reality AI平台,手把手教你做第一个模型移植。