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

Объем:

В системе классической музыки хиндустани более 100 раг. Чтобы сделать это простым, а также справиться с ограниченными ограничениями пространства и вычислений, я преобразовал это в задачу бинарной классификации двух популярных раг — Яман и Бхайрави. , SVM(rbf) и XGBoost.
В DL были опробованы DNN и LSTM.

Приложение:

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

Сбор данных:

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

Например, в базовой ноте Raga Yaman «Sa» может быть где угодно в частотном диапазоне. Это может быть частота 300 Гц, 440 Гц и т. д. Кроме того, женский голос будет иметь более высокие частоты, связанные с ним, как и разные инструменты.
Два разных исполнения одной и той же раги одним и тем же исполнителем также будут иметь разные мелодические нюансы!

Чтобы таким образом обобщить наше решение, данные были собраны таким образом, чтобы включить производительность:

  1. Разные исполнители мужского пола
  2. Разные певицы
  3. Разные инструменты (ситар, сарод, флейта)

Подготовка данных:

Все аудиофайлы были преобразованы в формат wav, чтобы их можно было загрузить в python с помощью модуля librosa. Аудиофайлы были преобразованы в сэмплы равной длины 10 секунд (при условии, что 10 секунд будет достаточно для идентификации раги) с прыжком в 5 секунд. то есть 20-секундный аудиофайл будет генерировать 3 семпла: 0–10 с, 5–15 с и 10–20 с.

Извлечение аудиофункций:

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

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

При частоте выборки 22050 (т. е. 22050 выборок в секунду) наша 10-секундная выборка содержит 220500 данных временного ряда. Таким образом, для каждой 10-секундной строки у нас есть 220500 функций. Ни классификаторы ML, ни DL не могли обучаться на этом необработанном аудиосигнале.

2. Преобразование Фурье и спектрограмма: поскольку рага — это ограниченная игра относительных частот, интуиция подсказывает, что было бы лучше иметь наши особенности в частотной области. Преобразование Фурье аудиосерии во временной области дает нам частоты и их величины в этом конкретном временном интервале.
Спектрограмма представляет собой преобразование Фурье небольших временных окон (обычно 20–40 мс), расположенных в хронологическом порядке. Это дает нам информацию о частоте, присутствующую в аудиовходе, и о том, как она меняется со временем. Ниже приведен пример спектрограммы с его вики-страницы.

3. MFCC. Еще одна популярная аудиофункция, обнаруженная в исследованиях и приложениях, — это MFCC (Mel Frequency Cepstral Co-efficient). Хотя это может быть полезно в других приложениях для обработки звука, таких как определение жанра, распознавание речи и т. д., это не помогло для нашего текущего проекта. Ниже приведено сравнение MFCC для обоих классов, которые, как видно, не различимы. Модели не могут быть обучены удовлетворительно.

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

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

5. Подсчет основных частот. Недостаток подхода с использованием «основных» частот заключается в том, что в нем по-прежнему отсутствует какая-либо информация об относительных частотах. т. е. у нас есть функции как [398.36, 10.76, 549.09, 549.09,
538.33, 527.56, 527.56347656, 1055.12695312,…], но нет связи между 398.36 и 549.09 и т. д.
Я пробовал новая функция в котором перечислены отсчеты основных частот для списка всех доступных частот после преобразования Фурье.

Обе модели ML и DNN смогли очень хорошо работать с вышеуказанной функцией.

Настройка модели DNN:

Были опробованы различные варианты приведенных ниже параметров, чтобы получить оптимальную производительность.

  1. Оптимизатор (SGD/Адам)
  2. Скорость обучения (от 0,01 до 0,00001)
  3. Размер пакета (от 8 до 128)
  4. Количество глубоких слоев (от 2 до 6)
  5. Инициализаторы ядра (RandomUniform/HeUnifrom)
  6. Регуляризация (L1/L2)
  7. Выпадающие слои

Полученные результаты:

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

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

Будущая область:

Имея больше места и вычислительной мощности, этот подход можно опробовать для классификации большего количества раг (например, 20) с помощью сложных каскадных моделей CNN/LSTM + DNN.
Подпишитесь на https://www.linkedin. com/in/shreyas-divan-a209705a/ для получения обновлений.

Код:
https://github.com/shreyasdivan/RagaIdentification/blob/main/RI-max-counts-final.ipynb

Использованная литература:

  1. https://www.linkedin.com/pulse/identifying-ragas-carnatic-music-machine-learning-sridhar-ravikoti/
  2. https://www.youtube.com/watch?v=iCwMQJnKk2c&list=PL-wATfeyAMNqIee7cH3q1bh4QJFAaeNv0
  3. https://medium.com/@blogsupport/deep-learning-based-raga-classification-in-carnatic-music-e499018ea1b7

Источники изображений-
а. https://www.saregama.com/apps/classical
б. https://www.facebook.com/HCMAEOFFICIAL/photos/-raag-chakra-or-samay-chakra-of-ragas-hindustaniclassicalmusicindianclassicalmus/2204697426420906/