156、TinyML模型训练最佳实践:迁移学习
156 TinyML模型训练最佳实践:迁移学习上周调试一个部署在STM32F4上的关键词唤醒模型,发现准确率死活上不去。同事用同样的数据集在PC上跑出了92%,我这边只有67%。折腾了两天,最后发现是迁移学习时把骨干网络的BN层给冻死了——这个坑,今天必须写清楚。为什么TinyML必须拥抱迁移学习先看一个现实问题:你手头只有200条“开灯”语音样本,想训练一个能在Cortex-M4上跑的唤醒模型。从头训练?参数量动辄几十万,200条数据连一个卷积层的权重都喂不饱。更致命的是,嵌入式场景的数据分布往往和公开数据集差异巨大——麦克风采样率不同、环境噪声不同、甚至说话人的口音都不同。迁移学习的核心逻辑很简单:让模型先在ImageNet或Speech Commands这种大规模数据集上学会通用特征(边缘、纹理、音素结构),然后在你自己的小数据集上微调。这相当于给模型装了一个“预训练的大脑”,你只需要教它“开灯”这个新词长什么样。但问题来了:TinyML的模型通常只有几十KB,骨干网络本来就浅,迁移学习的效果很容易被“冻层策略”毁掉。冻层不是越深越好很多人以为迁移学习就是把前面几层冻住,只训练最后几层。这个思路在ResNet50上没问题,但在MobileNetV2这种轻量网络上会翻车。我踩过的坑:用Speech Commands预训练的MobileNetV2微调唤醒词模型,冻住了前80%的层。结果训练loss降不下去,验证集准确率卡在55%。后来用Netron可视化模型结构才发现——MobileNetV