154、TinyML模型训练最佳实践:数据增强与平衡
154、TinyML模型训练最佳实践:数据增强与平衡
上周调试一个关键词唤醒模型,在STM32上跑出来的准确率比PC端低了整整12个百分点。翻看训练日志,发现训练集里“开灯”这个指令的样本有800条,“关空调”只有120条。更致命的是,所有样本都是在安静环境下录制的,麦克风阵列采集到的背景噪声几乎为零。这种“实验室完美数据”训练出来的模型,一上实际设备就原形毕露。
数据不平衡和缺乏多样性,是TinyML模型从PC到嵌入式落地时最隐蔽的杀手。今天这篇笔记,专门聊聊在资源受限的嵌入式场景下,怎么用数据增强和平衡策略把模型拉回正轨。
数据不平衡:不是所有类别都生而平等
先看一个真实案例。我手头有个手势识别项目,用加速度计采集数据。“挥手”动作采集了2000组,“握拳”只有300组。训练出来的模型对“挥手”识别率98%,对“握拳”只有62%。表面上看整体准确率不错,但实际使用中用户做“握拳”动作时模型频繁误判。
不平衡带来的问题不仅仅是少数类准确率低。模型会倾向于把边界模糊的样本全部判给多数类,因为这样能让损失函数更“舒服”。在嵌入式场景下,这种倾向会被量化误差放大——8bit量化后,少数类的特征空间可能直接被压缩到无法区分。
解决不平衡,我试过几种方法:
过采样少数类。最简单的做法是把“握拳”的300组数据复制几份凑到2000组。但直接复制会导致模型过拟合,记住的是特定样本的噪声模式而非通用特征。改进做法是加入轻微扰动再复制——对加速度数据加±5%的随机缩放,或者对时间轴做±2帧的随机偏移。别这样写:np.repeat(minorit
