/determining_music_genre_from_an_image

Determining the genre by the image of the cover of a music disc

Primary LanguageJupyter Notebook

Название проекта: Определение жанра по изображению обложки музыкального диска

Заказчик: самостоятельное исследование

Статус проекта: завершён

Описание рабочих файлов:

  • music_genres.ipynb - рабочая тетрадь с исследованиями, визуализациями и текстовыми описаниями
  • requirements.txt - список зависимостей, необходимых для работы проекта, а также их версии
  • research_class.py - файл, содержащий класс для проведения исследования
  • assets - директория с сохранёнными артефактами

Установка зависимостей и запуск проекта

git clone https://github.com/denis-42ds/determining_music_genre_from_an_image.git
cd determining_music_genre_from_an_image
pip install -r requirements.txt
jupyter lab

Описание проекта

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

Цель проекта

  • Необходимо разработать модель, которая определит жанр музыкального альбома по изображению его обложки

Метрики: Accuracy, Precision, Recall, F1

Дополнительные задачи

  • Кластеризация: исследовать, какие жанры лучше выделяются на фоне других, а какие – трудноразделимы.
  • API MusicBrainz: расширение датасета новыми изображениями. Можно расширить список жанров и использовать обратную сторону обложки.
  • OCR + NLP: извлечь текст из изображения и обогатить решение применением NLP.
  • Создание рекомендательной системы в миниатюре, опираясь на изображения.
  • Streamlit: оформить классификатор жанров или рекомендательную систему в виде веб-приложения.

Ход исследования

  • Ознакомление с данными;
  • предварительная обработка данных;
  • определение целевой метрики;
  • подготовка данных для baseline-модели;
  • создание baseline-модели;
  • расчёт метрик;
  • подготовка данных для нейронной сети;
  • обучение нейронной сети;
  • расчёт и сравнение метрик;
  • анализ финальной модели;
  • исследование/решение дополнительных задач;
  • подготовка отчёта по исследованию.

Основные используемые инструменты

  • python: pandas, numpy, seaborn, matplotlib, torch, torchvision, faiss, sklearn, fastai
  • postgresql
  • mlflow

Заключение

Отчёт по исследованию

Ознакомление с данными

  • данные прочитаны,
  • выведены несколько образцов изображений с метками;
  • проверен баланс классов;
  • выявлен факт принадлежности одного изображения к разным жанрам;
  • проверен размер изображений;

Предварительная обработка данных

  • получены эмбеддинги изображений при помощи ResNet18;

Определение целевой метрики

  • целевой метрикой выбрана accuracy,
    ввиду того, что её проще интерпретировать в данной задаче;

Создание baseline-модели

  • в качестве baseline принята модель faiss;
  • рассчитаны метрики: accuracy = 0.39;

Подготовка данных для нейронной сети

  • для подготовки данных использован загрузчик fastai.ImageDataLoaders.from_df;

Обучение нейронной сети

  • обучена нейронная сеть библиотеки fastai с различными комбинациями гиперпараметров;
  • лучший резальтат: accuracy = 0.66;

Расчет и сравнение метрик

  • дополнительно метрики получены с использованием SVM и кастомной модели из библиотеки torch;
  • лучший результат оказался у модели из библиотеки fastai;

Анализ финальной модели

  • определены наиболее точно определяемые моделью жанры из представленных: black_metal, classical, country;
  • самыми сложными для идентификации модели стали жанры: disco, jazz;
  • меньше всего некорректных жанров предсказывается для anime;
  • жанр, чаще других попадающий в некорректные предсказания: country

Дополнительно

  • поднята база данных PostgreSQL для хранения результатов;
  • для логирования моделей и артефактов использован сервис MLflow;
  • рекомендательная система, основанная на косинусном сходстве демонстрирует не очнь хорошие результаты;

Общий вывод: для выполнения поставленной задачи подходит нейронная сеть fastai,
но для получения более высоких результатов необходим углубленный подбор гиперпараметров.