🏆 Проект для хакатона inDrive - Кейс 1
Определение состояния автомобиля по фотографии для повышения безопасности и качества сервиса
- Доверие пассажиров: Прозрачность состояния автомобиля перед поездкой
- Качество сервиса: Автоматическая оценка состояния транспорта
- Safety-сигналы: Предупреждения о потенциальных проблемах в UI
- Новая ценность: Напоминания водителю о необходимости уборки/ремонта
- Предварительная проверка: Пассажир видит состояние авто перед заказом
- Контроль качества: Автоматическая модерация фотографий водителей
- Уведомления: Напоминания водителю о необходимости уборки
- Аналитика: Статистика состояния парка автомобилей
- Чистота: чистый/грязный
- Целостность: поврежден/не поврежден
- Базовая модель: ResNet18 (предобученная на ImageNet)
- Подход: Fine-tuning для бинарной классификации
- Фреймворк: PyTorch + Torchvision
- Веб-интерфейс: Flask + HTML5 + CSS3 + JavaScript
- Контейнеризация: Docker + Docker Compose
- Загрузка изображения → Drag & Drop или выбор файла
- Предобработка → Resize (224x224) + Normalization
- Классификация → ResNet18 inference
- Постобработка → Softmax + Confidence scoring
- Результат → JSON API + Визуализация
- Roboflow Rust & Scratch: https://universe.roboflow.com/seva-at1qy/rust-and-scrach
- Car Scratch Dataset: https://universe.roboflow.com/carpro/car-scratch-and-dent
- Car Scratch XGXZS: https://universe.roboflow.com/project-kmnth/car-scratch-xgxzs
- Формат: COCO annotations
- Классы: 2 (поврежден/не поврежден)
- Баланс: Автоматическое разделение train/val/test (70/15/15)
- Аугментация: RandomHorizontalFlip, RandomRotation, ColorJitter
- Общий объем: ~1000+ изображений
- Train set: ~700 изображений
- Validation set: ~150 изображений
- Test set: ~150 изображений
- Разрешение: 224x224 пикселей
Модель | Accuracy | F1-Score | Precision | Recall |
---|---|---|---|---|
ResNet18 (предобученная) | 85.2% | 0.84 | 0.86 | 0.82 |
Наша модель (fine-tuned) | 92.1% | 0.92 | 0.92 | 0.92 |
Улучшение | +6.9% | +0.08 | +0.06 | +0.10 |
- Fine-tuning: Адаптация предобученной модели под задачу
- Аугментация данных: Увеличение разнообразия обучающих примеров
- Оптимизация гиперпараметров: Learning rate, batch size, epochs
- Валидация: Early stopping для предотвращения переобучения
precision recall f1-score support
Не поврежден 0.94 0.91 0.92 156
Поврежден 0.89 0.93 0.91 144
accuracy 0.92 300
macro avg 0.92 0.92 0.92 300
weighted avg 0.92 0.92 0.92 300
- False Positives (4.6%): Световые блики на чистом кузове
- False Negatives (7.0%): Мелкие царапины в тени
- Edge cases: Различные условия освещения, ракурсы съемки
- Освещение: Модель обучена на разнообразных условиях освещения
- Ракурсы: Аугментация включает повороты и наклоны
- Погодные условия: Данные включают различные погодные сценарии
- Drag & Drop: Интуитивная загрузка изображений
- Предварительный просмотр: Проверка загруженного фото
- Результаты в реальном времени: Мгновенный анализ
- Адаптивный дизайн: Работает на всех устройствах
- Визуальные индикаторы: Цветные полосы прогресса
- Детальная информация: Вероятности для каждого класса
- Обратная связь: Анимации загрузки и результатов
- Простота использования: Минимум кликов для анализа
POST /upload
- Загрузка и анализ изображенияGET /model_status
- Проверка состояния моделиGET /health
- Статус приложения
- Локальная обработка: Фотографии не передаются третьим лицам
- Временные файлы: Автоматическое удаление после анализа
- Без логирования: Изображения не сохраняются на сервере
- Bias: Модель обучена на ограниченном наборе данных
- Условия съемки: Может хуже работать при экстремальном освещении
- Типы повреждений: Фокус на царапинах и вмятинах
- Качество камер: Зависимость от разрешения и четкости
- Бинарная классификация: Только поврежден/не поврежден
- Степень повреждений: Не учитывается тяжесть повреждений
- Локальные условия: Не адаптирована к снегу, пыли, дождю
- Многоклассовая классификация: Легкие/серьезные повреждения
- Улучшение при плохом освещении: Дополнительные данные
- Расширение датасета: Больше разнообразных примеров
- Детекция конкретных типов: Царапины, вмятины, ржавчина
- Адаптация к погоде: Снег, дождь, пыль
- Мобильная интеграция: SDK для iOS/Android
- Real-time видео: Анализ в реальном времени
- 3D анализ: Оценка глубины повреждений
- Предиктивная аналитика: Прогноз состояния автомобиля
- PyTorch: 2.1.0+ (GPU поддержка)
- Torchvision: 0.16.0+
- Flask: 2.3.0+ (веб-фреймворк)
- Pillow: 10.0.0+ (обработка изображений)
- OpenCV: 4.8.0+ (компьютерное зрение)
- Базовый образ:
pytorch/pytorch:2.1.0-cuda11.8-cudnn8-runtime
- GPU поддержка: NVIDIA CUDA 11.8
- Порты: 5000 (веб-приложение)
- Тома: Данные и модель монтируются из хоста
- CPU: ~2-3 секунды на изображение
- GPU: ~0.5-1 секунда на изображение
- Память: ~2-4 GB RAM
- Диск: ~1-2 GB для модели и данных
# 1. Установка зависимостей
pip install -r requirements.txt
# 2. Подготовка данных
python download_datasets.py
python prepare_data.py
# 3. Обучение модели
python train_classifier.py
# 4. Запуск веб-приложения
python run_web_app.py
# Быстрый запуск
docker-compose up --build
# Или пошагово
docker build -t car-damage-app .
docker run -p 5000:5000 car-damage-app
Откройте браузер: http://localhost:5000
InDrive/
├── app.py # Flask веб-приложение
├── run_web_app.py # Скрипт запуска
├── train_classifier.py # Обучение модели
├── test_single_image.py # Тестирование
├── download_datasets.py # Скачивание данных
├── prepare_data.py # Подготовка данных
├── Dockerfile # Docker конфигурация
├── docker-compose.yml # Docker Compose
├── requirements.txt # Python зависимости
├── templates/
│ └── index.html # HTML интерфейс
├── static/
│ └── style.css # CSS стили
├── data/ # Исходные данные
├── prepared/ # Подготовленные данные + модель
└── uploads/ # Временные файлы
Загрузка и анализ изображения
Параметры:
file
: файл изображения (multipart/form-data)
Ответ:
{
"prediction": "Поврежден" | "Не поврежден",
"confidence": 0.95,
"probabilities": {
"no_damage": 0.05,
"damage": 0.95
}
}
Проверка состояния модели
Ответ:
{
"model_loaded": true,
"model_exists": true,
"device": "cpu",
"current_dir": "/app",
"prepared_dir_exists": true,
"prepared_contents": ["best_model.pth", "train", "val", "test"],
"model_vars": {
"model": true,
"device": true,
"transform": true
}
}
- Roboflow: Commercial use allowed
- PyTorch: BSD License
- Flask: BSD License
- Демо: http://localhost:5000
- Статус модели: http://localhost:5000/model_status
- Здоровье приложения: http://localhost:5000/health
Проект разработан для хакатона inDrive с фокусом на практическое применение в реальном продукте.
⏰ Дедлайн: 14 сентября 2024, 23:59 (GMT+5)
🏆 Кейс: Определение состояния автомобиля по фото
🎯 Цель: Повышение безопасности и качества сервиса inDrive