该论文研究如何在内存和计算资源有限的微控制器上运行关键词识别(Keyword Spotting,KWS)模型。论文统一训练并比较了 DNN、CNN、LSTM、GRU、CRNN 和 DS-CNN 等网络,评价指标包括分类准确率、内存占用和单次推理运算量。同时,作者提出深度可分离卷积网络 DS-CNN 的表现最好,并公开了代码、模型定义和预训练模型。
1. 论文中的 TinyML 实现流程
论文中的关键词识别系统由三个主要部分组成:
连续音频信号
↓
音频分帧与声学特征提取
↓
神经网络分类器
↓
类别概率后处理
↓
关键词识别结果首先,将一定长度的音频信号切分为相互重叠的短时帧;然后,从每一帧中提取声学特征,形成二维的“时间帧 × 特征维度”矩阵;该矩阵输入神经网络分类器,输出各个关键词类别的概率。在连续音频场景中,系统还会对一段时间内的输出概率进行平均,以提高预测稳定性。
完整实验流程可以表示为:
Google Speech Commands 音频数据
↓
音频分帧
↓
提取 MFCC 特征
↓
训练不同神经网络模型
↓
比较准确率、内存和运算量
↓
选择适合 MCU 的模型结构
↓
将权重和激活值量化为 8 bit
↓
使用 CMSIS-NN 部署到 Cortex-M 微控制器2. 使用的声学特征
2.1 论文介绍的两类特征
论文介绍了两种常用于语音识别的人工声学特征:
- LFBE:Log-Mel Filter Bank Energies,对数梅尔滤波器组能量;
- MFCC:Mel-Frequency Cepstral Coefficients,梅尔频率倒谱系数。
LFBE 和 MFCC 都会将原始时域音频转换为频域或倒谱域系数,从而压缩原始音频的维度,并保留与声音类别识别相关的频谱信息。
2.2 实验实际使用的特征:MFCC
虽然论文同时介绍了 LFBE 和 MFCC,但实际模型实验统一采用的是 MFCC。
具体参数如下:
| 参数 | 设置 |
|---|---|
| 输入音频长度 | 1 秒 |
| 单帧长度 | 40 ms |
| 帧移 | 20 ms |
| 每帧 MFCC 数量 | 40 |
| 时间帧数量 | 49 |
| 最终输入尺寸 | 49 × 40 |
| 特征总数 | 1960 |
因此,一段 1 秒音频会被转换为一个 49 × 40 的 MFCC 特征矩阵。该矩阵同时包含:
- 横向的时间变化信息;
- 纵向的频谱或倒谱信息;
- 不同时间帧之间的声学模式变化。
论文后续的 DNN、CNN、RNN、CRNN 和 DS-CNN 均基于这组 MFCC 特征进行训练和比较。
2.3 数据增强
为了提高模型在噪声和时间偏移条件下的鲁棒性,论文使用了两种音频数据增强方法:
- 添加背景噪声;
- 对音频进行最大 100 ms 的随机时间平移。
模型使用交叉熵损失函数和 Adam 优化器训练,批大小为 100,共训练 20,000 次迭代。初始学习率为 5×10−45\times10^{-4}5×10−4,训练 10,000 次后降低到 10−410^{-4}10−4。
3. 论文比较的模型
3.1 DNN
DNN 是由多个全连接层构成的前馈神经网络。
其输入是展平后的 MFCC 特征矩阵:
49 × 40 MFCC
↓
展平的特征矩阵
↓
多个全连接层
↓
ReLU
↓
Softmax 分类DNN 的计算次数相对较少,但不能显式利用 MFCC 中局部的时间和频率相关性,而且全连接层通常具有较多参数。
3.2 CNN
CNN 将 49 × 40 的 MFCC 矩阵视为二维图像,通过二维卷积提取局部时频特征。
其典型结构为:
MFCC 特征矩阵
↓
二维卷积
↓
批量归一化
↓
ReLU
↓
池化
↓
全连接层
↓
SoftmaxCNN 能够识别局部时间—频率模式,因此通常比 DNN 具有更高的准确率,但其运算量和内存需求可能较大。
3.3 RNN、LSTM 和 GRU
RNN 将每一个时间帧的 MFCC 向量作为一个时间步输入,用于建模音频中的时序依赖关系。
论文讨论的循环单元包括:
- Basic LSTM;
- LSTM;
- GRU。
由于循环层在不同时间步共享参数,RNN 类模型通常比大型 CNN 使用更少的参数。论文实验中,GRU 在相同资源预算下取得了较好的准确率。
3.4 CRNN
CRNN 结合了 CNN 和 RNN:
MFCC
↓
卷积层提取局部时频特征
↓
多层双向 GRU 提取长时间依赖
↓
特征拼接
↓
全连接层
↓
输出类别论文中的 CRNN 使用多层双向 GRU。选择 GRU 的原因是其参数量少于 LSTM,并且在作者的实验中具有更好的收敛效果。
3.5 DS-CNN
论文重点提出的是 Depthwise Separable CNN,深度可分离卷积神经网络,它的表现最好。
其基本结构为:
MFCC 特征矩阵
↓
普通卷积层
↓
多个深度可分离卷积模块
↓
平均池化
↓
全连接输出层每个深度可分离卷积模块又分为两步:
Depthwise Convolution
↓
Batch Normalization + ReLU
↓
1 × 1 Pointwise Convolution
↓
Batch Normalization + ReLUDepthwise Convolution 对每个输入通道分别进行卷积,Pointwise Convolution 再使用 1 × 1 卷积融合通道信息。与普通卷积相比,这种分解方式能够大幅减少参数量和乘加运算量,使网络可以在微控制器上构建得更深、更宽。
4. 模型实验结果
论文分别为小型、中型和大型微控制器设置了三档资源限制:
| MCU 资源等级 | 内存限制 | 单次推理运算限制 |
|---|---|---|
| 小型 S | 80 KB | 6 MOps |
| 中型 M | 200 KB | 20 MOps |
| 大型 L | 500 KB | 80 MOps |
各类模型在不同资源等级下的最佳结果如下:
| 模型 | S 准确率 | M 准确率 | L 准确率 |
|---|---|---|---|
| DNN | 84.6% | 86.4% | 86.7% |
| CNN | 91.6% | 92.2% | 92.7% |
| Basic LSTM | 92.0% | 93.0% | 93.4% |
| LSTM | 92.9% | 93.9% | 94.8% |
| GRU | 93.5% | 94.2% | 94.7% |
| CRNN | 94.0% | 94.4% | 95.0% |
| DS-CNN | 94.4% | 94.9% | 95.4% |
DS-CNN 在三档资源约束下均取得最高准确率:
| DS-CNN 版本 | 内存 | 运算量 | 测试准确率 |
|---|---|---|---|
| 小型 | 38.6 KB | 5.4 MOps | 94.4% |
| 中型 | 189.2 KB | 19.8 MOps | 94.9% |
| 大型 | 497.6 KB | 56.9 MOps | 95.4% |
实验说明,DS-CNN 在准确率、模型规模和计算量之间具有较好的平衡,并且能够根据目标微控制器的资源进行缩放。
5. 最终量化方法:8 bit 定点量化
5.1 量化对象
论文最初使用 32 bit 浮点数训练模型,在部署前对以下两部分进行量化:
- 模型权重;
- 中间激活值。
两者均被转换为 8 bit 有符号定点数。名称是:
8-bit fixed-point quantization
这种量化使用有符号二进制补码表示数值,并为每一层设置一个小数位长度。
5.2 量化流程
论文采用逐层量化方式:
训练模型
↓
逐层量化权重
↓
为每层搜索最合适的小数位长度 N
↓
选择准确率损失最小的 N
↓
完成全部权重量化
↓
逐层量化激活值
↓
得到 8 bit 权重 + 8 bit 激活值模型不同层可以使用不同的小数位长度 NNN,相当于不同层拥有不同的定点缩放范围。
这种方法把模型从 32 bit 浮点表示压缩到 8 bit 定点表示,理论上可将权重存储空间降低约 4 倍。同时,整数运算在典型微控制器上通常比浮点运算更快。
5.3 量化是否需要重新训练
论文采用的是训练后量化思路,量化过程中没有重新训练模型。
代表性模型的结果如下:
| 模型 | FP32 测试准确率 | 8 bit 测试准确率 |
|---|---|---|
| DNN | 86.66% | 87.60% |
| Basic LSTM | 93.41% | 93.51% |
| GRU | 94.68% | 94.68% |
| CRNN | 95.00% | 95.03% |
量化模型的准确率与浮点模型基本一致,部分模型的量化准确率还略高。作者认为,这可能与量化产生的正则化效果有关。
6. 微控制器部署实验
论文在基于 Cortex-M7 的 STM32F746G-DISCO 开发板上进行了实际部署,并使用 CMSIS-NN 优化内核。
部署演示采用的是:
- DNN 模型;
- 8 bit 权重;
- 8 bit 激活值;
- 每秒执行 10 次推理。
单次完整推理约需 12 ms,其中包含:
- 内存数据复制;
- MFCC 特征提取;
- DNN 模型执行。
整个关键词识别应用约占用 70 KB 内存:
| 内存组成 | 大小 |
|---|---|
| 模型权重 | 约 66 KB |
| 激活值 | 约 1 KB |
| 音频输入输出与 MFCC | 约 2 KB |
| 总计 | 约 70 KB |
7. 论文提供的代码
论文明确说明代码、模型定义和预训练模型均在该仓库中提供。
代码仓库为:
ARM-software/ML-KWS-for-MCU
评论
游客无需注册即可评论。
你提交的昵称、邮箱、网址和评论内容会保存在服务端,用于展示评论身份、接收回复及必要的安全审计。
浏览器会本地保存已填游客信息和评论草稿,方便下次免填。
回复提醒会通过站内消息和邮件通知。