Нейросеть 200 КБ для голосовой активации: кейс Яндекса | AiManual
AiManual Logo Ai / Manual.
09 Июн 2026 Гайд

Как уместить нейросеть для голосовой активации в 200 КБ: кейс Яндекса для наушников

Разбор того, как Яндекс запихнул споттер Алисы в 208 КБ SRAM наушников Дропс. Квантование, прунинг, NPU — полный гайд по edge AI оптимизации.

Реклама
hor_partv1
• 15 мин чтения

Вы когда-нибудь пробовали запустить нейросеть на микроконтроллере с памятью меньше, чем весит логотип PyTorch? Я — да. И это больно. Особенно когда заказчик говорит: «Хочу, чтобы наушники слышали „Алиса“ без облака». А у тебя в распоряжении — 208 килобайт SRAM, NPU с тактовой 500 МГц и никакого DRAM. Знакомо?

В 2025 году Яндекс выпустил наушники Яндекс Дропс с голосовой активацией Алисы прямо на борту. Никакой отправки аудио в облако — споттер живёт внутри гарнитуры. И да, он весит меньше 200 КБ. Как? Отвечаю.

Проблема: почему телефонные споттеры не взлетают в наушниках

Классический вейк-ворд детектор (например, Snowboy, Porcupine) требует от 200 КБ до 2 МБ на модель и ещё сотни килобайт на рантайм. На смартфоне — пофиг, там сотни мегабайт RAM. В наушниках — SRAM, 208 КБ на всё. NPU (нейропроцессор) — маленький, без кэша L2, с ограниченным набором инструкций.

💡 Ключевое ограничение: модель должна не только поместиться в 200 КБ, но и работать в реальном времени (задержка < 100 мс) без подтормаживаний музыки.

Решение Яндекса: как запихнуть слона в SRAM

Инженеры Яндекса пошли не по пути «возьмём большую модель и сожмём», а спроектировали архитектуру с нуля под ограниченный NPU. Основные приёмы:

  • Квантование в INT8 — без lossy tricks, но с калибровкой на целевом железе. Веса — 8 бит, активации — 8 бит. Размер упал в 4 раза.
  • Прунинг связей — удалили 60% нейронов в полносвязных слоях, которые давали < 0.01% вклада в финальный лосс.
  • Суб-словесная MFCC — вместо полного спектра брали только 13 мел-кепстральных коэффициентов, и те — с шагом 10 мс.
  • Weight sharing — часть свёрток зашарена между разными таймстемпами.

В результате модель заняла 192 КБ — осталось 16 КБ на буфер аудио, стек и прочее. Жмутся, как сельди в бочке, но работает.

1 Анатомия пайплайна: от звука до команды

Весь пайплайн уложили в 4 этапа:

  1. VAD (Voice Activity Detection) — простейший энергетический детектор на 120 байт. Если уровень сигнала ниже порога — на NPU даже не включается.
  2. Feature extraction — MFCC на 13 фильтров, вычисляется на самом DSP (маленьком DSP-ядре, которое есть в чипе).
  3. Inference споттера — 4 свёрточных слоя + 2 полносвязных. Всё в INT8. NPU работает с частотой 500 МГц, один инференс — 4.2 мс.
  4. Post-processing — фильтр скользящего окна, чтобы избежать ложных срабатываний от одиночных щелчков.

Кстати, про VAD — у нас есть отдельный туториал по серверному VAD, но для наушников он, конечно, не подходит.

2 Как не нужно делать: мои грабли

Попробовал я как-то натравить OpenAI Whisper tiny на микроконтроллер. Наивный. Модель весит 150 МБ в FP32. Даже квантованная до INT8 — 40 МБ. Не лезет. А если обрезать до 1 секунды аудио — точность падает ниже плинтуса. Вывод: не берите трансформеры для on-device споттера. Только свёртки и GRU (и то с осторожностью).

⚠️ Типичная ошибка: квантовать модель без калибровки на том же микрофоне, что стоит в наушниках. Импеданс, шум, частотная характеристика — всё другое. Калибруйте на целевой АЦП.

Практика: как самому сделать споттер < 200 КБ

Предположим, вы хотите сделать свой вейк-ворд (не «Алиса», а, скажем, «Боб»). Что нужно делать?

  1. Соберите датасет — 5000+ произнесений слова и 5000+ фонового шума. Можно нагенерировать синтетически через TTS. Вот подборка лучших нейросетей для озвучки — пригодятся.
  2. Выберите архитектуру — 4-6 свёрточных слоёв (kernel 3-5) с depthwise separable convolution. Это даёт минимум параметров.
  3. Обучите в FP32 — с TripletLoss или Softmax. Цель: F1 > 0.95 на тесте.
  4. Прунинг — возьмите библиотеку torch.nn.utils.prune и удалите 70% самых маленьких весов. Дообучите.
  5. Квантование в INT8 — через torch.quantization с калибровкой на 1000 сэмплов с микрофона наушников.
  6. Экспорт в TFLite/CMSIS-NN — для ARM Cortex-M или NPU. Проверьте, что инференс укладывается в 10 мс.

Есть ещё один крутой пример — NeuTTS Nano, который синтезирует речь в 100 КБ. Там похожие техники: квантование, суб-полосное кодирование.

Роль NPU и почему не вывезет обычный MCU

Даже с моделью в 200 КБ, если считать на Cortex-M4 без аппаратного ускорения, инференс займёт 200-300 мс. Это не годится — пользователь не будет ждать полсекунды на каждое «Алиса». Поэтому Яндекс использует NPU (нейропроцессор), который делает матричные умножения за такт. В их случае — это кастомный блок в чипе, совместимый с инструкциями VNNI. Важно: NPU потребляет дополнительную энергию, но в сумме с DSP всё равно выходит меньше, чем держать Wi-Fi включённым для облачного распознавания.

Если ваш MCU без NPU — рассматривайте CMSIS-NN для Cortex-M7 или используйте Xtensa DSP (как в ESP32). Но модель придётся ужимать до 50-100 КБ.

5 подводных камней при портировании на наушники

  • Реверберация — модель обучалась на чистых записях, а в ухе всё бубнит. Добавляйте в датасет комнатные impulse response.
  • Потребление — 200 мкА в idle, 5 мА при инференсе. Если часто срабатывает ложно — батарейка сядет за час. Настройте пороги жёстко.
  • Update OTA — наушники не подключены к интернету постоянно. Обновлять модель придётся через телефон. Продумайте механизм.
  • Алиса уже занята — микрофон в наушниках дублируется для звонков. Нужен арбитраж: музыка приглушается, споттер получает приоритет.
  • Ложные срабатывания от музыки — если в песне поют «Alisa» — модель может проснуться. Решение: голосовой сепаратор перед споттером (но это +50 КБ).

Что дальше? Споттер на 50 КБ?

В 2026 году уже появились работы по Ternary Weight Networks (веса -1,0,1) и бинарным споттерам. Модель умещается в 50 КБ. Но точность пока проседает на 2-3%. Я думаю, через год мы увидим споттеры «Hello» в слуховых аппаратах. А пока — учитесь у Яндекса: каждая сотня байт на счету, каждый такт NPU решает.

Кстати, о слухе: вот как AI-ассистент слуха выделяет голос в толпе — там тоже маленькие модели, интересно сравнить.

Часто задаваемые вопросы

Почему не используют TFLite Micro?

TFLite Micro хорош, но он требует ~100 КБ под рантайм. Для 200 КБ бюджета это слишком. Яндекс написал свой инференс на Си — 12 КБ.

Какую частоту дискретизации выбрали?

16 кГц, 16 бит — стандарт для голосовых команд. После VAD берут кадры по 30 мс.

Споттер на русский язык или универсальный?

«Алиса» — русская команда, но фонетически она покрывает много языков. Модель дообучали на акцентах.

Где взять SDK?

Яндекс не публиковал SDK для Дропс, но можно попробовать их технологию через Yandex IoT Kit. Подробнее на сайте.

* Для серьёзного погружения в embedded ML рекомендую книгу «AI at the Edge» от Manning — там много про квантование и CMSIS-NN. Ссылка.

Подписаться на канал