В статье рассматривается построение программного комплекса для генерации звуков барабанов с использованием GAN сетей. Программный комплекс работает на клиент-сервер архитектуре и использует нейронные сети WaveGAN для генерации звуков. Результаты, полученные в данной статье, могут успешно применяться в задачах саунд-дизайна и звукового оформления как реальных, так и виртуальных пространств.
Ключевые слова: программный комплекс, генерация звуков, нейронные сети, GAN сети.
Каждый день нашей жизни мы сталкиваемся со звуками, которые слышим в окружающем нас пространстве. Используя научные открытия и передовые технологии XX века, стало возможно записать эти звуки для того, чтобы переиспользовать этот материал, например, для звукового оформления реальных и виртуальных пространств. Звуковое оформление встречается во многих сферах, начиная с киноиндустрии и театра, заканчивая производством компьютерных игр.
Относительно новым подходом к созданию звуков является использование предобученных нейронных сетей для генерации аудио. С их помощью можно извлекать закономерности, которые присутствуют в определенных инструментах, голосах или произвольно выбранном множестве звуков, и учитывая их, генерировать новые аудиофрагменты, которые должны быть похожи на звуки из этого множества. Для обучения таких сетей требуется достаточно большое количество записанных или синтезированных звуков, и можно считать, что этот метод базируется на подходах записи и синтеза, дополняя и расширяя их возможности.
В данной статье рассматривается разработка программного комплекса для генерации звуков различных категорий, в качестве которых были выбраны звуки барабанной установки. Большинство барабанных установок состоит из нескольких отдельных барабанов, каждый из которых имеет свой уникальный тембр и частотный диапазон, и играет определенный ритмический рисунок. Используя разные громкости и длительности для разных барабанов, достигается разборчивость и отсутствие частотных конфликтов среди нескольких инструментов.
Для обучения модели использовался авторский датасет барабанных звуков, собранный за годы профильной музыкальной деятельности, состоящий из следующих категорий: kick (бас барабан), snare (малый или рабочий барабан), closed hi-hat (закрытый Хай-Хэт), clap (хлопок). При этом для каждой категории звуков обучается отдельная нейронная сеть с необходимыми для этого параметрами.
Рис. 1: Составляющие барабанной установки
После успешной генерации для каждого аудиофайла реализуется своя постобработка, и из полученных для каждого барабана по отдельности сэмплов можно собрать барабанную партию, прописав для них ритмический паттерн. Генерируя звуки важно правильно передавать их тембр, анализируя закономерности при обучении выбранной модели и минимизируя при этом искажения, возникающие в результате генерации. Одним из практических результатов данной статьи является получение звуков с необходимым для производства музыкального контента качеством, которое обеспечивается высокой частотой дискретизации, отсутствием артефактов и шумов.
Интеллектуальный анализ цифровых аудио сигналов отличается от анализа изображений, для которых изначально были разработаны многие архитектуры нейронных сетей, и при их построении для задачи обработки звука важно учитывать эти отличия. Одним из способов иллюстрации различий между звуками и изображениями является анализ главных компонент.
Рис. 2: Сравнение главных компонент изображений и звуков [1]
На рисунке 2 изображены главные компоненты нескольких изображений и нарезки речи. В то время как основные компоненты изображений обычно захватывают характеристики интенсивности, градиента и краев объектов, компоненты звуков образуют периодические паттерны, которые определяются частотами входящими в состав звука. Как правило, аудио сигналы с большей вероятностью демонстрируют периодичность, чем изображения.
Таким образом, корреляция между большими промежутками отсчетов является регулярным явлением в аудио. Например, для формы волны синусоиды 440 Гц (нота A4), при дискретизации с частотой 16 кГц для завершения одного цикла требуется более 36 отсчетов. Это говорит о том, что для обработки звуковых данных необходимы модели с большими восприимчивыми слоями.
Для построения программного комплекса были выбраны сети WaveGAN и SpecGAN ввиду наличия возможности генерации звуков в режиме реального времени (real-time), и специализации на генерации коротких звуков, что подходит под специфику рассматриваемого датасета. Наряду с ними рассматривались сети WaveNet и DDSP, но они не подошли под разработку программного комплекса ввиду различных ограничений по генерации и их возможностям [2], [3].
WaveGAN — созданная Chris Donahue и Julian McAuley GAN сеть, базирующаяся на архитектуре Deep Convolutional Generative Adversarial Network (DCGAN), используемой в основном для обучения на изображениях.
Целью обучения GAN сетей является отображение скрытого вектора z ∈ Z в пространство тренировочных данных X. В первоначальном варианте генератор G: Z =⇒ X противопоставлялся дискриминатору D: X =⇒ [0,1] в игре с двумя игроками с использованием минимакс стратегии [4]. Целью обучения генератора является минимизация приведённой ниже функции, а целью дискриминатора ее максимизация:
V (D, G) = Ex∼PX [log D(x)] + Ez∼PZ [log (1 − D(G(z)))]
Другими словами, дискриминатор обучается для того, чтобы отличать настоящие данные от сгенерированных, в то время как генератор пытается подделать сгенерированные данные максимально похоже на настоящие. Предложенный для обучения алгоритм минимизирует дивергенцию Йенсена-Шеннона между распределениями исходных данных PX и сгенерированных PG [4]. В первоначальной формулировке GAN сеть сложно обучалась и показывала нестабильные результаты. Позже подход был усовершенствован, и вместо дивергенции Йенсена-Шеннона в [5] была предложена минимизация более гладкого расстояния Вассерштейна:
W (PX, PG) = sup (||f ||L ≤1) Ex∼PX [f(x)] −Ex∼PG [f(x)],
где ||f||L ≤ 1: X =⇒ R семейство Липшицевых функций первого порядка.
Для минимизации этого расстояния был предложен алгоритм WGAN, который минимизирует функцию похожую на первоначальную:
VWGAN(PX, PG) = Ex∼PX [Dw(x)] + Ez∼PZ [Dw(G(z))]
Но в этой формулировке Dw (дискриминатор) обучается не отличать сгенерированные примеры от настоящих, а вместо этого обучается как функция, помогающая вычислять расстояние Вассерштейна. Используя идею штрафа за отклонения градиента от единичной нормы (gradient penalty), была имплементирована следующая версия сети WGAN-GP, которой получалось обучатся в тех случаях, когда остальным архитектурам GAN сетей этого не удавалось.
Генератор DCGAN использует транспонированную свертку для того, чтобы повышать размерность небольших матриц скрытых признаков в изображение высокой четкости (upsampling). В отличии от DCGAN в WaveGAN вместо свертки 5х5 используется одномерная свертка размерности 25х1, и размерность upsampling’а была увеличена в два раза [1].
Дискриминатор использует тот же вид свертки, что и генератор, только вместо увеличенного в два раза upsampling’а используется увеличенный в два раза шаг свертки. В результате проделанной замены сеть имеет такое же количество параметров и выходных размерностей, что и DCGAN.
Сеть DCGAN имеет выход 64х64, что в одномерном случае равно 4096 сэмплам, поэтому в WaveGAN был добавлен еще один слой превращающий выход из 4096 в 16384 сэмплов, что есть чуть больше, чем одна секунда аудио при частоте дискретизации 16 кГц, чего вполне достаточно для коротких звуков.
Основные модификации, которые были сделаны над сетью DCGAN для работы со звуком:
— Двумерная свертка спрямлена в одномерную, то есть 5x5 свертка из DCGAN стала одномерной сверткой с 25 компонентами.
— Увеличен шаг для всех сверток, т. е. шаг 2х2 в двумерном виде стал шагом 4 в одномерном.
— Из генератора и дискриминатора убрана батч нормализация.
— Обучение производится, используя алгоритм WGAN-GP.
Модель SpecGAN является альтернативой модели WaveGAN, которая обучается на спектрограммах вместо волновых форм. В отличии от 16384 сэмплов в случае WaveGAN, предложенная модель генерирует двумерные 128x128 спектрограммы, которые можно трактовать, как изображения [1].
Чтобы преобразовать звук в подходящие спектрограммы, выполняется быстрое преобразование Фурье с окном 16 мс и шагом 8 мс, в результате получается 128 интервалов частот линейно разнесенных от 0 до 8 кГц. Далее амплитуда спектра логарифмируется для соответствия человеческому восприятию звука и каждый из интервалов нормализуется.
Чтобы отобразить результирующие сгенерированные спектрограммы в виде аудио сигналов, сначала инвертируются шаги предварительной обработки спектрограммы, описанные выше, в результате чего получаем линейно-амплитудную частотную характеристику. Затем используется итерационный алгоритм Гриффина-Лима с 16 итерациями для оценки фазы и создания 16384 аудиосэмплов.
Сеть WaveGAN уже на первых тестах показывала результаты лучше, чем SpecGAN, поэтому в целях экономии вычислительных ресурсов 4 категории датасета было обучено на WaveGAN (для использования в программном комплексе) и только одна на SpecGAN для сравнения качества генерации между сетями.
Чаще всего нейронные сети обучают на частоте дискретизации 16 кГц, так как на это требуется меньшие вычислительные ресурсы, из-за чего теряется часть частот (выше 8 кГц), и ухудшается возможное качество аудио. Однако в данной статье рассматривается генерация звуков на частоте 44.1 кГц в секунду, что является студийным стандартом.
В условиях ограниченных вычислительных ресурсов обучение каждой сети велось разное количество итераций, которое определялось таким образом, чтобы качество звуков на выходе сети являлось удовлетворительным. Таким образом для звука бас-барабана выполнилось 50000 итераций, для малого барабана 6800 итераций, для закрытой тарелки 5750 итераций, и для звука хлопка выполнилось 10500 тысяч итераций. Вполне возможно, что условии наличия больших вычислительных мощностей качество генерации звуков некоторых категорий может возрасти.
Для того чтобы размерность коротких звуков совпадала с размером входных данных добавлена команда ––data_pad_end, которая заполняет недостающие места нулями. В случае, если какой-либо звук превышает размерность входных данных используется команда ––data_first_slice, которая берет только первую часть звука, которая совпадает со входным слоем.
Анализ качества генерации аудио сложно провести с помощью каких- либо дополнительных метрик, поскольку метрики, приведенные в различных статьях, не являются актуальными применимо к данной̆ задаче. В связи с этим анализ результатов производился с помощью экспертной оценки.
Для вынесения оценки было опрошено 5 экспертов из музыкальной индустрии, предметные области которых включают: музыкальное продюсирование, саунд дизайн и звукорежиссуру. Оценка складывалась из двух критериев: правильная передача тембра и отсутствие критичных для студийного использования искажений. Каждому эксперту предоставлялось 50 звуков для оценки, после чего эксперт ставит 1, если звук удовлетворяет критериям, или ставит 0, если он не удовлетворяет критериям, после этого оценки экспертов суммируются и делятся на их количество. Такой процесс происходит для каждого звука по отдельности и далее метрики усредняются по каждой категории.
Таблица 1
Результаты экспертной оценки
Для имплементирования возможности генерировать звуки без существенной нагрузки на персональный компьютер пользователя было принято решение разработать программный комплекс, базирующийся на клиент-серверной архитектуре [6].
Рис. 3: Клиент-серверная архитектура [6]
Для взаимодействия клиентской части с севером был разработан API на языке программирования python с использованием библиотек flask, и flask-restful [7], [8]. Данные библиотеки позволяют использовать готовые классы для обработки запросов, получения параметров и отправке ответов на эти запросы, что значительно ускоряет разработку серверной части.
При HTTP запросе к серверу из клиент-приложения указываются параметры для генерации: тип инструмента, метод и параметры интерполяции, если она необходима. При получении запроса происходит развертывание чекпоинта требуемого инструмента, генерация звука моделью и последующая интерполяция выбранным методом с использованием переданных для нее параметров. Далее звук отправляется на приложение-клиент как ответ на запрос к серверу.
Клиентская часть данного программного комплекса реализована в среде программирования Max 8 с использованием Max/MSP библиотеки [9]. Выбор данной̆ среды объясняется тем, что с ее помощью можно разрабатывать плагины для цифровой рабочей станции Ableton Live [10].
В разработанной клиентской части приложения можно выбрать категорию инструмента, которую необходимо сгенерировать, включить или отключить сглаживание волновой формы. Также в программе реализовано визуальное отображение волновой формы звука.
Рис. 4. Интерфейс клиентской части программного комплекса
Для избавления от искажений в концах звуков применяется ADSR огибающая громкости, которую можно настроить с помощью ручек интерфейса (Attack, Decay, Sustain, Release) [11]. Скоростью воспроизведения звука можно управлять с помощью ручки Playback, это может быть полезно для изменения тона звука.
В приложении также предусмотрена возможность гибридной генерации, где нижняя часть спектра берется из сгенерированного звука, а верхняя часть спектра из звука входящего в датасет, частота перехода между ними регулируется ручкой Crossfade.
Таким образом был построен программный комплекс для генерации звуков барабанов с использованием нейронной сети WaveGAN и технологии server-sider рендеринга и постобработки звуков. С программным кодом и видеообзором данного сервиса можно ознакомится в репозитории: https://github.com/4antii/NDrum
Литература:
- Chris Donahue, Julian McAuley, Miller Puckette. ADVERSARIAL AUDIO SYNTHESIS. Published as a conference paper at ICLR 2019.
- Aaron van den Oord, Sander Dieleman and Heiga Zen. WaveNet: A Generative model for raw audio. Google DeepMind, 2016
- Jesse Engel, Lamtharn Hantrakul, Chenjie Gu, Adam Roberts. DDSP: Differentiable Digital Signal Processing. Published as a conference paper at ICLR 2020.
- Goodfellow, Ian J.; Pouget-Abadie, Jean; Mirza, Mehdi; Xu, Bing; Warde- Farley, David; Ozair, Sherjil; Courville, Aaron Bengio, Yoshua (2014), Generative Adversarial Networks. Universite de Montreal.
- Martin Arjovsky, Soumith Chintala, L ́eon Bottou. Wasserstein GAN. Facebook AI Research. 2017.
- Клиент-сервер Архитектура: https://habr.com/ru/post/495698/
- Библиотека Flask: https://flask.palletsprojects.com/en/2.0.x/
- Библиотека Flask-Restful: https://flask-restful.readthedocs.io/en/latest/
- Среда программирования Max: https://cycling74.com/products/max
- Цифровая рабочая станция Ableton Live: https://www.ableton.com/en/live/what-is-live/
- ADSR огибающая: https://jythonmusic.me/envelope/