Автоматическая классификация музыкальных жанров с использованием алгоритмов машинного обучения
Масштабируемое веб-приложение, которое определяет вероятность принадлежности загружаемого музыкального трека к 10 музыкальным жанрам
Проект реализует классификацию музыкальных жанров. Приложение принимает аудиофайл и с помощью предобученной DL-модели прогнозирует, к какому жанру он относится.
- Загрузка аудиофайлов через клиентский интерфейс.
- Асинхронная обработка аудио с использованием RabbitMQ.
- Поддержка трансформерной предобученной модели HuggingFace: dima806/music_genres_classification, а также легковесной кастомной CNN (по умолчанию).
- Легкое горизонтальное масштабирование через число воркеров
- Достигнут F1-score = 0.82 на тестовой выборке(без утечки данных, свойственной решениям этой задачи)
- Вес модели сокращен с 380 МБ (baseline transformer) до 2 МБ за счет перехода к кастомной PyTorch CNN модели без потери точности
- Настроен базовый пайплайн инференса, обернутый в Docker.
- Язык: Python
- Пакетный менеджер: uv
- Контейнеризация: Docker
- ML / AI: HuggingFace Transformers, PyTorch, Librosa, Scikit-learn, Optuna-dashboard
- Backend: FastApi, Uvicorn, Pydantic, RabbitMQ, Redis
- Frontend: Streamlit
- Код-стайл и CI: Flake8, GitHub Actions
git clone https://github.com/yrmint/ml-app-arch.git
uv python install 3.11
uv sync --all-groups
docker compose up -d --scale worker=4
Количество воркеров для параллельной обработки запросов можно свободно менять
python -m frontend.start
Linting:
python -m flake8 .
Tests:
python -m pytest .