跳到主要内容
返回时间线
arXiv来源发表:

5美元芯片跑开放词表语音识别:13M参数模型留在闪存,同芯片上错误数比厂商方案少1.8–2.8个

核心概要

Oído把开放词表英语语音识别整体放到一块5美元的ESP32-S3上运行,该芯片没有神经加速器。此前这类微控制器只能做关键词唤醒或固定命令表,而13M参数的Conformer-CTC模型在int8下占14.0 MB,既装不进512 KB片上SRAM,也只能部分放进PSRAM。引擎按闪存与PSRAM带宽安排执行顺序,在LibriSpeech test-clean/test-other上得到3.70%/8.23%的词错误率,与全精度相差0.12个百分点以内,在同一芯片上错误数比厂商识别器少1.8–2.8个;实测单核运行时间为音频时长的1.97倍,尚不是实时。

AI-generated editorial illustration: O\'ido: Open-Vocabulary Speech Recognition on a $5 Microcontroller without a Neural Accelerator

深度剖析

开放词表英语识别现在可以完全在一块5美元微控制器上完成,不需要把音频送到云端,也不需要神经加速器。 此前这类芯片上的语音识别实际只覆盖关键词唤醒或预先定义好的命令表,连该芯片厂商最完整的方案也只接受固定命令列表。 在LibriSpeech test-clean/test-other上,片上int8算术达到3.70%/8.23%词错误率,与全精度参考的3.68%/8.11%相差0.02和0.12个百分点;test-clean上每种片上配置比同一芯片上的厂商MultiNet7少1.8–2.8个错误。

模型能装下并跑起来,靠的是把权重留在闪存、按带宽安排读取顺序,而不是把整模型搬进内存。 13M参数模型在int8下占14.0 MB,装不进512 KB片上SRAM,PSRAM也只能容纳一部分,因为还要放工作缓冲区。 引擎把模型放在映射进地址空间的闪存分区,把读取最频繁的矩阵复制到PSRAM,激活留在SRAM;按每层64帧分块,使每个权重字节每块只取一次,建模的权重流量从约18 MB/s降到7.5 MB/s。

量化几乎不损失精度,且不需要重新训练。 此前Conformer的整数化多依赖量化感知训练,并面向加速器或手机CPU。 权重用逐输出通道对称int8,激活在每次矩阵乘前按帧动态定标,累加在int32中精确进行;int4则需8000步量化感知微调,贪心解码为4.61%/9.98%。

流式变体在说话人停止后更快给出文本,代价是精度。 整句模式必须等说话人说完再跑完整编码器,文本在停顿后才出现。 按语音速率喂入时,3.6–10.6秒片段在最后采样后4.1–11.1秒给出最终文本,同一批片段整句模式为7.2–22.4秒;带语言模型时流式在LibriSpeech上为4.86%/11.03%,整句模式为3.33%/7.15%。

启示与展望

目前的结果针对一块ESP32-S3-WROOM-1-N16R8模块和一块开发板,单核运行,速度约为音频时长的两倍,因此适合可以接受数秒延迟的短命令,而不是实时转写或对话。流式变体把停顿后的等待大致减半,代价是精度下降。语言覆盖英语和西班牙语。

双核调度在仿真器中正确,但在240 MHz的真实芯片上给出错误转写并偶尔崩溃,原因尚未确定,因此所有测量都只用单核。流式分块处理相对整句模式在test-clean上损失约1.5个百分点,最终文本仍大致随话语长度增长而延迟。板级速度数据来自27个片段(CTC int8)和其余模型各10–12个片段,最长10.6秒;20秒话语的2.4 MB PSRAM峰值来自仿真器。