Спектрограмма до шумоподавления, записана человеческая речь на SNR 15 дБ
Спектрограмма звука после обработки нейросетью RNNoise
Шумоподавление остаётся актуальной темой научных исследований по крайней мере с 70-х годов прошлого века. Несмотря на значительные улучшения в качестве систем, их высокоуровневая архитектура практически не претерпела изменений. Техника спектральной оценки полагается на спектральную оценку шума, которая, в свою очередь, работает при помощи детектора голосовой активности (VAD) или тому подобного алгоритма. Каждый из трёх компонентов требует аккуратной подгонки — и их трудно настраивать. Поэтому достижения Mozilla и Xiph.org в глубинном обучении имеют такое большое значение. Созданная ими гибридная система RNNoise уже сейчас демонстрирует неплохой результат в шумоподавлении (см. исходный код и демо).
Создавая RNNoise, разработчики стремились получить маленький и быстрый алгоритм, который будет эффективно работать в реальном времени даже на Raspberry Pi. И им это удалось, причём RNNoise показывает более качественный результат, чем самые крутые и навороченные современные фильтры.
Высокоуровневая структура большинства алгоритмов шумоподавления
Нейросети и раньше использовалиcь для подавления шумов, в последние годы это популярное направление исследований. Но большинство из них предполагают использование в приложениях автоматического распознавания речи, где задержка и вычислительная мощность не являются определяющими факторами. В отличие от них, проект Mozilla ориентируется на приложения реального времени, такие как видеоконференции, и на обработку звука с полноценной частотой дискретизации 48 кГц.
Для достижения поставленной цели Mozilla применила гибридный подход, который задействует одновременно и хорошо известные методы шумоподавления, и глубинное обучение для замены тех компонентов, которые трудно настраиваются в обычных системах. Суть метода изображена на блок-схеме.
Блок-схема обработки сигнала
Такой гибридный подход отличается от end-to-end сетей, где нейросеть берёт на себя абсолютно всю или почти всю обработку звука. Безусловно, подобные системы доказали свою эффективность, но разработчики RNNoise считают их слишком сложными и ресурсоёмкими. Например, в RNN-сеть для шумоподавления от Google (2012 год) напрямую оценивает величины частот. Для обработки звука на 8 кГц она задействует 6144 блоков в скрытых слоях и около 10 млн весовых показателей. Масштабирование на речь 48 кГц с фреймами по 20 мс создаёт слишком сложную систему с более чем 400 выходными сигналами (от 0 до 20 кГц). её точно не потянет Raspberry Pi. Задачей Mozilla было сделать простую и быструю модель, поэтому они применили гибридный подход. Кроме того, они вообще отказались от прямой работы с сэмплами и со спектром, а вместо этого разделили спектр на 22 диапазона — и анализировали именно их, а не 480 (сложных) спектральных значения, которые пришлось бы анализировать в противном случае. Эти 22 диапазона соответствуют человеческому восприятию звука на слух, в соответствии с психоакустической шкалой барков. Подобное распределение используется в кодеке Opus, и здесь Mozilla позаимствовала базовую модель, лишь немного скорректировав её.
Такой подход доказал свою эффективность. Программа потребляет лишь скромную долю вычислительных ресурсов процессора ARM Cortex-A53, работающего на 1,2 ГГц (Raspberry Pi 3).
Сравнительные тесты показали, что применение нейросети значительно улучшает качество шумоподавления. На диаграммах показано подавление шума от фоновых разговоров (слева), автомобилей (в центре) и уличного шума (справа) в сравнении с библиотекой SpeexDSP на основе MMSE.
Сейчас разработчики обращаются ко всем пользователям с просьбой пожертвовать свой шум в научных целях, то есть для обучения нейросети. Записать шум можно прямо в онлайне. Просят сделать это в любом окружении, где возможен разговор голосом, то есть буквально в любом месте: это может быть ваш автомобиль, офис, улица или какое угодно место, где вы можете общаться по телефону или через компьютер. На странице записи шума просто нажмите кнопку “Record” и помолчите 1 минуту. Для обучения нейросети нужно ещё указать, в каком конкретно окружении вы записывали тишину (шум).
Научная статья (pdf) с описанием RNNoise пока не подана для публикации в научный журнал.