Потоковое распознавание речи на ESP32-P4: квантование и целочисленный тракт без обучения
Готовый потоковый Kroko с 65,7 млн параметров запускается на микроконтроллере без нейроускорителя. Автор укладывает модель и рабочую память в 32 МБ PSRAM, сочетая смешанное квантование весов с целочисленными ядрами RISC-V. Это подробный отчёт о переносе, где полезны не только конечные WER и скорость, но и разбор неудачных упрощений.
Метод. Для 290 матриц кодировщика выбираются два или четыре бита с учётом чувствительности. После поворота групп преобразованием Адамара последовательно корректируется ошибка входов от уже квантованных матриц, подбираются нормы групп и выполняется GPTQ. Калибровка использует 512 записей FLEURS, 87 минут, без транскрипций; градиентное обучение не требуется. Веса занимают 26,65 МБ, состояние и рабочая область около 4 МБ. Активации смешанные int8/int16, SIMD-ядра и размещение горячего кода во внутренней памяти позволяют обходиться без распаковки целой модели.
Результаты. ESP32-P4X имеет два ядра 400 МГц. Для блока 1,28 с движок с поиском по четырём гипотезам тратит в среднем 753,5 мс, RTF 0,59; живая прошивка с экраном около 0,70. WER на LibriSpeech test-clean/test-other равен 4,34%/10,26% против 3,94%/9,17% исходной модели. Полные WER посчитаны сборкой для ПК с теми же вычислениями, согласованность с платой проверена на записях. На FLEURS результат хуже: 15,95% против 13,68%; на Common Voice 19,56% против 18,47%.
Ограничения. RTF меньше единицы означает достаточную пропускную способность, но не мгновенный текст: медиана финализации слова 1,9–2,3 с, 95% слов финализируются за 4,1 с. Проверен английский и один выбранный Zipformer; новых шумовых и дальних микрофонных тестов нет. Веса грузятся с microSD, памяти остаётся около 0,5 МБ. Тихий FLEURS выявляет потерю начальных слов; нормировка амплитуды уменьшает разрыв, но причина дополнительных начальных пропусков Common Voice не установлена. Энергопотребление и батарейная автономность не измерены.
Фишка из статьи. Абляция таблицы 3 фиксирует один план разрядности и показывает, почему просто сохранить те же веса в двух/четырёх битах недостаточно. Это опыт с плавающими активациями и жадным декодированием, не итоговый поиск ширины четыре.
| Вариант округления | Размер архива, МБ | test-clean WER, % |
|---|---|---|
| Исходные веса в том же симуляторе | — | 4,02 |
| Ближайший уровень, смешанный план | 27,07 | 8,83 |
| Добавлен GPTQ, 128 записей | 27,07 | 4,75 |
| Коррекция и подбор норм | 27,07 | 4,50 |
| 512 записей, опубликованный файл | 27,07 | 4,53 |
| Полный метод, почти все матрицы 2 бита | 20,84 | 13,40 |
Как это читать: основной выигрыш даёт управление ошибкой квантования, а дальнейшее сжатие резко меняет качество. Улучшение ошибки признаков при 512 примерах не превращается в заметное снижение WER: 4,50 и 4,53% различаются лишь 16 словами. Встроенная реализация требует проверки и промежуточных численных ошибок, и прикладной метрики: одна из потерь точности int8 вообще не была видна в коротком прогоне WER.
Источник. Оригинальное название: Streaming Speech Recognition on a Microcontroller: a 65.7M-Parameter Transducer in 2 and 4 Bits on the ESP32-P4. arXiv:2610.38739; полный текст PDF.