Шумоподавление: классическое NS, RNNoise, Krisp, NVIDIA RTX Voice

Автор: Николай СапуновОбновлено: август 202631 мин чтения
Содержание статьи +

Кратко

Шумоподавление – это часть голосовой системы, которая убирает ровный шип, вентилятор, клавиатуру и кафе за спиной говорящего, чтобы слушатель слышал голос, а не комнату. Старый способ, который до сих пор работает внутри каждого браузера, оценивает, как выглядит шум в паузах между словами, и вычитает его – быстро и компактно, но он размывает голос и сдаётся перед всем, что не является ровным гулом. Новый способ, который используют RNNoise, Krisp и шумоподавление NVIDIA, обучает нейросеть на тысячах часов записей «голос плюс шум», и поэтому она снимает лай собаки или хлопок двери, которые старый метод снять не мог. Эта статья на простом языке объясняет оба семейства, показывает арифметику того, как агрессивность подавления торгуется с качеством голоса, называет реальные алгоритмы и где они работают, и подсказывает, какой из них выбрать для совещания, подкаста, контакт-центра или клиники.

Почему это важно

Если вы делаете продукт для видеоконференций, контакт-центр, телемедицинскую платформу или онлайн-класс, «на звонке слишком много фонового шума» – одна из трёх самых частых жалоб, которые вы прочитаете, а «фильтр шума съедает мой голос» идёт следом. И то и другое – задачи шумоподавления, и они тянут в разные стороны. Эта статья для продакт-менеджера, основателя или операционного руководителя, которому нужно понять компромисс достаточно, чтобы выбрать стратегию, заложить бюджет и задать инженеру точный вопрос, – а не писать фильтр самому. Старший инженер тоже найдёт здесь каждое утверждение со ссылкой на оригинальную статью, исходники WebRTC, документацию вендора или соответствующую Рекомендацию ITU-T. К концу вы будете знать, почему бесплатный фильтр в браузере не убирает лай собаки, что именно делает иначе модель вроде Krisp или RNNoise, чего это стоит по CPU и задержке, и где место каждому.

Проблема: слушатель слышит комнату, а не только голос

Начнём с того, что переживает слушатель, потому что из этого следует всё решение. Микрофон честен до невозможности: он захватывает всё, что до него доходит, а не только нужный голос. Поэтому вместе с говорящим он берёт вентилятор ноутбука, кондиционер, клавиатуру, собаку, детей в соседней комнате, кофемашину и поток машин за открытым окном. Слушателю приходится разделять всё это в собственной голове – и на долгом звонке это утомляет. Задача шумоподавления – сделать это разделение за него, ещё до отправки звука, чтобы голос пришёл чистым.

Нам нужно одно число, чтобы говорить о том, насколько трудна эта задача, и это число – отношение сигнал/шум, по-английски SNR. Это разрыв в децибелах между тем, насколько громок голос, и тем, насколько громок шум. Децибел (дБ) – это отношение по логарифмической шкале: каждые 6 дБ примерно удваивают или вдвое уменьшают амплитуду. Высокий SNR – скажем, 30 дБ – означает, что голос возвышается над шумом, и звонок звучит хорошо без всякой помощи. Низкий SNR – скажем, 5 дБ – означает, что шум почти так же громок, как голос, и без подавления слушателю тяжело. Большинство реальных видеозвонков ближе к 20 дБ, чем к 0 дБ, – это удобная середина, где у подавления есть пространство помочь без большого риска. Трудные случаи – звонок из движущейся машины, медсестра на оживлённом посту, оператор в open-space – это случаи с низким SNR, и именно там старый и новый методы расходятся.

Ещё одна мысль перед методами, потому что она управляет каждым последующим выбором. В реальном звонке нельзя ждать. Каждый кусочек звука – обычно 10 или 20 миллисекунд, называется кадр (frame), – нужно очистить и отправить почти сразу, потому что человеческий разговор разваливается, как только задержка туда-обратно переваливает примерно за 300–400 миллисекунд. Поэтому шумоподавителю реального времени разрешено «заглядывать вперёд» текущего кадра самое большее на несколько миллисекунд. Именно это ограничение – очистить сейчас, почти без подглядывания в будущее – делает шумоподавление для звонков сложнее, чем шумоочистку для подкаста, который можно обрабатывать всю ночь, и именно по нему меряется каждый метод на этой странице.

Где шумоподавление в цепочке

Шумоподавление не работает в одиночку. В цепочке захвата WebRTC – открытой очистке звука, которая работает в Chrome, Edge и большинстве нативных голосовых приложений – оно стоит в фиксированном порядке среди соседей, и порядок этот не случаен. Сначала фильтр верхних частот убирает неслышимый низкочастотный гул. Затем эхоподавление убирает голос дальней стороны, просачивающийся обратно через ваш динамик, об этом – в статье Эхоподавление (AEC): как это на самом деле работает. Затем шумоподавление – эта статья – снимает фон. Затем автоматическая регулировка усиления задаёт финальный уровень, об этом – в статье Автоматическая регулировка усиления (AGC): ровная громкость. Вся последовательность разобрана целиком в статье WebRTC-конвейер аудио целиком.

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

Рис. 1. Где стоит шумоподавление. Оно работает после эхоподавления и до регулировки усиления, поэтому каскад уровня усиливает голос, у которого фон уже убран.

Классический метод: оценить шум, затем вычесть его

Старое семейство шумоподавителей – то, что до сих пор внутри каждого браузера, – опирается на одно умное наблюдение. Между словами и предложениями, когда никто не говорит, микрофон захватывает чистый шум. Если система слушает в этих паузах, она может построить картину того, как выглядит шум: сколько энергии он несёт на каждой частоте. Затем, когда говорящий заговорит снова, она может вычесть эту картину шума из смеси и оставить то, что осталось, – а это должно быть в основном голос.

Чтобы это сделать, подавитель сначала раскладывает каждый кадр звука на частоты – низ, середину, верх и всё между ними – с помощью математического преобразования. Представьте графический эквалайзер с десятками ползунков, по одному на частотную полосу. В тихих паузах система измеряет, сколько шума сидит в каждой полосе; это спектральная оценка шума. Когда голос возвращается, она убавляет ползунок каждой полосы на величину шума, оценённого для этой полосы, оставляя голос почти нетронутым. Самую раннюю опубликованную версию этого, спектральное вычитание, описал Стивен Болл (Boll) в 1979 году; близкий подход, фильтр Винера, предложили Джэ Лим и Алан Оппенгейм в том же году, а более тонкую статистическую версию, оценку MMSE кратковременной спектральной амплитуды, – Ярив Эфраим и Дэвид Малах в 1984-м. Шумоподавитель WebRTC – прямой потомок: он оценивает спектр шума, вычисляет усиление для каждой полосы частот и применяет его, с настраиваемой агрессивностью от мягкой до очень сильной.

Привлекательность очевидна. Он крошечный – несколько килобайт кода – и достаточно быстрый, чтобы работать на десятилетнем телефоне незаметно. Ему не нужны ни обучающие данные, ни файл модели. И для случая, под который он создан – ровный, монотонный шум вроде вентилятора или кондиционера, который почти не меняется от секунды к секунде, – он работает хорошо, потому что ровный шум, измеренный в паузе, – это тот же шум мгновением позже, когда заговорит человек.

Почему у классического метода есть потолок

В саму идею встроены две неудачи, и назвать их – значит точно понять, когда вы метод переросли.

Первая неудача – нестационарный шум, шум, который меняется быстро. Весь метод предполагает, что шум, измеренный в последней тихой паузе, всё ещё описывает шум сейчас. Это верно для вентилятора. И полностью неверно для лая собаки, хлопка двери, щелчка клавиатуры, плача ребёнка или второго человека, который заговорил, потому что эти звуки приходят во время голоса и совсем не похожи на тихий гул, измеренный мгновением раньше. У классического подавителя нет для них оценки, поэтому он пропускает их насквозь. Вот почему бесплатный браузерный фильтр убирает кондиционер, но ничего не делает с собакой, – и почему ваши пользователи в принципе путаются, что значит «шумоподавление».

Вторая неудача – артефакт, который он оставляет, называется музыкальный шум (musical noise). Когда вычитание неточно – а оно всегда неточно – то тут, то там выживают отдельные полосы частот, пока их соседи срезаны, оставляя крошечные тоны, которые мерцают то появляясь, то исчезая. Слушатели описывают это как «булькающий», «подводный» звук. Поднимите агрессивность, чтобы гнаться за бо́льшим шумом, – получите больше музыкального шума; убавьте, чтобы избежать артефакта, – выживет больше шума. Это напряжение – режь сильнее и повреждай голос или режь мягко и оставляй шум – постоянный потолок классического подхода, и это тот разрыв, который нейросетевые методы созданы закрыть.

«Ловушка, прямым текстом. Когда клиент говорит «на звонке всё равно лает моя собака, даже с включённым шумоподавлением», он нашёл не баг – он нашёл край классического метода. Встроенный в браузер подавитель – инструмент для стационарного шума. Лай, грохот и чужие голоса нестационарны и требуют обученной нейросетевой модели. Лечится это не настройкой, а другим классом подавителя. Сказать клиенту «прибавьте шумоподавление» здесь – сделать хуже, потому что более агрессивное вычитание означает больше повреждения музыкальным шумом его собственного голоса, а лай всё равно пройдёт.»

Нейросетевой метод: выучить, как выглядит голос, и оставить только его

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

Цена этой силы реальна, и её стоит назвать сразу. Нейросетевая модель больше нескольких килобайт кода вычитания; ей нужно прогонять сеть арифметики на каждом кадре, что стоит CPU или GPU; и её нужно обучить, что серьёзная работа. Искусство этой области за последнее десятилетие – снизить эту цену достаточно, чтобы работать в реальном времени на обычном ноутбуке или телефоне, – и это ровно история RNNoise, Krisp и шумоподавления NVIDIA.

Рис. 2. Два семейства. Классическое подавление измеряет шум и вычитает его, и работает только на ровном шуме. Нейросетевое выучило, как выглядит голос, и оставляет только его, поэтому убирает внезапные звуки, которые классический метод пропускает.

RNNoise: гибрид, который сделал нейросетевое подавление маленьким

Прорыв, который сделал нейросетевое шумоподавление практичным для обычных устройств, – это RNNoise, опубликованный Жан-Марком Валеном (Valin) – одним из инженеров кодека Opus – в Mozilla и Xiph.Org в 2017–2018 годах. Его ключевая идея – не бросать гигантскую нейросеть на всю задачу, а сохранить дешёвую обработку сигнала, которая и так работает, и использовать маленькую нейросеть только для трудной части: решить, сколько подавить в каждой полосе. Вален называет это гибридным подходом DSP/глубокое обучение, и именно поэтому модель крошечная.

Вот как это работает простыми словами. Вместо того чтобы просить сеть смотреть на каждое из сотен частотных значений в кадре – что потребовало бы огромной медленной модели, – RNNoise группирует частоты в 22 полосы, расставленные так, как слышит человеческое ухо, шире на высоких частотах, где у уха хуже разрешение. Единственная задача сети – выдать одно усиление (gain) на полосу – число от 0 до 1, которое говорит «оставить всю эту полосу» (1,0), «срезать эту полосу целиком» (0,0) или что-то посередине. Думайте об этом как об эквалайзере из 22 ползунков, которые сеть подкручивает много раз в секунду, чтобы пропустить голос и убавить шум. Поскольку усиления ограничены диапазоном от 0 до 1, модель никогда не сможет добавить звук, которого не было, – это исключает целый класс ошибок.

В центре стоит рекуррентная нейросеть, по-английски RNN, – сеть с короткой памятью о недавних кадрах, и это важно, потому что отличить голос от шума нужно с учётом контекста во времени, а не одного мгновения. Конкретно она использует управляемые рекуррентные блоки (GRU) – ячейку памяти, которая может удержать паттерн на много кадров. Три небольших слоя GRU делают бо́льшую часть работы, на вход им идут 42 тщательно выбранных признака, включая энергии полос, высоту тона голоса (pitch) и насколько силён вокализованный характер звука. Отдельный приём – фильтрация по высоте тона (гребенчатый фильтр, настроенный на высоту голоса говорящего) – чистит шум, который прячется между гармониками голоса, чего 22 грубые полосы сами по себе уловить слишком широки.

Числа – вот что делает RNNoise замечательным. Обученная модель умещается примерно в 85 килобайт – достаточно мало, чтобы поставлять её внутри приложения незаметно, – потому что веса хранятся как 8-битные значения, а не 32-битные числа с плавающей точкой. Она работает примерно в 60 раз быстрее реального времени на настольном CPU x86 и примерно в 7 раз быстрее реального времени на Raspberry Pi 3, без всякого GPU. И она подчиняется правилу реального времени: заглядывает вперёд лишь примерно на 10 миллисекунд. Код открыт под разрешительной лицензией BSD. RNNoise – это подавитель за функцией шумоочистки в OBS Studio и во многих открытых голосовых инструментах, и его устройство – маленькая гибридная модель, усиления по полосам, память GRU – стало шаблоном, который доработали коммерческие продукты.

Рис. 3. Гибрид RNNoise. Дешёвая обработка сигнала разбивает звук на 22 перцептивные полосы; маленькая сеть GRU выдаёт по одному усилению на полосу; фильтр по высоте тона чистит между гармониками. Вся модель около 85 КБ и работает многократно быстрее реального времени на обычном CPU.

Krisp: коммерческая модель на устройстве

Krisp – самый известный коммерческий нейросетевой шумоподавитель, продаётся и как настольное приложение, и, что важнее для продуктовых команд, как SDK, который вы встраиваете в собственное приложение. Он продвигает нейросетевой подход дальше RNNoise по качеству ценой большей модели и большего CPU и добавляет возможности, которых нет у открытой базы.

Три факта о Krisp заслуживают внимания продуктовой команды. Во-первых, он работает на устройстве, а не в облаке: звук обрабатывается локально, и, по документации самого Krisp, голосовые данные не загружаются на сервер. Для телемедицины и финансов, где отправка сырого аудио пациента или клиента третьей стороне – проблема комплаенса, обработка на устройстве часто оказывается решающим фактором. Во-вторых, Krisp поставляет модели двух размеров – модель Small, которая стоит в SDK по умолчанию и сделана так, чтобы работать на устройствах попроще примерно в семь раз быстрее модели Big, и модель Big, которая даёт наивысшее качество при большей нагрузке на CPU. Этот выбор – качество против CPU – вы делаете под класс устройства, и мы к нему вернёмся. В-третьих, Krisp подавляет шум в обоих направлениях: исходящем (ваш микрофон, очищенный до отправки) и входящем (звук собеседника, очищенный по приходу, что помогает, когда у него нет хорошего фильтра).

По задержке документация Krisp даёт конкретное число, которое стоит привести, потому что оно задаёт ожидания: для кадра 10 миллисекунд на частоте дискретизации 16 кГц алгоритмическая задержка около 25 миллисекунд. Это задержка, которую добавляет сам подавитель, и она достаточно мала для реальных звонков, но не нулевая – это часть бюджета «рот-ухо», которым вы управляете по всему конвейеру. Модели Krisp настроены под ближнее поле (near-field), то есть микрофон в пределах примерно полуметра ото рта; говорящий через комнату – случай труднее, и результат зависит от расстояния, эха и SNR. SDK работает на десктопе, мобильных и – на базе WebAssembly – прямо в браузере.

Шумоподавление NVIDIA: путь с ускорением на GPU

Третье имя, с которым встречаются продуктовые команды, – шумоподавление NVIDIA, у которого есть небольшая история, которую стоит знать, потому что названия менялись. Оно запустилось в 2020 году как RTX Voice – бета, использовавшая аппаратное ускорение ИИ (тензорные ядра) на видеокартах NVIDIA RTX, чтобы прогонять сеть шумоочистки. Позже NVIDIA расширила его на более старые карты GTX и встроила в приложение NVIDIA Broadcast как функцию «Noise Removal». Для разработчиков та же технология доступна через Maxine Audio Effects SDK (Maxine теперь под брендом «NVIDIA AI for Media»), который предлагает шумоочистку, удаление эха комнаты и связанные эффекты как библиотеку для встраивания в приложение.

Отличительная черта – где оно работает. RNNoise и Krisp сделаны так, чтобы работать на CPU и потому работать на любой машине; путь NVIDIA прогоняет более тяжёлую сеть на GPU, что позволяет использовать большую модель выше качеством, не нагружая процессор, который и так ведёт совещание. Компромисс – переносимость: нужна видеокарта NVIDIA. Это делает его естественным для стримера, вещателя или рабочей станции для создания контента, где уже есть мощный GPU, и плохим выбором для телефона или тонкого ноутбука. Для продуктовой команды правило простое: если ваши пользователи на десктопах с GPU и вам нужно наивысшее качество, путь NVIDIA привлекателен; если ваши пользователи на чём угодно, модель на CPU вроде Krisp или RNNoise – более безопасный выбор по умолчанию.

Разобранный пример: насколько агрессивно подавлять?

У каждого шумоподавителя есть ручка – назовём её агрессивностью или силой подавления, – и самое важное, что нужно про неё понять: прибавить её не бесплатно. Больше подавления убирает больше шума и убирает больше голоса. Искусство – найти настройку, где слушатель выигрывает от более тихого фона больше, чем теряет от чуть более тонкого голоса. Числа делают это наглядным.

Допустим, говорящий приходит с отношением сигнал/шум 10 дБ – голос на 10 дБ громче шума, довольно шумный звонок. Нейросетевой подавитель может спокойно убавить шум, скажем, на 18 дБ, оставив голос почти нетронутым. Пройдём арифметику:

новый уровень шума = старый уровень шума − подавление, применённое к шуму
                   = (−10 дБ относительно голоса) − 18 дБ
                   = −28 дБ относительно голоса

новый эффективный SNR = 28 дБ  (голос теперь возвышается на 28 дБ над остаточным шумом)

Звонок ушёл с напряжённых 10 дБ SNR на удобные 28 дБ SNR, и слушатель перестаёт напрягаться. Теперь надавите на ручку слишком сильно – и модель начнёт убирать голос вместе с шумом. Если самая агрессивная настройка срежет лишние 6 дБ шума, но при этом ослабит согласные – звуки т, к и с, которые несут разборчивость, – остаточный шум ниже, но голос теперь глухой и хуже понимается. Слушатель сменял чистый фон на густой голос, а это обычно плохой обмен на звонке, где быть понятым – весь смысл. Вот почему хорошие значения по умолчанию сидят в середине и почему ручка принадлежит инженеру, а не конечному пользователю, крутящему её в моменте.

У того же компромисса есть формальный способ измерения, и его стоит назвать, потому что он встречается в каждом серьёзном сравнении. Международный метод оценки шумоподавителя, Рекомендация ITU-T P.835, просит слушателей оценить три вещи раздельно: речевой сигнал сам по себе (называется SIG – повреждён ли голос?), фон сам по себе (называется BAK – насколько навязчив остаточный шум?) и общее качество (называется OVRL). Подавитель, который хорош по BAK, но плох по SIG, убивает шум за счёт повреждения голоса – случай чрезмерной агрессии выше. Лучшие модели хороши по всем трём, и весь смысл тройного разделения – не дать вендору спрятать повреждение голоса за впечатляющим числом по шуму. Краудсорсинговая версия-компаньон, ITU-T P.808, прогоняет ту же идею в масштабе, а модель машинного обучения DNSMOS P.835 предсказывает эти оценки автоматически, чтобы команды могли тестировать тысячи фрагментов без слушательской панели.

Как область меряет прогресс: DNS Challenge

Если вам нужно одно место, чтобы увидеть передний край, – это DNS Challenge (Deep Noise Suppression Challenge), который Microsoft Research проводит как регулярное соревнование на речевых конференциях Interspeech и ICASSP начиная с 2020 года. Каждый раунд публикует большой открытый набор данных из чистой речи и шума, стандартный тестовый набор и метод оценки на основе шкал ITU-T P.835 выше, затем ранжирует участников. Соревнование сделало две полезные вещи для всех, не только для участников: создало общие публичные обучающие данные, чтобы любая команда могла построить конкурентную модель, и задало честную стандартизированную линейку, так что «наша модель лучше» стало проверяемым утверждением. Объективная метрика, которую соревнование популяризировало, DNSMOS P.835, теперь – повседневный инструмент команд для сравнения подавителей в разработке. Для продуктовой команды вывод не в таблице лидеров, а в тренде: нейросетевое подавление улучшается год за годом на публичном эталоне, и разрыв между настроенной коммерческой моделью и классическим браузерным фильтром теперь велик и хорошо задокументирован.

Выбор шумоподавителя: практическое руководство

Это самая прикладная часть статьи, поэтому вот она в виде таблицы, по которой можно действовать. Правильный выбор зависит от трёх вещей: сколько у вас CPU или GPU, насколько труден шум и можно ли отправлять звук за пределы устройства.

СценарийРекомендуемый подходПочему
Обычное видеосовещание, разные устройстваВстроенное NS WebRTC или RNNoise как шаг вверхБесплатно, крошечно, берёт обычный ровный шум; RNNoise добавляет нестационарный за ~85 КБ
Контакт-центр / операторы в open-spaceКоммерческий нейросетевой SDK (напр. Krisp), CPU-модельГул чужих голосов нестационарен; на устройстве хранит аудио клиента приватным
Телемедицина / финансы, критична приватностьТолько нейросетевая модель на устройствеОтправка сырого аудио пациента или клиента в облачный фильтр – риск комплаенса
Подкаст / запись, нет ограничения по времениСамая большая нейромодель, какую можете, офлайнНет ограничения реального времени, используйте модель с большим заглядыванием вперёд
Стример / автор на станции с GPUШумоподавление NVIDIA (Maxine / Broadcast)Мощный GPU уже есть; запустите модель крупнее и выше качеством вне CPU
Встраиваемое / маломощное устройствоКлассическое NS или RNNoise, если CPU позволяетНесколько килобайт и минимум CPU; RNNoise влезает там, где большая модель – нет
Захват музыки или инструментаВыключите шумоподавлениеПодавитель считает протяжные ноты инструмента шумом и портит запись

Под таблицей лежат два правила. Первое: подбирайте инструмент под шум – ровный шум решается классическим методом бесплатно, и вы платите за нейромодель только тогда, когда нужно убрать внезапные нестационарные звуки. Второе: подбирайте размер модели под устройство – модель Big на тонком ноутбуке или телефоне будет жечь батарею и может заикаться, поэтому модель Small или RNNoise часто верное значение по умолчанию, а Big приберегается для способных машин. Последняя строка – та, что команды забывают: для музыки правильное количество шумоподавления – ноль, потому что подавитель, обученный на речи, услышит протяжную ноту скрипки как шум и убавит её. Откройте выключатель для творческого использования так же, как сделали бы для Автоматической регулировки усиления.

Какие настройки открывать, а какие прятать

Та же дисциплина, что и для регулировки усиления, применима здесь: открывайте намерение, прячьте механизм. Неинженер может сказать вам, на совещании он или играет музыку; он не может настроить кривую подавления на слух в моменте, не сделав хуже.

НастройкаОткрывать пользователям?Почему
Шумоподавление вкл/выклДаНужно выключать для музыки, инструментов, профзахвата
Простой пресет «низко / средне / высоко»ИногдаДопустимо как три безопасных пресета; никогда как сырая числовая ручка
Размер модели (Small / Big)Нет – авто по устройствуНеверный выбор заикается на слабом железе или тратит качество на сильном
Сырая сила подавления (дБ)НетСлишком высоко глушит голос; значение по умолчанию задаёт только инженер
Входящее (со стороны динамика) подавлениеИногдаПолезно, когда у собеседника нет фильтра; держите простым переключателем
Какой алгоритм (классический / RNNoise / Krisp / NVIDIA)НетЭто выбор реализации, который продукт делает под устройство, а не пользователь

Где здесь Фора Софт

Мы встраиваем аудио реального времени в видеоконференции, телемедицину, онлайн-обучение, контакт-центры и лайв-шопинг с 2005 года, и «слишком много фонового шума» против «фильтр съедает мой голос» – напряжение, которое приходится разрешать каждому из этих продуктов. В телемедицине ограничение обычно сначала про приватность – аудио пациента не может покинуть устройство ради облачного фильтра, – поэтому нейросетевая модель на устройстве единственный приемлемый ответ, и мы настраиваем её агрессивность так, чтобы тихая клиника оставалась чистой, не утончая голос врача. В контакт-центрах шум – это говорящие рядом операторы, нестационарный гул, который побеждает классический фильтр, поэтому обученная модель оправдывает свой CPU. Наша работа – в основном выбрать правильный подавитель под класс устройства, решить, когда бесплатного фильтра WebRTC достаточно, а когда стоит интегрировать коммерческий SDK, правильно встроить подавитель в цепочку WebRTC, чтобы он шёл до регулировки усиления, и целенаправленно проверить повреждение голоса по разделению SIG/BAK/OVRL до того, как клиент его услышит. Мы не обучаем модели шумоподавления с нуля; мы заставляем правильную из них вести себя на пёстрой смеси комнат и устройств, которые на самом деле есть у ваших пользователей.

Главное

  • Классическое подавление измеряет шум в паузах и вычитает его – бесплатно, крошечно, только ровный шум.
  • Оно не может убрать лай, клавиатуру или чужие голоса; они приходят во время речи.
  • Нейросетевое подавление выучило, как выглядит голос, и оставляет только его, убирая внезапный шум.
  • RNNoise – гибрид: маленькая модель ~85 КБ на GRU, усиления по полосам, работает на любом CPU.
  • Krisp и NVIDIA поднимают качество; обработка на устройстве хранит приватность, GPU-модели крупнее.
  • Больше подавления убирает и больше голоса; проверяйте разделением P.835 SIG/BAK/OVRL.

Что почитать дальше

Строите такую систему?

Подберём параметры кодирования под ваш контент и посчитаем стоимость доставки до старта разработки.