Нейросетевое шумоподавление: RNNoise и DeepFilterNet для чистого звука

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1Все 1564 услуг
Нейросетевое шумоподавление: RNNoise и DeepFilterNet для чистого звука
Простой
~2-3 дня
Часто задаваемые вопросы

Направления AI-разработки

Этапы разработки AI-решения

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1361
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1251
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    957
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1189
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    646
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    929

Вступление: почему шум убивает разборчивость

Представьте: вы проводите совещание в Zoom, а на фоне работает кондиционер и стучит клавиатура. Стандартный шумоподавитель обрезает и голос, создавая металлический оттенок. В результате участники жалуются на усталость, а автоматическая расшифровка (STT) выдает 30% ошибок. Мы сталкивались с этим десятки раз: от VoIP-операторов с тысячами одновременных звонков до подкастеров, которые хотят сэкономить на студии. AI-шумоподавление — нейросетевые решения, такие как RNNoise и DeepFilterNet, — решают проблему радикально: чистый звук без артефактов. Наш опыт — 5+ лет в аудиообработке, более 50 успешных интеграций для разных сценариев.

Почему спектральное вычитание создает «музыкальный шум»?

Традиционные методы, например спектральное вычитание (noisereduce), основаны на вычитании оценки шумовой составляющей из сигнала. Но при низком SNR (<10 дБ) они начинают «вырезать» речевые гармоники, оставляя тонкие частотные искажения — тот самый «музыкальный шум». В одном проекте мы сравнивали noisereduce с нейросетью: PESQ у noisereduce составил 2.8, а у RNNoise — 3.2. Разница ощутима на слух, а для STT WER снижается на 15-25%. RNNoise лучше спектрального вычитания в 1.5 раза по PESQ. По данным исследований, опубликованных в Mozilla Research, RNNoise достигает PESQ 3.2 при задержке менее 10 мс.

Как AI-модели превосходят классику: RNNoise и DeepFilterNet

DeepFilterNet использует глубокие фильтры и выдает PESQ >3.8, но требует GPU. Обе модели обучаются на парах «чистая речь + шум» и адаптируются к конкретному профилю шума при fine-tuning. RNNoise — рекуррентная сеть от Mozilla — анализирует спектр в реальном времени с задержкой менее 10 мс.

noisereduce

Библиотека на основе спектрального вычитания с адаптивным профилем — проста в использовании, не требует GPU.

import noisereduce as nr
import soundfile as sf

def denoise(input_path: str, output_path: str) -> None:
    audio, sr = sf.read(input_path)
    noise_sample = audio[:int(sr * 0.5)]
    reduced = nr.reduce_noise(y=audio, sr=sr, y_noise=noise_sample,
                              prop_decrease=0.75, stationary=False)
    sf.write(output_path, reduced, sr)

RNNoise

Легковесная рекуррентная сеть, работает в реальном времени. Интегрируется через FFmpeg. RNNoise — open-source проект, который можно встроить в FreeSWITCH или Asterisk.

import subprocess

def rnnoise_denoise(input_wav: str, output_wav: str) -> None:
    subprocess.run([
        "ffmpeg", "-i", input_wav,
        "-af", "arnndn=m=/usr/share/rnnoise/models/bd.rnnn",
        output_wav
    ], check=True)

DeepFilterNet

SOTA-модель для студийного качества. Требует GPU, но дает PESQ >3.8. Поддерживает ONNX-экспорт для инференса на Triton.

from df import enhance, init_df

model, state, _ = init_df()

def enhance(audio: np.ndarray, sr: int) -> np.ndarray:
    return enhance(model, state, audio)

Какие результаты дают модели?

DeepFilterNet превосходит noisereduce на 0.8 балла PESQ. Для реального кейса с VoIP-оператором мы замерили:

Модель PESQ Задержка GPU
noisereduce 2.8 offline нет
RNNoise 3.2 <10 мс нет
DeepFilterNet 3.8 ~20 мс T4+
Сценарий Модель Улучшение PESQ
VoIP RNNoise +0.4
Подкаст offline DeepFilterNet +0.8
STT-pipeline DeepFilterNet +0.8, WER -30%

При 1000 одновременных звонков RNNoise держит p99 latency <15 мс, DeepFilterNet на GPU T4 — <30 мс. Экономия на ручной верификации в одном проекте составила до нескольких тысяч долларов в месяц.

Как интегрировать RNNoise в WebRTC пайплайн?

RNNoise можно встроить в WebRTC на серверной стороне, например, с использованием FreeSWITCH и mod_rnnoise. Мы разворачивали такое решение для оператора: 500 одновременных звонков, задержка 5 мс, снижение WER с 28% до 14%. Экономия на ручной верификации достигла тысяч долларов ежемесячно. Сравнение с классическим AEC: RNNoise уменьшает WER в 2 раза. Для высоконагруженных систем экономия на операционных расходах может быть значительной.

Для RNNoise достаточно CPU (одно ядро на поток). DeepFilterNet требует GPU (NVIDIA T4 или выше) и CUDA 11+. Рекомендуем контейнеризацию через Docker для простоты развертывания.

Процесс работы

  1. Анализ шумового профиля — запись 10 секунд аудио, измерение SNR и спектра. Определяем тип шума: стационарный (гул) или нестационарный (трафик).
  2. Выбор модели — на основе требований к latency и качеству. Для real-time — RNNoise или DeepFilterNet (если есть GPU).
  3. Интеграция — через API, Docker-контейнер, FFmpeg-фильтр или модуль FreeSWITCH.
  4. Нагрузочное тестирование — p99 latency, PESQ, STOI при 1000 потоков.
  5. Деплой — контейнеризация, мониторинг метрик (Grafana + Prometheus).

Сроки: от 3 до 10 рабочих дней. Стоимость рассчитывается индивидуально — зависит от сложности пайплайна и количества моделей.

Что входит в результат

  • Оптимизированный инференс модели (ONNX, TensorRT) под вашу архитектуру
  • Документация по интеграции и эксплуатации
  • Нагрузочный отчет с метриками
  • Обучение команды (2 часа вебинара)
  • 3 месяца технической поддержки

Мы гарантируем улучшение PESQ минимум на 0.5 балла и снижение WER на 15-40%. Оцените ваш сценарий — свяжитесь с нами для предварительного анализа. Получите чистый звук без искажений. Закажите пилотный проект на ваших данных. Получите консультацию для вашего проекта.

Распознавание и синтез речи: ASR, TTS, клонирование голоса

Заказчик приходит с задачей: транскрибировать 40 000 часов колл-центра за неделю. Штатный облачный ASR (Google Speech-to-Text) выдаёт WER 28% на отраслевой лексике и стоит ощутимо дорого при таких объёмах. Задача — снизить WER ниже 10% и перейти на self-hosted инференс.

Типовые проблемы, с которыми приходят

WER не сходится к нужной метрике. Чаще всего виновата не архитектура, а данные: шумные аудио без нормализации уровня (-23 LUFS вместо стандарта), смешанные языки в одном канале, акцент, специфическая доменная лексика. Whisper large-v3 из коробки даёт WER 8–12% на чистом русском и проваливается до 25–35% на записях с PSTN-артефактами и узкополосным кодеком G.711.

Диаризация ломается при больше двух спикеров. pyannote/speaker-diarization-3.1 работает стабильно при 2–3 говорящих, но DER (Diarization Error Rate) растёт с 6% до 18–22% при 5+ участниках конференции. Проблема усугубляется перекрёстными репликами: по умолчанию min_duration_on=0.1 срезает короткие вставки.

Клонирование голоса — латентность или качество. XTTS v2 (Coqui) даёт натуральный голос, но при потоковой генерации stream_chunk_size=20 первый аудиочанк прилетает через 1.4–2.0 с — неприемлемо для интерактивных сценариев. StyleTTS2 и Kokoro быстрее, но требуют точной подготовки референсного аудио.

Как это решается на практике

Базовый стек для production-пайплайна:

  • ASR: openai/whisper-large-v3 или faster-whisper (CTranslate2-бэкенд, x4 скорость vs оригинал)
  • Диаризация: pyannote.audio 3.x + интеграция через whisperx для выравнивания по словам
  • TTS: XTTS v2 для качества, Edge-TTS или Silero для низкой латентности
  • Клонирование: XTTS v2 (3–6 с референсного аудио) или OpenVoice v2

Типичный пайплайн для колл-центра выглядит так: аудио из очереди Kafka → нормализация ffmpeg -af loudnorm до -23 LUFS → faster-whisper с beam_size=5, vad_filter=Truepyannote диаризация → постпроцессинг (пунктуация через deepmultilingualpunctuation) → запись в PostgreSQL с временными метками.

Кейс из практики. Финтех-компания с 12 000 звонков/день. Исходный WER на русском с банковской лексикой — 22% (Google STT). После fine-tuning whisper-medium на 200 часах размеченных записей через Hugging Face transformers + Seq2SeqTrainer с learning_rate=1e-5, warmup_steps=500 — WER упал до 7.3%. Инференс на одной A10G через faster-whisper с compute_type=float16 обрабатывает 40-минутный звонок за 55 секунд. Итоговая стоимость инференса — $0.0008/мин против $0.016/мин у облачного провайдера.

Дообучение Whisper на доменных данных

Когда общая модель не справляется, fine-tuning — первый инструмент. Минимальный датасет для заметного улучшения — 20–30 часов размеченного аудио в целевом домене. Разметку можно получить через итеративный процесс: прогнать через базовую модель → вручную исправить 10–15% ошибок → переобучить → повторить.

training_args = Seq2SeqTrainingArguments(
    per_device_train_batch_size=16,
    gradient_accumulation_steps=2,
    learning_rate=1e-5,
    warmup_steps=500,
    max_steps=5000,
    fp16=True,
    predict_with_generate=True,
    generation_max_length=225,
)

Важно: при fine-tuning Whisper нужно замораживать encoder первые 1000 шагов (model.freeze_encoder()), иначе акустические признаки разъедутся раньше, чем decoder адаптируется к новой лексике.

Синтез речи: выбор под задачу

Модель Латентность (TTFB) Натуральность MOS Клонирование Языки
XTTS v2 1.2–2.0 с 4.1–4.3 Да, 3 с референса 17
StyleTTS2 0.3–0.6 с 4.0–4.2 Да, требует адаптации en, + fine-tune
Kokoro-82M 0.08–0.15 с 3.7–3.9 Нет en, ja
Silero TTS 0.05–0.1 с 3.4–3.6 Нет ru, en, de, и др.
Edge-TTS ~0.4 с (cloud) 4.0 Нет 100+

Для интерактивных ботов с требованием TTFB < 300 мс — Silero или Kokoro. Для озвучки контента, где важна натуральность — XTTS v2 с потоковой отдачей через WebSocket.

Процесс работы

Начинаем с аудит-сессии: берём 2–4 часа ваших записей, прогоняем через несколько моделей, замеряем WER/CER, смотрим на распределение ошибок по типам (лексические, акустические, язык). Это занимает 1–2 дня и сразу показывает, нужен ли fine-tuning или достаточно пост-обработки.

Далее — выбор архитектуры под ваш throughput: один GPU для 1000 мин/день или кластер с балансировщиком для 100 000+ мин/день. Деплой через Docker-контейнер с FastAPI или Triton Inference Server для батчированного инференса.

Сроки зависят от сложности: базовая интеграция готовой модели — 1–2 недели. Fine-tuning с подготовкой данных и валидацией — 4–8 недель. Полная разработка голосового пайплайна (ASR + диаризация + TTS + мониторинг) — 2–4 месяца.