3. 低功耗设计动机

选模型架构,说白了就是在「算力」和「识别率」之间找平衡点。我见过不少团队一上来就上Transformer,结果芯片跑不动,功耗压不下去,最后只能砍层数、减参数,折腾一圈还不如一开始选个轻量级的CRNN。

这一章,咱们就掰开揉碎聊聊:DNN、CRNN、Transformer,到底哪个更适合低功耗唤醒词场景。

3.1 三种架构的核心差异

先看一张对比表,心里有个底:

架构 核心算子 参数量(典型) 单次推理MACs 时序建模能力 低功耗适配度
DNN 全连接 + ReLU 200K ~ 500K ~1M 弱(需拼接上下文帧) ★★★★★
CRNN Conv1D + GRU/LSTM 100K ~ 300K ~2M 强(循环结构自带时序) ★★★★☆
Transformer Multi-Head Attention + FFN 500K ~ 2M ~10M+ 极强(全局注意力) ★★☆☆☆

关键结论:唤醒词模型通常只有 1~3 秒的音频窗口,不需要全局注意力。CRNN 在「时序建模能力」和「计算开销」之间取得了最佳平衡,是我个人在量产项目中的首选。

3.2 DNN:简单,但上限低

DNN 是最早被用在唤醒词上的架构。做法很简单:把音频切成帧,每帧提 MFCC 特征,然后拼上前后几帧作为输入,丢进全连接网络。

优点很明显:

  • 计算量小,ARM Cortex-M4 级别的 MCU 就能跑
  • 内存占用低,Flash 100KB 以内就能放下
  • 部署简单,不需要特殊指令集优化

但坑也不少:

  • 时序建模靠「拼帧」,窗口长度固定,长依赖根本抓不住
  • 为了提升识别率,只能加宽层或加深层,参数量会迅速膨胀
  • 对噪声敏感,实际场景中误唤醒率偏高

我的经验:DNN 适合做「关键词检测」的 baseline,或者用在资源极度受限的 BLE 音频 SoC 上。但如果你的唤醒词有 3 个音节以上,我建议直接跳过 DNN。

3.3 CRNN:低功耗唤醒词的「黄金架构」

CRNN 把卷积和循环网络组合起来:

  • Conv1D:提取局部频谱模式,比如音高跳变、共振峰结构
  • GRU/LSTM:建模时序依赖,记住「这个词的发音顺序」

我习惯用这种结构:

Input: [batch, time, freq]  (例如 40帧 x 40维MFCC)
  │
  ▼
Conv1D(filters=32, kernel=3, stride=1) + BN + ReLU
  │
  ▼
Conv1D(filters=32, kernel=3, stride=1) + BN + ReLU
  │
  ▼
GRU(units=64, return_sequences=False)
  │
  ▼
Dense(units=num_classes) + Softmax

这个结构参数量大约 150K,在 Cortex-M7 上单次推理约 2ms,功耗控制在 5mW 以内。

注意:GRU 的隐层维度不要超过 64。我曾经试过 128 的隐层,识别率只提升了 0.3%,但推理时间翻了一倍,功耗直接飙到 12mW。得不偿失。

为什么 CRNN 适合低功耗?

  • 卷积层大幅降低时序维度,GRU 处理的是压缩后的特征序列,计算量可控
  • GRU 比 LSTM 少一个门,参数量少 25%,精度几乎不变
  • 可以量化到 int8,精度损失 < 0.5%

3.4 Transformer:强,但不适合「一直听」

Transformer 的 Self-Attention 能捕捉全局依赖,做语音识别确实强。但用在唤醒词上,有点「杀鸡用牛刀」。

问题出在哪儿?

  • Attention 的计算复杂度是 O(n²),n 是帧数。40 帧的输入,注意力矩阵就有 1600 个元素要算
  • 每个 Head 都要维护 Q、K、V 三个矩阵,内存带宽压力大
  • 在低功耗芯片上,Transformer 的推理功耗通常是 CRNN 的 3~5 倍

一个真实案例:我去年帮客户评估过 TinyTransformer 方案,模型精度确实比 CRNN 高 1.2%,但部署到恒玄 BES2600 上,待机功耗从 0.8mA 涨到了 2.3mA。客户直接否决了——唤醒率提升 1%,电池续航少一半,谁受得了?

不过,Transformer 也不是完全不能用。如果你有以下条件,可以考虑:

  • 芯片带硬件加速器(比如 NPU 或 DSP 专门做 Attention)
  • 唤醒词特别长(比如 5 个音节以上)
  • 对误唤醒率要求极高(比如医疗设备)

3.5 架构选型决策流程

我整理了一个决策流程,帮你快速判断:

唤醒词模型架构选型决策流程 开始:确定资源约束 Flash < 200KB 或 RAM < 64KB? 是 DNN 拼帧 + 全连接 否 有硬件加速器(NPU/DSP)? 是 Transformer 需量化 + 算子优化 否 CRNN Conv1D + GRU 部署验证:精度 + 功耗 + 延迟 💡 我的建议 没有硬件加速器时,CRNN 是低功耗唤醒词的最优解。 Transformer 只推荐在芯片有专用 Attention 加速单元时使用。

3.6 我的最终推荐

如果你现在要做一个低功耗唤醒词模型,我的建议是:

  1. 首选 CRNN:Conv1D + GRU,参数量控制在 150K 以内,量化到 int8,在主流低功耗芯片上都能跑
  2. 资源极度受限选 DNN:Flash < 100KB 时,DNN 是唯一选择,但要做好误唤醒率偏高的心理准备
  3. 有硬件加速再考虑 Transformer:别为了追热点而上 Transformer,除非你的芯片真的能扛住 Attention 的计算量

一个小技巧:选型阶段可以用「每毫瓦精度提升」这个指标来评估。公式很简单:(唤醒率 - 误唤醒率) / 平均推理功耗。CRNN 在这个指标上通常比 Transformer 高 2~3 倍。