Skip to content

manasbegaliev777-dev/gtzan-genre-classification

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 

Repository files navigation

Классификация музыкальных жанров: сравнение MLP, CNN и EfficientNet B0

Сессионное задание. Курс «Продвинутые методы глубокого обучения», Skillfactory / МИФИ, 2026.


О проекте

В этом проекте я сравниваю три подхода к классификации музыкальных жанров по спектрограммам на датасете GTZAN:

  • MLP — базовая полносвязная сеть (результат из практики курса)
  • CNN — собственная свёрточная нейронная сеть, построенная с нуля
  • EfficientNet B0 — transfer learning с предобученными весами ImageNet

Результаты

Модель Val Accuracy Порог задания
MLP (из практики курса) 30.46%
CNN (Задание 1) 67.50% ≥ 50% ✅
EfficientNet B0 (Задание 2) 66.00% ≥ 65% ✅

Наилучший результат показала CNN (67.50%), незначительно опередив EfficientNet B0 (66.00%). Это объясняется спецификой датасета: спектрограммы существенно отличаются от фотографий реального мира, на которых обучалась EfficientNet, поэтому предобученные признаки ImageNet дают меньший выигрыш, чем обычно. Собственная CNN обучалась непосредственно на спектрограммах и выучила специфичные для задачи паттерны.


Среда и технологии

Параметр Значение
Фреймворк PyTorch
Среда выполнения Google Colab
GPU Tesla T4 (15.6 GB VRAM)
Датасет GTZAN Dataset — Music Genre Classification
Метрика Accuracy (val)

Датасет

GTZAN Dataset — Music Genre Classification

  • 999 изображений спектрограмм
  • 10 жанров: blues, classical, country, disco, hiphop, jazz, metal, pop, reggae, rock
  • Разбивка: 80% train (799) / 20% val (200)
  • Источник: Kaggle — andradaolteanu/gtzan-dataset-music-genre-classification

Задание 1: CNN с нуля

Архитектура (строго по условию задания):

Conv2d(3→32) → ReLU → MaxPool2d
Conv2d(32→64) → ReLU → MaxPool2d
Conv2d(64→128) → ReLU → MaxPool2d
Flatten
Linear(32768→256) → ReLU → Dropout(0.3)
Linear(256→10)

Параметры обучения:

  • Вход: 128×128
  • Оптимизатор: AdamW (lr=1e-3, weight_decay=1e-4)
  • Эпохи: 50

Динамика обучения (ключевые эпохи):

Эпоха Train Loss Train Acc Val Loss Val Acc
1 2.3104 14.89% 2.1692 18.00%
10 1.1886 58.20% 1.3207 55.00%
25 0.1953 94.24% 1.3111 65.00%
35 0.0511 99.12% 1.7507 67.50%
50 0.0325 99.12% 2.1090 66.00%

Лучший Val Accuracy: 67.50% (эпоха 35) — выше порога ≥50%


Задание 2: Transfer Learning — EfficientNet B0

Подход:

  • Загружена EfficientNet B0 с весами ImageNet (IMAGENET1K_V1)
  • Все слои заморожены (requires_grad = False)
  • Заменён классификатор: Linear(1280→10) + Dropout(0.3)
  • Обучаемых параметров: 12,810 из 4,020,358

Аугментация данных:

  • RandomHorizontalFlip
  • RandomRotation(10)

Параметры обучения:

  • Вход: 224×224
  • Оптимизатор: Adam (lr=3e-4)
  • Эпохи: 50
  • Scheduler: ReduceLROnPlateau (factor=0.7, patience=5)

Динамика обучения (ключевые эпохи):

Эпоха Train Loss Train Acc Val Loss Val Acc LR
1 2.2795 13.39% 2.2221 22.50% 3e-4
10 1.5488 53.32% 1.6690 58.50% 3e-4
20 1.3381 58.82% 1.4518 63.00% 3e-4
35 1.1825 62.70% 1.3036 65.00% 3e-4
40 1.1923 60.45% 1.2823 66.00% 3e-4
50 1.1042 66.46% 1.2669 64.50% 3e-4

Лучший Val Accuracy: 66.00% (эпоха 40) — выше порога ≥65%


Задание 3: Выводы

По итогам обучения наилучший результат показала собственная CNN (67.50%), незначительно опередив EfficientNet B0 (66.00%). Это объясняется ограниченным размером датасета GTZAN: при transfer learning обучается только классификатор, и предобученные признаки ImageNet не всегда оптимальны для спектрограмм, которые существенно отличаются от фотографий реального мира, на которых обучалась EfficientNet.

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

Базовая MLP ожидаемо показала наименьшую точность (30.46%): не имея пространственной инвариантности, она обрабатывает изображение как плоский вектор пикселей и не способна улавливать структурные закономерности спектрограмм.

Переход от MLP к CNN даёт значительный прирост точности за счёт свёрточных операций, а transfer learning с EfficientNet B0 демонстрирует сопоставимый результат при меньшем времени обучения, что подтверждает его практическую ценность на задачах с ограниченными данными.


Структура репозитория

gtzan-genre-classification/
├── README.md
└── GTZAN_Music_Genre_Classification_PJ_Begaliev_Manas.ipynb

Как запустить

  1. Открыть Google Colab
  2. File → Upload notebook → загрузить .ipynb
  3. Runtime → Change runtime type → T4 GPU
  4. Runtime → Run all
  5. Ввести Kaggle username и API key при запросе

Автор

Бегали уулу Манас
Курс: Машинное обучение, 2 семестр — Продвинутые методы глубокого обучения
Skillfactory / МИФИ, 2026

About

Music genre classification using MLP, CNN and EfficientNet B0 on GTZAN spectrograms. PyTorch, Google Colab.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors