Кадр из видео Super Mario Theme (Trumpet & Euphonium)
https://youtu.be/o3a6F070Xt0
Кадр из видео Super Mario Theme (Trumpet & Euphonium) https://youtu.be/o3a6F070Xt0

Введение

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

  • Классификация звуковых сигналов; 

  • Speech2Text. Перевод речи в текстовое отображение; 

  • Text2Speech. Обратная предыдущей задача. Генерация речи по заданному тексту; 

  • Поиск похожих звуков; 

  • Sound Separation. Разделение звуковой дорожки на составляющие звуки;

  • Beamforming. Разделение многоканальной звуковой дорожки на возможные составляющие с учетом пространственного расположения звукозаписывающих устройств.

В данной статье я расскажу о решении задачи Sound Separation, но с одним отличием - в качестве входных данных используются видеозаписи.

Для начала разберемся: что такое звук? Звук - это механические колебания, передающиеся в среде. Звуковые колебания характеризуются амплитудой и частотой. В среднем обычный человек может услышать звуки частотой 20Гц – 20000Гц. Для представления аудиоданных в цифровом формате микрофон с определенной частотой регистрирует амплитуду механических колебаний среды, затем полученные замеры преобразуются в цифровой формат. Таким образом, звук в вычислительных устройствах представляется как временной ряд. При этом, чем более высокая частота дискретизации, тем более высокие частоты получается сохранить.

Возможно представление аудио сигнала в виде трехмерной диаграммы, где на оси абсцисс изображено время, на оси ординат – частота звука. Третье измерение с указанием амплитуды на определенной частоте в конкретный момент времени представлено интенсивностью или цветом каждой точки изображения. Такое представление называется спектрограммой. Для получения спектрограммы из исходного аудио сигнала необходимо выполнить оконное преобразование Фурье.

Пример спектрограммы
Пример спектрограммы

Такое представление позволяет применять двумерные сверточные нейронные сети в задачах обработки звука. Следует помнить, что в таком подходе не учитывается положение на изображении, хотя в случае спектрограмм это может быть важно. Например, в задаче классификации изображений совершенно неважно, находится объект внизу или вверху, при этом положение «внизу» и «вверху» на спектрограмме отвечает разным частотам, а значит разным звукам.

Задача разделения звуков заключается в получении аудиодорожек отдельных источников звука по одной аудиозаписи с несколькими источниками.

a_{mix} = \sum_{i=0}^N a_i

a_{mix}- исходная аудиодорожка, «смесь» отдельных звуков 
a_i– i-тая компонента звука 
N- число компонент звука


Разделение звука
Разделение звука

Задача локализации - поиск источников звука в кадре и отделение от общей аудиодорожки.

Локализация звуков
Локализация звуков

Подобрать метрику, которая идеально оценивала качество модели, не так просто. Это связано со сложностью самих звуковых данных, а так же с тем, что восприятие результата может быть субъективно. Несколько человек могут по-разному оценить качество разделения в зависимости от их музыкального слуха и других факторов. Зачастую, в задачах разделения звука используют метрику SDR, дополнительно можно вычислять SIR и SAR.

  • SDR - source to distortion ratio, общая оценка того, насколько хорошо источник звучит

  • SIR – source to interference ratio, оценка того, насколько хорошо звук отделен от остальных источников

  • SAR – source to artifact ratio, оценка того, насколько хорошо звук изолирован от нежелательных артефактов

Теперь, определившись с задачей и метриками, можно посмотреть как решать такую задачу.

Модель

Расскажу про подход, предложенный в статье Sound-of-Pixels. Модель состоит из нескольких частей: визуальная, аудио и синтезатор. Для начала определимся, что передается на вход в модели. Исходными данными для модели являются видеозаписи с источниками звука. Видеозапись можно представить как последовательность кадров и аудиодорожка. Аудиодорожку из одномерного представления можно перевести в спектрограмму. Таким образом, на вход модели будем подавать несколько кадров из видео и спектрограмму аудиодорожки.

Архитектура модели
Архитектура модели

Для вычисления признаков из кадров видео используется ResNet, для генерации аудио признаков из спектрограммы применяется U-Net подобная архитектура. После вычисления видео и аудио признаков они комбинируются с некоторыми обучаемыми весами и на выходе модели получаются сетка из масок. Маска - это одноканальное изображение с таким же размером, как и у входной спектрограммы, каждый пиксель маски принимает значения от 0 до 1. Впрочем, маска может быть бинарной, тогда значения - это 0 или 1. При поэлементном умножении маски на исходную спектрограмму смеси получается спектрограмма изолированного источника звука, а по спектрограмме можно восстановить аудиодорожку изолированного звука.

При вычисления визуальных признаков пространственные размерности уменьшаются в 16 раз. При использовании кадров размером 224х224 выходная пространственная размерность получается 14х14. И в каждой пространственной точке получается визуальный размер признаков размерности K (гиперпараметр, подбирается в зависимости от датасета). Сеть синтезатор для каждой пространственной точки совмещает визуальные признаки и аудио признаки и предсказывает маску для спектрограммы. Получается маска для звуков, источники которых находятся в соответствующем участке исходных кадров.

Выход модели
Выход модели

Обучить такую модель напрямую проблематично, поэтому авторы предлагают несколько трюков. Обучение проводится по видео с отдельными источниками звука. Если рассматривать музыкальный домен, то подойдут видео с соло исполнениями на музыкальных инструментах. Дополнительной разметки при этом не требуется, но при обучении делается несколько допущений. Во-первых, во время обучения не предсказывается сетка масок, после визуальной сети берется макспулинг по пространственным размерностям и маска вычисляется одна на весь кадр. Во-вторых, звук аддитивен, а это значит, что при сложении двух аудиозаписей в соло исполнении получается запись исполнения в дуете.

Для обучения из выборки семплируется пара видеозаписей, т.е. объект для обучения - это две видеозаписи. Аудиодорожки складываются и получается дорожка с несколькими источниками звука. В аудио часть модели подается смесь, а по кадрам первого и второго видео вычисляются соответствующие вектора визуальных признаков. Теперь можно применить синтезатор к аудио признакам и видео признакам от первого и второго видео и получить на выходе маску для извлечения исходных аудиодорожек из смеси. Исходные аудиодорожки нам известны, можно посчитать функцию потерь между предсказанными дорожками и исходными и обновить веса модели.

Обучение модели
Обучение модели

Остается вопрос - где взять данные для обучения? Для обучения на музыкальных инструментах использовался датасет MUSIC, для обобщения модели на общий звуковой домен использовался датасет VGGSound. Данные собраны из видео на youtube, но сами датасеты - это .csv файлы с id видео. Сбор, загрузку и предобработку записей нужно выполнять своими руками. MUSIC содержит ~600 видеозаписей с соло исполнением на 11 (есть часть с 21) музыкальных инструментах, а также видео с исполнениями в дуете. Все исполнения любительские, произведены в повседневной обстановке без использования профессионального оборудования. VGGSound намного больше, датасет содержит более 200 тысяч видеозаписей, а также разметку на 310 классов звуков (указывается временной отрезок в видео и метка звука, который звучит в этом отрезке)

Результаты

Давайте теперь посмотрим на результаты обученной модели. Сначала я покажу, как работает модель на музыкальных инструментах, затем на общих звуках из VGGSound.

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

Разделение гитары и скрипки
Разделение гитары и скрипки

По полученным спектрограммам можно восстановить звук и получить финальный результат

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

Локализация источников звука
Локализация источников звука

Теперь, если взять полученную модель и обученный детектор объектов в кадре, то можно усреднять маски в предсказанных boundary box детектора и получать звуки, издаваемые объектами в кадре.

Приведу метрики, которые я получал в результате наиболее удачных экспериментов. За baseline я взял метрики, которые авторы указали в своей статье. В приведенных экспериментах я использовал размерность признаков K=16. В других экспериментах пробовал различные значения, но они дают худший результат. В статье же авторы указывают, что по их экспериментам размерность K=32 работает лучше.

SDR

SIR

SAR

baseline

8.87

15.02

12.28

BCE loss, бинарная маска

10.56

21.24

13.96

BCE loss, регуляризация сценами с тишиной

8.27

17.69

12.07

L2 loss, непрерывная маска

5.87

15.41

15.03

Перейдем к датасету VGGSound. Приведу пример разделения детского плача и шума от работы погрузчика.

Разделение общих звуков
Разделение общих звуков

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

Локализация работает, но не идеально. Например, в кадре с вертолетом в небе у модели получается выделить звук в центре кадра.

Локализация источника звука (вертолета)
Локализация источника звука (вертолета)

Есть и неудачные примеры.

Локализация источника звука (человек)
Локализация источника звука (человек)

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

Наилучшая модель на валидации получилась со следующими метриками:

SDR

SIR

SAR

K=32, BCE loss

3.62

9.43

11.78

Сравнивать напрямую метрики на MUSIC и VGGSound, как я считаю, не очень корректно, т.к. датасеты совсем разные, VGGSound гораздо больше и вариативнее. Из-за этого оптимальным значением для размерности вектора признаков оказалось 32.

Трудности

В процессе воспроизведения статьи я столкнулся с рядом трудностей, о которых хотел бы упомянуть.

Сбор данных - довольно трудоемкий процесс. Даже несмотря на то, что есть размеченные датасеты, загрузка данных из источников требует времени и аккуратности. Каждая видеозапись требует времени на скачивание, времени на обработку, а также объем на диске. Уместить весь VGGSound локально я не смог, поэтому после скачивания сразу вырезал из видео нужный участок, раскладывал его на кадры и аудиодорожку, приводил картинки к меньшему размеру и понижал частоту дискретизации аудио дорожки. Стоит также сказать, что youtube не дает открыто массово скачивать контент с ресурса, поэтому пришлось применить некоторые трюки. Помимо этого, нет никаких гарантий, что указанные в датасете видео будут доступны на видеохостинге всегда, и, конечно же, это не так. Некоторые видеозаписи из датасета скрыты, удалены, заблокированы.

Авторы оригинальной работы опубликовали код, но он оказался неполным и немного устаревшим. Потребовалось обновить код для совместимости с современной версией PyTorch, исправить несколько неочевидных нюансов, а также дописать код для выполнения локализации и демо (локализация + детектор)

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

Обучение модели занимает довольно много времени. На личном компьютере (Nvidia RTX 2070 Super) обучение на MUSIC занимает 4 суток, на VGGSound 6 суток. Из-за этого каждый эксперимент занимал много времени, по этой причине пункт выше становится еще более актуальным.

Заключение

В статье я рассказал о том, как можно научить модель находить источники звука в видеозаписи без явной разметки. Это отличается от большинства существующих решений, требующих для обучения смесь звуков и разделенные звуки. Такие датасеты есть, но их немного и, что более важно, они небольшие и основаны на музыкальных композициях (MusDB, например). В рассмотренном подходе удалось научить модель разделять звуки из общего домена.

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

Полезные ссылки

Комментарии (12)


  1. antirek
    03.09.2021 10:21

    А есть проект по разделению записи разговора двух участников на две дорожки, чтобы каждый участник был на отдельной дорожке? просто аудиозапись, без видео


    1. kshmax Автор
      03.09.2021 12:56

      Сам я с такой задачей не работал, это Voice/Speech separation, можно посмотреть решения https://paperswithcode.com/task/speech-separation или есть свежая статья от фейсбука https://arxiv.org/pdf/2003.01531.pdf


      1. antirek
        03.09.2021 18:16
        +1

        Спасибо, почитал и погуглил. У гугла оказывается API есть https://cloud.google.com/speech-to-text/docs/multiple-voices называют такое разделение Speaker diarization


  1. Serafim
    03.09.2021 10:38
    +3

    Было бы клево удалить закадровый смех из ситкомов


  1. propell-ant
    03.09.2021 12:01

    Во всех примерах два источника: это ограничение метода, или несколько источников (3-5) тоже могут быть успешно разделены?


    1. kshmax Автор
      03.09.2021 12:59

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

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


  1. bak
    03.09.2021 15:32

    1) Видео действительно помогает сетке лучше разделять звуки? Сравнивали сетки обученные с видео и без, насколько большая разница?

    2) Кажется датасет для разделения (без видео) легко намайнить путем искусственного смешивания звуков. Не пробовали такой подход?


    1. kshmax Автор
      03.09.2021 20:36

      Архитектура из статьи без кадров не работает. Если убрать кадры, то это будет UNet для спектрограмм. Так делают, но качество сам не сравнивал. В данном случае идея не только в разделении, но и в нахождении источников звука в кадре, а для этого нужны визуальные данные.

      Это так. Можно даже взять датасеты, которые я использовал и достать из них дорожки. Но так я не делал тоже, потому что основной целью исследования было не разделение звуков как таковых, а аудио визуальное соответствие источников звука


      1. propell-ant
        05.09.2021 19:09

        Возможно, я рассуждаю по-диллетантски, но кажется что видеоряд нужен для классификации источников звука, для разделения как такового. То есть без видеоряда в обучающей выборке понадобилось бы предоставить соответствие между звуком и набором характеристик источника звука (автопогрузчик стоит или едет, корова жует или мычит, на гитаре играют или барабанят по ней пальцами) в текстовом виде. А здесь на видеоряде отрабатывает классификатор изображений, ему всё равно как называются объекты, главное что он оценивает величину различий (похоже-не похоже).


        1. kshmax Автор
          06.09.2021 10:37

          Да, идея как раз такая. Модель оценивает, что находится в кадре и на основе этой информации извлекает из звуковой смеси те звуки, которые, по мнению модели, издаются объектом на картинке. При этом в режиме применения модели такая "оценка" делается для разных участков видео и по объекту в этом участке модель решает, какую часть звуковой дорожки нужно взять, чтобы изолировать звук. Это как раз демонстрируется на рисунках с подписью "локализация звука": сетка 14x14 и каждая ячейка - небольшой участок кадра, в котором модель оценивает, что находится внутри и на основе этого выделяет звук из общей дорожки


  1. faxenoff
    03.09.2021 23:18

    А можно ли этим сделать ремастер Metallica?
    У них самих это не получается.


    1. kshmax Автор
      06.09.2021 10:41

      С помощью модели не получится повысить качество аудио. Модель во время разделения, скорее наоборот, может добавлять артефакты и "протечки", что, кстати, заметно на некоторых демках.

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