Локальная альтернатива RNNoise: модели и тонкая настройка | AiManual
AiManual Logo Ai / Manual.
08 Янв 2026 Гайд

Забей на RNNoise: локальные нейросети для подавления шума, которые не тормозят

Обзор эффективных моделей для локального подавления шума в аудио. Практическое руководство по обучению и настройке. Сравнение производительности.

RNNoise умер? Нет, но он раздражает

Помните 2017 год? RNNoise тогда казался революцией - реальное шумоподавление на CPU. Сегодня он выглядит как старый Nokia в мире iPhone. Задержки в 50-100 мс, странные артефакты на фоновой музыке, полное игнорирование современных нейросетевых архитектур.

Проблема не в том, что RNNoise плох. Он просто устарел. Когда каждая миллисекунда на счету в реальных ASR-системах (вспомните наш разговор про локальную транскрибацию), эти задержки становятся критичными.

Что нам нужно от современного деноизера?

  • Задержка < 10 мс для реального времени
  • Работа на CPU без GPU
  • Сохранять музыку, а не превращать её в кашу
  • Открытые веса и возможность дообучения
  • Меньше 100 МБ на диске

Вот главное: большинство статей про шумоподавление сосредоточены на качестве звука. На практике важнее задержка и стабильность. ASR-система с идеальным звуком, но задержкой в 200 мс - бесполезна.

Три модели, которые реально работают

Модель Задержка Размер Качество музыки Сложность обучения
Demucs (урезанная) 15-25 мс 40 МБ Отличное Средняя
FullSubNet 8-12 мс 25 МБ Хорошее Высокая
Conv-TasNet 5-8 мс 15 МБ Среднее Низкая

Demucs: когда качество важнее скорости

Исходный Demucs создан для source separation (разделения инструментов). Но если отрезать от него всё лишнее, получается мощный деноизер. Главное преимущество - он не портит музыкальные фрагменты. Именно то, что нужно для подкастов с фоновой музыкой.

💡
Demucs работает в частотной области. Это ключевое отличие от RNNoise. Вместо попытки предсказать спектральную маску, он учится восстанавливать чистый спектр напрямую. Результат - меньше артефактов, особенно на переходных процессах.

FullSubNet: золотая середина

Архитектура специально создана для реального времени. Использует и полнодиапазонные, и субдиапазонные признаки одновременно. На практике это значит: он одинаково хорошо удаляет и постоянный гул (кондиционер), и импульсные шумы (клавиатура).

Conv-TasNet: скорость превыше всего

Если ваша задача - ASR с минимальной задержкой, это ваш выбор. Conv-TasNet работает полностью во временной области, без преобразований в частотную. Задержка минимальна, но есть нюанс: на сложных музыкальных фрагментах появляются артефакты.

Как собрать свой датасет (без боли)

Все говорят "нужен хороший датасет". Никто не говорит, как его собрать за неделю, а не за месяц. Вот мой рецепт:

1 Где взять чистый звук

  • LibriSpeech - 1000 часов чистых записей голоса
  • Ваши собственные записи в студийных условиях
  • Common Voice от Mozilla - фильтруйте по качеству
  • Аудиокниги - профессиональная запись, но нужно вырезать музыку

2 Как добавить реалистичный шум

Не используйте белый шум. Это бесполезно для реальных задач. Вместо этого:

  1. Запишите 10-20 минут фонового звука в разных условиях (офис, кафе, улица, дом)
  2. Смешивайте чистый звук с шумом в соотношениях от 0 dB до 20 dB SNR
  3. Добавляйте эхо (реверберацию) - это критично для реальных помещений
  4. Не забывайте про щелчки, скрипы и другие импульсные шумы

Самый частый провал: обучение на синтетических шумах, тестирование на реальных. Если ваша модель будет работать в офисах - записывайте шум в офисах, а не в студии.

3 Аугментация, которая работает

Стандартная аугментация (pitch shift, time stretch) здесь не подходит. Вместо этого:

  • Изменяйте громкость шума динамически (как в реальной жизни)
  • Добавляйте несколько источников шума одновременно
  • Имитируйте движение микрофона (Doppler effect для проезжающих машин)
  • Используйте комнатные импульсные отклики разных помещений

Тонкая настройка: где собака зарыта

Вы скачали предобученную модель. Она работает, но не идеально. Что дальше? Fine-tuning, но не тот, о котором все пишут.

Unsloth для аудио: стоит ли?

Unsloth великолепен для LLM, но для аудиомоделей? Не совсем. Проблема в том, что большинство аудиоархитектур используют специфичные операции, которые Unsloth не оптимизирует. Вы сэкономите 20% памяти, но потеряете совместимость.

💡
Вместо Unsloth используйте gradient checkpointing и mixed precision training. Для Conv-TasNet это даёт экономию памяти в 3-4 раза без сторонних библиотек.

Loss-функции: MSE не работает

Все учат с MSE loss. Все получают размытый звук. Потому что MSE усредняет ошибки. Для аудио нужны специальные loss-функции:

  • Multi-resolution STFT loss - сравнивает спектрограммы на разных разрешениях
  • SI-SNR (Scale-Invariant SNR) - игнорирует общую громкость
  • Mel-spectrogram loss - фокусируется на воспринимаемом качестве
  • Комбинация всех трёх с разными весами для разных частот

Как НЕ надо делать fine-tuning

  1. Не обновляйте все слои модели. Заморозьте encoder, обучайте только decoder
  2. Не используйте большой learning rate. Начните с 1e-5, а не с 1e-3
  3. Не обучайте на коротких сегментах (менее 2 секунд). Модель не выучит долгосрочные зависимости
  4. Не забывайте про overfitting. Если качество на валидации падает после 3-й эпохи - остановитесь

Интеграция с ASR: Whisper и не только

Шумоподавление без ASR - как машина без колес. Но интеграция - это отдельная история.

Whisper ненавидит артефакты

Whisper обучен на "сыром" звуке. Если ваш деноизер создаёт даже минимальные артефакты, точность Whisper падает на 20-30%. Решение? Обучайте деноизер совместно с Whisper или используйте loss от Whisper's encoder.

Пайплайн vs End-to-End

Два подхода:

  1. Отдельный деноизер → Whisper (проще, но больше задержка)
  2. Joint training деноизера и Whisper (сложнее, но задержка меньше)

Для реального времени я рекомендую первый вариант с буферизацией. Да, будет дополнительная задержка в 50-100 мс, но система стабильнее. Как мы обсуждали в статье про поиск для AI-агентов, иногда стабильность важнее минимальной задержки.

Wav2Vec2 более терпим

Если сравнивать с Whisper vs Wav2Vec2, то Wav2Vec2 менее чувствителен к артефактам шумоподавления. Но его точность на чистых данных ниже. Выбор зависит от задачи.

Развёртывание: от прототипа к продакшену

Обучение модели - полдела. Развернуть её так, чтобы она не падала под нагрузкой - это отдельный квест.

ONNX или PyTorch?

ONNX даёт прирост скорости в 1.5-2 раза. Но:

  • Не все операции поддерживаются
  • Отладка сложнее
  • Динамические размеры работают хуже

Мой совет: сначала на PyTorch, потом конвертируйте в ONNX только если производительность критична.

Буферизация и латенси

Самая частая ошибка - обработка каждого фрейма отдельно. На практике:

  1. Накопите 200-500 мс аудио
  2. Обработайте весь буфер
  3. Используйте overlap-add для плавных переходов
  4. Отправляйте в ASR порциями по 1-2 секунды

Не пытайтесь достичь нулевой задержки. Это невозможно физически. Вместо этого минимизируйте джиттер (вариативность задержки). Стабильные 50 мс лучше, чем 10 мс в одном случае и 100 мс в другом.

Мониторинг качества

Как понять, что модель деградирует в продакшене? Не по loss, точно.

  • Считайте PESQ/MOS онлайн (есть lightweight реализации)
  • Отслеживайте confidence score от ASR
  • Собирайте feedback от пользователей (кнопка "было неразборчиво")
  • Периодически запускайте эталонные тесты

Что делать, если всё равно плохо

Вы перепробовали все модели, настроили всё возможное, а качество всё равно не устраивает. Что дальше?

Может, проблема не в деноизере?

Часто проблема в upstream:

  • Плохой микрофон (нет, встроенный в ноутбук не считается хорошим)
  • Некорректная sample rate (16 кГц vs 48 кГц)
  • Клиппинг (перегрузка) на входе
  • Фоновый шум на 90 dB (тут уже ничего не поможет)

Гибридный подход

Иногда одна модель не справляется. Комбинируйте:

  1. Классический noise gate для тишины между фразами
  2. Conv-TasNet для быстрого подавления
  3. Demucs для финального полиша

Да, задержка увеличится. Но качество будет заметно лучше.

Когда сдаться и использовать облако

Если нужна качественная обработка музыки или студийный уровень - локальные модели не справятся. Сервисы вроде Adobe Enhanced Speech или облачные API дадут лучшее качество. Но вы платите деньгами и задержкой.

💡
Финальный совет: начните с Conv-TasNet. Он простой, быстрый, и покажет, решает ли шумоподавление вашу проблему. Если нет - переходите к более сложным моделям. Не пытайтесь сразу построить идеальную систему.

Локальное шумоподавление - не магия, а инженерия. Сложная, капризная, но достижимая. Главное - не гнаться за теоретическими метриками, а решать конкретные проблемы ваших пользователей. Иногда удаление фонового шума кофеварки важнее, чем идеальное сохранение музыки Бетховена.