Skip to content

yrmint/ml-app-arch

Repository files navigation

Music genre classifier

License Python

FastAPI Pydantic Streamlit

PyTorch Hugging Face Scikit-learn Optuna

Docker Redis GitHub Actions uv pytest flake8

Автоматическая классификация музыкальных жанров с использованием алгоритмов машинного обучения

Масштабируемое веб-приложение, которое определяет вероятность принадлежности загружаемого музыкального трека к 10 музыкальным жанрам

About

Проект реализует классификацию музыкальных жанров. Приложение принимает аудиофайл и с помощью предобученной 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

Установка и запуск

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

1. Клонирование репозитория

git clone https://github.com/yrmint/ml-app-arch.git

2. Установка зависимостей

uv python install 3.11
uv sync --all-groups

3. Запуск через Docker (рекомендованный способ)

docker compose up -d --scale worker=4

Количество воркеров для параллельной обработки запросов можно свободно менять

4. Запуск клиента

python -m frontend.start

Тестирование

Linting:

python -m flake8 .

Tests:

python -m pytest .

About

Project that implements music genre classification.

Resources

License

Contributing

Stars

1 star

Watchers

2 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors