- 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
,
но для получения более высоких результатов необходим углубленный подбор гиперпараметров.