Привет, Хабр! Меня зовут Захар Кондауров. Сегодня я хочу поделиться опытом разработки легковесной real-time модели шумоподавления и дереверберации, над которой я работал в рамках проектов Инженерно-математической школы НИУ ВШЭ и VK под руководством Ивана Бескровного, руководителя команды звуковых технологий VK Видео.

Большинство исследований в speech enhancement часто ограничиваются только шумоподавлением, хотя современные архитектуры потенциально позволяют решать более продвинутые задачи, например, совместное шумоподавление и дереверберацию. Это обусловлено тем, что бенчмарков, ориентированных на шумоподавление, значительно больше, чем на другие искажения аудиосигнала, как и моделей для сравнения. Кроме того, далеко не все решения обучены на full-band аудио с частотой дискретизации 48 кГц, в основном только на 16 кГц — это сильно уменьшает диапазон частот в аудиосигнале.

Модель, которая одновременно подавляет шум и выполняет дереверберацию для full-band аудио, позволит устройствам с ограниченным количеством ресурсов обрабатывать речевой сигнал локально, уменьшая нагрузку на серверы и задержку ответа системы. Зачастую задачи шумоподавления и дереверберации решают последовательно разными нейронными сетями. Универсальная модель уменьшит количество используемой памяти и время обработки сигнала.

Постановка задачи

Шум в аудио — это нежелательные звуковые колебания, которые складываются с полезным сигналом. Реверберация же представляет собой акустический эффект, возникающий при многократном отражении звука от поверхностей помещения, c продолжительным затуханием. Иными словами, это непрерывное эхо.

Зная, что такое шум и реверберация, мы можем определить моделирование шумного сигнала. Это свёртка чистого сигнала с Room Impulse Response (RIR) и добавленный шум:

x = s ∗ r + n

где:

  • s — чистый сигнал;

  • r — импульсная характеристика помещения;

  • n — шум;

  • x — смесь чистого сигнала, RIR и шума.

На рисунках 1 и 2 изображена чистая спектрограмма и спектрограмма с шумом и реверберацией соответственно.

Теперь опишем требования и ограничения:

  • Обработка аудиосигнала с частотой дискретизации, равной 48 кГц.

  • Подавление шума и реверберации со сравнимым с легковесными моделями качеством речевого сигнала.

  • Количество параметров не больше 1 млн.

  • Продолжительность обработки аудиосигнала меньше продолжительности самого аудиосигнала.

Обзор метрик

Модель обрабатывает full-band аудио, поэтому не все метрики могут подойти, так как некоторые из них предназначены только для 16 кГц. Например, одна из самых часто используемых метрик качества речевого сигнала PESQ определена в диапазоне 16 кГц, поэтому мы не использовали её для мониторинга качества выходного аудио.

Вместо этого мы взяли NISQA. Эта метрика тоже связана с человеческим восприятием звука, но в диапазоне 48 кГц. Кроме того, метрика считает не только общее качество речевого сигнала, но и качество шумоподавления, искажения тембра и др.

Для проверки качества разборчивости речевого сигнала использовали метрику STOI, а для качества дереверберации — SRMR.

Производительность измеряли при помощи подсчёта MACs на минимально допустимой размерности данных и RTF на 1 секунде.

Существующие решения

Большинство нейросетевых моделей имеют достаточно похожую архитектуру: CNN для извлечения признаков из спектрограммы, bottleneck для обработки признаков в латентном пространстве, CNN для реконструкции спектрограммы. Зачастую эксперименты над архитектурой сводятся к изменениям в bottleneck, так как она отвечает за запоминание моделью высокоуровневых признаков.

Самые лучшие по метрикам модели MP‑SENet, SEMamba, xLSTM‑SENet имеют такую структуру с Transformer, Mamba block, xLSTM block в качестве bottleneck соответственно. Эти модели хорошо подавляют шум, однако требуют много вычислений.

Легковесные модели, например, относительно недавние FSPEN, LiSenNet, GTCRN и др., все обучены только на задачу шумоподавления, а также работают только с аудио 16 кГц.

Тщательно изучив доступные модели, мы выяснили, что ни одна не удовлетворяет нашим требованиям. Из моделей, обученных на full‑band данных, можно выделить только DeepFilterNet. Поэтому решили взять за основу одну легковесную архитектуру и на её основе разработать легковесную модель, которая бы в реальном времени решала задачу совместного шумоподавления и дереверберации для полнодиапазонного аудио.

Разработка метода

В качестве бейзлайна выбрали FSPEN. Эта модель достигает значения PESQ 2,97 на VBD, один из лучших результатов среди легковесных архитектур. FSPEN содержит 79 тысяч параметров и 89 млн MACs. Для сравнения, DFN, как заявляют авторы, запускается на Raspberry Pi 4 с RTF 0,42, при 350 млн MACs. У FSPEN 89 млн, следовательно, модель подходит для работы в реальном времени на слабых устройствах.

Основная идея FSPEN — максимально уменьшить сложность и размер с сохранением обобщающей способности. Схема модели похожа на описанную выше, однако обрабатывает не только спектрограмму целиком, но и дополнительно разбивает на группы частоты, из которых независимо извлекаются признаки для общего bottleneck. Сам же bottleneck — это две последовательные RNN: по временной оси (GRU) и по частотной. Причём по временной оси признаки разбиты на группы, каждую из которых обрабатывает своя GRU. Всего в bottleneck три таких блока.

Мы провели множество экспериментов, разберём некоторые из них.

При переходе с 16 кГц на 48 кГц частотный диапазон вырастает втрое. Если оставить N_FFT = 512, то спектрограмма станет слишком грубой по частоте — модель просто не увидит подробности, которые важны для полнодиапазонной речи. Поэтому первый шаг — адаптация частотного разрешения STFT.

Почему нельзя просто поднять sample rate

N_FFT увеличили в два раза, а не в четыре, это осознанный компромисс. Реверберация — искажение во времени («хвосты» на спектрограмме), и для её подавления важнее сохранить временное разрешение, чем максимально нарастить частотное. У такого изменения есть побочный эффект: меняется минимальный размер входа. При 48 кГц и N_FFT = 1024 модель принимает чанки от 21,3 мс.

Дальше — sub‑band encoder. Размер спектра вырос, старое разделение на пять групп перестало покрывать диапазон. Количество групп подняли до восьми, пересчитали ширины полос.

После этих изменений выросли только размерности на входе/выходе Feature Merge и Feature Split. Bottleneck (DPE‑блоки) остался прежним — это позволяет не раздувать самую «дорогую» часть сети.

Первая модификация в линейке: FSPEN + 48 кГц.

Разделение на группы: зачем нужны пересечения

Рис. 3: разбиение частот на группы. На последующих иллюстрациях подобное разбиение частот обозначено как «Splitting into groups».
Рис. 3: разбиение частот на группы. На последующих иллюстрациях подобное разбиение частот обозначено как «Splitting into groups».

В оригинальном FSPEN каждая частотная группа в sub‑band encoder обрабатывается независимо: своя свёртка, свой ReLU, потом конкатенация. На бумаге это экономит параметры. На практике возникают две проблемы:

  • Частоты связаны физически. Структура речи не обрывается на границе частотного бина STFT.

  • Артефакты на стыках. Независимые группы часто дают «ступеньки» в маске — слышимые искажения и провалы на границах полос.

Для решения этих проблем мы разделили на группы с наложением: соседние группы перекрываются по частоте. Модель видит один и тот же диапазон бинов в двух ветках и учится согласовывать маски на стыках.

Вторая модификация: FSPEN + 48 кГц + Overlap — адаптация STFT и пересекающиеся sub‑band группы. В экспериментах она показала лучший баланс качества и сложности.

Рис. 4: схема FSPEN с адаптацией частотного разрешения и пересечением частотных групп. Далее будет именоваться как FSPEN + 48 кГц. Красным обведены нововведения.
Рис. 4: схема FSPEN с адаптацией частотного разрешения и пересечением частотных групп. Далее будет именоваться как FSPEN + 48 кГц. Красным обведены нововведения.

Рецептивное поле: когда одной свёртки на группу мало

Рис. 5: новые блоки для sub‑band энкодера и декодера. Если Sub‑band DeConv является последним блоком, то последний модуль в нём заменили на сигмоиду.
Рис. 5: новые блоки для sub‑band энкодера и декодера. Если Sub‑band DeConv является последним блоком, то последний модуль в нём заменили на сигмоиду.

Слабое место FSPEN — малое рецептивное поле в sub‑band CNN. Модель видит только локальные закономерности и может проигрывать более глубоким архитектурам на сложных искажениях.

Отсюда возникла третья группа изменений — Sub‑Band Layers Extension (SBLE). В Sub‑band encoder/decoder вместо одной свёртки на группу — три последовательных conv‑блока (Conv1d → ELU →... → Sigmoid на выходе декодера).

Также в Full‑band encoder вместо вещественной и мнимой части спектрограммы подаём магнитуду и фазу (|X|, angle(X)). Для маскирования это ближе к физике сигнала: энергия и фаза разделены явно.

ReLU заменили на ELU в промежуточных sub‑band слоях. После нескольких свёрток признаки могут быть отрицательными, а ReLU «убивает» градиент.

ELU сохраняет обучаемость, а ограничение на неотрицательность оставляем только на последнем слое.

Также вместо Linear в sub‑band decoder теперь стоит Conv1d: линейный слой смотрит на все каналы сразу, свёртка — на соседние частотные бины. Для локальных спектральных паттернов это естественнее.

Третья модификация: FSPEN + 48 кГц + SBLE.

Рис. 6: Схема FSPEN с подачей на вход full‑band энкодеру магнитуды и фазы, а также увеличенным количеством слоёв в sub‑band энкодере. Далее будет именоваться как FSPEN + 48 кГц + sub‑band layers extension. Красным обведены нововведения.
Рис. 6: Схема FSPEN с подачей на вход full‑band энкодеру магнитуды и фазы, а также увеличенным количеством слоёв в sub‑band энкодере. Далее будет именоваться как FSPEN + 48 кГц + sub‑band layers extension. Красным обведены нововведения.

SBDC: conv‑декодер без углубления энкодера

Отдельно проверили конфигурацию без трёхслойного sub‑band encoder, но с:

  • наложением групп;

  • mag/phase на входе full‑band encoder;

  • свёрточным sub‑band decoder (SBDC) вместо Linear. Четвёртая модификация: FSPEN + 48 кГц + SBDC + Overlap.

Рис. 7: схема FSPEN + 48 кГц + sub‑band decoder conv + overlap. Красным обведены нововведения.
Рис. 7: схема FSPEN + 48 кГц + sub‑band decoder conv + overlap. Красным обведены нововведения.

Обучающие данные

Прежде чем анализировать результаты экспериментов, я расскажу про данные, на которых обучали модели.

Мы выбрали версию корпуса VoiceBank+DEMAND с 56 спикерами (28 мужчин, 28 женщин), она содержит 23 075 файлов реальной речи на английском языке. Это стандартный корпус для исследований speech enhancement. Для валидационной выборки взяли первые 5000 файлов из версии с 28 спикерами. Тестовая выборка состоит из 824 файлов двух спикеров.

Затем добавили шумы из TAU Urban Acoustic Scenes 2019. Каждый шум разделили на три выборки таким образом (train, validation, test): 1318, 309, 180. Всего 49 видов шума, каждая выборка содержит все виды. Signal‑to‑Noise Ratio для смешивания шума с сигналом выбирали случайно из списка [0, 5, 10, 15] (значения равновероятны).

Файлы с RIR сгенерировали при помощи Python-библиотеки pyroomacoustics. RIR-файлы разделили на четыре группы с разными параметрами. Общие параметры каждой группы: высота комнаты uniform(2.5, 3.0) метров, отношение сторон комнаты [1: 3, 2: 3, 1: 1] (вероятность выбора 0,5, 0,25 и 0,25 соответственно).

Каждую группу разделили на обучающую, проверочную и тестовую в соотношении 0,7, 0,15 и 0,15. Уникальные параметры групп следующие:

  • Первая группа представляет из себя комнату малого размера (прямоугольный параллелепипед) площадью uniform(15, 30) м2, rt60 = uniform(0.4, 0.5), 200 файлов.

  • Вторая группа — комната среднего размера: площадь = uniform(30, 80) м2, rt60 = uniform(0.5, 0.7), 400 файлов.

  • Третья группа — комната большого размера: площадь = uniform(80, 120) м2, rt60 = uniform(0.7, 0.85), 160 файлов;

  • Четвёртая группа — комната большого размера с длинной реверберацией: площадь = uniform(80, 120) м2, rt60 = uniform(0.85, 1.), 80 файлов.

Результаты экспериментов

Таблица 4: Сравнение моделей на собственных данных. Метрики NISQA отсутствуют у GTCRN, так как это метрика для 48 кГц, а модели работают с 16 кГц. Полужирным шрифтом выделены лучшие значения метрик. Производительность оценивали на Intel Core i9-13900HX. MACs считали на минимальном допустимом входе.
Таблица 4: Сравнение моделей на собственных данных. Метрики NISQA отсутствуют у GTCRN, так как это метрика для 48 кГц, а модели работают с 16 кГц. Полужирным шрифтом выделены лучшие значения метрик. Производительность оценивали на Intel Core i9-13900HX. MACs считали на минимальном допустимом входе.

Модификации, в которых спектрограмма представлена как магнитуда и фаза, демонстрируют результат хуже, чем версии с вещественным/мнимым представлением. Предположение, что такое представление поможет модели лучше понимать сигнал, оказалось ошибочным.

Несмотря на то, что бейзлайн выдаёт удовлетворительные метрики, среднее значение STOI, равное 0,77, может говорить о том, что в обработанном сигнале есть заметные искажения, влияющие на разборчивость речи.

На собственных тестовых данных (шум + реверберация) лучшим вариантом оказалась модификация FSPEN + 48 кГц + Overlap (95 тыс. параметров, 5,6 млн MACs):

  • PESQ: 2,35 (против 1,68 у искажённого сигнала и 2,22 у исходного FSPEN);

  • NISQA‑MOS: 3,73, NISQA‑NOISE: 4,00 (близко к ground truth: 4,07/4,12);

  • STOI: 0,88, SRMR: 9,6 (эффективное подавление реверберации);

  • RTF: 0,11 (работа в реальном времени).

В результате удалось превзойти baseline по некоторым метрикам при умеренном увеличении количества параметров (не более 200 тыс.) и MAC‑операций (не более 10 млн для минимально допустимого входа). Модель успешно справляется как с шумоподавлением (значение NISQA‑NOISE близко к значению для ground truth), так и с подавлением реверберации. Значение SRMR, превышающее 9, свидетельствует об отсутствии или слабой выраженности реверберации в сигнале.

Выводы

Обучить легковесные модели для работы с полнодиапазонными данными оказалось значительно труднее, чем для аудио с частотой дискретизации 16 кГц: размерность данных гораздо выше, как и количество частотных зависимостей. Наши версии FSPEN хорошо подавляют шум и дереверберируют, оставаясь компактными. К тому же они могут работать в реальном времени, что сильно повышает их практичность.

В будущем можно дополнительно обучить модели на более крупном наборе шумовых и речевых сигналов, чтобы повысить устойчивость в различных сценариях использования. Также можно переписать некоторые компоненты на более производительном языке программирования (например, C++ или Rust), как это сделано в DeepFilterNet, чтобы модели стали работать ещё быстрее.