Микроконтроллер распознаёт речь без интернета
На плате STM32N6 реализовано распознавание свободной английской речи в текст без подключения к сети при потреблении около 0,2 Вт. Исходники, модель и прошивка выложены на GitHub.
Разработчик с портала «Хабр» реализовал на микроконтроллере STM32N6 модель распознавания речи, которая преобразует звук сразу в буквы, без промежуточной таблицы фонем. В предыдущей версии проекта слова собирались из фонем по заранее заданному списку, теперь плата распознаёт произвольные английские слова. Все вычисления выполняются локально, без интернета и сервера, при потреблении около 0,2 Вт во время работы.
Тесты проводились на отладочной плате STM32N6570-DK стоимостью около 200 долларов, при этом сам микроконтроллер стоит менее 14 долларов. Источник звука находился в метре от микрофона при громкости 55–60 дБ. Для демонстрации автор использовал сгенерированный голос, поскольку его собственный русский акцент был слабо представлен в обучающих данных. На пяти бытовых командах для умного дома подряд, содержащих 79 слов, модель допустила только одну ошибку.
Автор сравнил своё решение CynipsNet с открытыми моделями QuartzNet и Citrinet-256, близкими по числу параметров. Базовая версия обучалась только на LibriSpeech, после чего была дообучена на шумах, 248 часах аудио, записанного через микрофон платы, и датасетах с командами умного дома. Это снизило WER на записях с расстояния 2,5 м с 44,21% до 25,54%, хотя на исходных данных LibriSpeech ошибок стало немного больше.
После 8-битного квантования WER на test-clean вырос с 5,77% до 5,89%, а на записях с 2,5 м — с 25,54% до 26,02%. Именно квантованная версия работает на плате. Автор отмечает, что при текущих настройках NPU занят 44% времени, тогда как теоретическая загрузка составляет всего 5% — это связано со снижением задержек и увеличением контекста модели.
Среди ограничений решения: сильный акцент сильно ухудшает результат, качество распознавания падает на расстоянии больше метра из-за микрофона платы, а для диктовки длинных текстов точности пока недостаточно. В планах — улучшение основной модели, добавление обработки звука с нескольких микрофонов, подключение языковой модели для исправления ошибок и снижение задержки и энергопотребления.
Автор сравнивает STM32N6 с альтернативами: классический Cortex-A7 на 1 ГГц выдаёт около 5–16 GOPS при int8 MAC против 600 GOPS у STM32N6, а встроенный Cortex-M55 на 0,8 ГГц не справился с задачей в реальном времени. Китайские процессоры на Cortex-A и RISC-V с NPU могут быть интересны, но требуют практической оценки энергопотребления. FPGA-решения, по мнению автора, вероятно, окажутся дороже и менее энергоэффективны, чем NPU, отлитый в кремнии.
Исходный код, модель и готовый образ прошивки выложены на GitHub, инструкция по прошивке находится в том же репозитории в файле docs/flash.md. Уже сейчас решение подходит для коротких фраз и голосового ввода своими словами без передачи записей на внешний сервер. Повышение точности и устойчивости к шуму существенно расширит спектр задач, где такой подход будет оптимальным.
Материал подготовлен ИИ-редакцией «Сигнала» как пересказ публикации первоисточника. Фактическую точность и подробности проверяйте по оригиналу.