Можете ли вы послушать песню и назвать ее жанр? Сколько секунд вам нужно, чтобы слушать?

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

Для любого проекта глубокого обучения вам нужны данные, их очень много. После небольшого исследования наборов музыкальных данных, которые предоставляют необработанные сигналы, я решил, что лучшим вариантом для моих целей является набор данных FMA (Free Music Archive). Он имеет значительное количество треков и исчерпывающие метаданные. Особые поздравления Микаэлю Дефферрарду и др. за его составление. Я решил использовать маленький набор данных на FMA для целей этого проекта.

Обзор высокого уровня

Помимо данных, песен и тегов, для создания классификатора Deep Learning вам понадобятся:

  • Я основываю свою архитектуру глубокого обучения на работе Дилемана.
  • Язык программирования Python.
  • Полезная библиотека для анализа звука librosa
  • и фреймворки глубокого обучения, TensorFlow + Keras

Как и большинство проектов машинного обучения, этот включает обучение, проверку, тестирование, визуализацию и выполнение интересного анализа для изучения поведения модели.

Что делать со всеми этими песнями?

Небольшой набор данных FMA содержит 8000 треков продолжительностью 30 секунд каждый. Жанры для этого набора данных включают хип-хоп, электронику, рок, инструментальную музыку, международную музыку, экспериментальную музыку, поп и фолк. Поскольку некоторые из этих жанров звучали неоднозначно, я решил сократить набор данных, чтобы рассмотреть только хип-хоп, электронику, рок и инструментальную музыку. Вы можете подумать, что этих данных недостаточно для обучения интересной модели. Более того, Сандер использовал миллион песен. Но есть уловка для увеличения количества данных в таком наборе данных, о котором я расскажу далее в этой статье.

Чтобы использовать информацию о темпоральности и содержании песен, я представил каждую из них в виде спектрограммы . спектрограмма - это пространственное, частотное и амплитудное представление. Обычно он используется для визуализации этих трех атрибутов сигнала.

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

Строго говоря, я использую представление mel-спектрограммы на основе журнала. Здесь librosa очень удобна, требуется 3 строки кода, чтобы преобразовать аудиосигнал в спектрограмму log-mel.

После того, как песни были преобразованы в наше полезное представление, логарифмические спектрограммы, трюк для увеличения данных состоит в том, чтобы разделить тридцать секунд на 10 фрагментов по 3 секунды каждый. Каждое окно песни будет помечено одним и тем же жанром оригинальных тридцати секунд. Если в песне был рок в качестве жанра, то все 10 окон, которые возникли в результате разделения, будут иметь рок в качестве жанра. Этот трюк дает в 10 раз больше данных, чем исходный набор данных.

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

Реализованная мной модель имеет архитектуру, аналогичную описанной Сандером в его сообщении:

  • Три слоя одномерного сверточного слоя + максимальное объединение
  • Объединенный уровень глобального среднего пула и глобального максимального пула по временному измерению.
  • Два слоя плотного слоя + выпадение
  • Наконец, слой Softmax для прогнозирования вероятностей классов.

В оригинальной работе Сандера вместо Softmax последний слой описан как:

Регрессия пытается предсказать скрытые представления из модели совместной фильтрации.

Обучение и производительность

Построив модель, я тренировал ее 10 эпох. Keras позволяет сохранить модель только в том случае, если метрика проверки улучшается с каждой эпохой, используя параметр callbacks. Таким образом, сохраняемая модель имеет лучшую производительность с точки зрения проверки, но также предотвращает ее переоснащение.

Оценка эффективности классификатора проводилась двумя способами. Единое окно и окна усреднения. Первый делается путем прогнозирования жанра каждого окна, а второй - путем усреднения прогнозов десяти окон каждой дорожки. Вот результаты одной из моделей, с которыми я экспериментировал.

+----------------+--------------------+---------------+
| evaluation     |       set          |     accuracy  |
+----------------+--------------------+---------------+
| single window  |     training       |      79%      |
| single window  |     validation     |      69%      |
| single window  |     test           |      70%      |
|   avg windows  |     training       |      84%      |
|   avg windows  |     validation     |      74%      |
|   avg windows  |     test           |      75%      |
+----------------+--------------------+---------------+

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

Кроме того, на случай, если вам было любопытно, вот матрица путаницы в прогнозах обучающего набора данных.

Чтобы лучше понять предыдущий рисунок, вот отображение жанров:
0 - Электронный, 1 - Хип-хоп, 2 - Инструментальный и 3 - Рок.

Учебная часть

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

Так что интересно сравнить активации, то есть преобразование трека после первого слоя, от жанра к жанру.

Хип-хоп против инструментальной музыки

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

Рок против электроники

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

Выводы

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

Возможные альтернативные проекты

Используя это как введение, вы можете подумать об альтернативных формулировках / проектах, касающихся анализа музыкального содержания:

  • Автокодировщики для кластеризации
  • Перенос музыкального стиля
  • Автоматическая музыкальная композиция

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

Удачного моделирования :)