Skip to content

Repository files navigation

Классификация марки и модели автомобиля по фотографии

Классификатор изображений на базе transfer learning (MobileNetV2), определяющий марку, модель и год выпуска автомобиля по фотографии — 27 классов (Acura TL Sedan 2012, Audi R8 Coupe 2012, BMW X6 SUV 2012 и др.).

Результат

Точность на тестовой выборке: 75% (2274 изображения, 27 классов). Метрика подтверждена дважды: в самом ноутбуке обучения (classification report) и независимым прогоном сохранённой модели на полном тестовом наборе (evaluate_saved_model.py).

Для сравнения: случайное угадывание среди 27 классов дало бы ~3.7%.

Датасет

Car Brand Recognition (Kaggle) — 27 марок/моделей автомобилей, ~13 300 изображений:

  • train: 8854
  • validation: 2207
  • test: 2274

Датасет не включён в репозиторий — скачайте его с Kaggle и распакуйте в standford_beta/{train,test}/<класс>/*.jpg.

Подход

Итоговое решение — MobileNetV2 (предобучена на ImageNet) с дообученной "головой" и последующим fine-tuning:

  1. Этап 1 — обучение головы. Базовая модель заморожена. Поверх неё: GlobalAveragePooling2D → BatchNorm → Dropout(0.3) → Dense(256, relu) → BatchNorm → Dropout(0.3) → Dense(27, softmax). Аугментация обучающей выборки (повороты, сдвиги, зум, отражение). 20 эпох с ReduceLROnPlateau и EarlyStopping, val_accuracy ~71%.
  2. Этап 2 — fine-tuning. Размораживаются все слои MobileNetV2, кроме первых 100 (низкоуровневые признаки — края, текстуры). Дообучение 10 эпох с очень малым learning rate (1e-5). Val_accuracy выросла до ~76%.
  3. Финальная оценка на отложенной тестовой выборке — 75% accuracy, полный classification report по каждой из 27 марок.

Ноутбук: car_brand_classifier_mobilenetv2.ipynb.

Ранний эксперимент: CNN с нуля

Перед тем как перейти на transfer learning, была опробована собственная свёрточная сеть, обученная с нуля (4 блока Conv2D + BatchNorm + MaxPooling, ~1.7M параметров) — см. early_experiment_custom_cnn.ipynb. За 20 эпох она дала лишь 37.77% точности. Переход на предобученную MobileNetV2 и fine-tuning почти удвоил точность — наглядная демонстрация того, когда и зачем применять transfer learning вместо обучения с нуля на ограниченном датасете.

Файлы

  • car_brand_classifier_mobilenetv2.ipynb — основной ноутбук: обучение, fine-tuning, оценка
  • early_experiment_custom_cnn.ipynb — ранний эксперимент (CNN с нуля, 37.77%)
  • evaluate_saved_model.py — независимая проверка сохранённой модели на тестовой выборке
  • car_brand_model.keras, class_names.pkl — обученная модель и список классов

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

pip install -r requirements.txt
# скачать датасет с Kaggle в standford_beta/
python evaluate_saved_model.py

Стек

Python, TensorFlow / Keras, MobileNetV2 (ImageNet), ImageDataGenerator, scikit-learn (classification_report, confusion_matrix)

About

CNN transfer learning (MobileNetV2) для классификации 27 марок автомобилей по фото — 75% accuracy

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages