AI 摘要
AI
正在生成摘要...

该论文研究如何在内存和计算资源有限的微控制器上运行关键词识别(Keyword Spotting,KWS)模型。论文统一训练并比较了 DNN、CNN、LSTM、GRU、CRNN 和 DS-CNN 等网络,评价指标包括分类准确率、内存占用和单次推理运算量。同时,作者提出深度可分离卷积网络 DS-CNN 的表现最好,并公开了代码、模型定义和预训练模型。


1. 论文中的 TinyML 实现流程

论文中的关键词识别系统由三个主要部分组成:

TEXT
连续音频信号

音频分帧与声学特征提取

神经网络分类器

类别概率后处理

关键词识别结果

首先,将一定长度的音频信号切分为相互重叠的短时帧;然后,从每一帧中提取声学特征,形成二维的“时间帧 × 特征维度”矩阵;该矩阵输入神经网络分类器,输出各个关键词类别的概率。在连续音频场景中,系统还会对一段时间内的输出概率进行平均,以提高预测稳定性。

完整实验流程可以表示为:

TEXT
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 特征矩阵:

TEXT
49 × 40 MFCC

展平的特征矩阵

多个全连接层

ReLU

Softmax 分类

DNN 的计算次数相对较少,但不能显式利用 MFCC 中局部的时间和频率相关性,而且全连接层通常具有较多参数。

3.2 CNN

CNN 将 49 × 40 的 MFCC 矩阵视为二维图像,通过二维卷积提取局部时频特征。

其典型结构为:

TEXT
MFCC 特征矩阵

二维卷积

批量归一化

ReLU

池化

全连接层

Softmax

CNN 能够识别局部时间—频率模式,因此通常比 DNN 具有更高的准确率,但其运算量和内存需求可能较大。

3.3 RNN、LSTM 和 GRU

RNN 将每一个时间帧的 MFCC 向量作为一个时间步输入,用于建模音频中的时序依赖关系。

论文讨论的循环单元包括:

  • Basic LSTM;
  • LSTM;
  • GRU。

由于循环层在不同时间步共享参数,RNN 类模型通常比大型 CNN 使用更少的参数。论文实验中,GRU 在相同资源预算下取得了较好的准确率。

3.4 CRNN

CRNN 结合了 CNN 和 RNN:

TEXT
MFCC

卷积层提取局部时频特征

多层双向 GRU 提取长时间依赖

特征拼接

全连接层

输出类别

论文中的 CRNN 使用多层双向 GRU。选择 GRU 的原因是其参数量少于 LSTM,并且在作者的实验中具有更好的收敛效果。

3.5 DS-CNN

论文重点提出的是 Depthwise Separable CNN,深度可分离卷积神经网络,它的表现最好。

其基本结构为:

TEXT
MFCC 特征矩阵

普通卷积层

多个深度可分离卷积模块

平均池化

全连接输出层

每个深度可分离卷积模块又分为两步:

TEXT
Depthwise Convolution

Batch Normalization + ReLU

1 × 1 Pointwise Convolution

Batch Normalization + ReLU

Depthwise 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 量化流程

论文采用逐层量化方式:

TEXT
训练模型

逐层量化权重

为每层搜索最合适的小数位长度 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. 论文提供的代码

论文明确说明代码、模型定义和预训练模型均在该仓库中提供。

代码仓库为:

TEXT
ARM-software/ML-KWS-for-MCU

评论