Skip to content

Taglat/InDrive

Repository files navigation

InDrive - Анализ повреждений автомобилей

🏆 Проект для хакатона inDrive - Кейс 1
Определение состояния автомобиля по фотографии для повышения безопасности и качества сервиса

📋 Проблема и ценность для inDrive

🎯 Бизнес-ценность

  • Доверие пассажиров: Прозрачность состояния автомобиля перед поездкой
  • Качество сервиса: Автоматическая оценка состояния транспорта
  • Safety-сигналы: Предупреждения о потенциальных проблемах в UI
  • Новая ценность: Напоминания водителю о необходимости уборки/ремонта

🚗 Сценарии применения

  1. Предварительная проверка: Пассажир видит состояние авто перед заказом
  2. Контроль качества: Автоматическая модерация фотографий водителей
  3. Уведомления: Напоминания водителю о необходимости уборки
  4. Аналитика: Статистика состояния парка автомобилей

🧠 Решение и архитектура

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

  • Чистота: чистый/грязный
  • Целостность: поврежден/не поврежден

🏗️ Техническая архитектура

  • Базовая модель: ResNet18 (предобученная на ImageNet)
  • Подход: Fine-tuning для бинарной классификации
  • Фреймворк: PyTorch + Torchvision
  • Веб-интерфейс: Flask + HTML5 + CSS3 + JavaScript
  • Контейнеризация: Docker + Docker Compose

📊 Pipeline обработки

  1. Загрузка изображения → Drag & Drop или выбор файла
  2. Предобработка → Resize (224x224) + Normalization
  3. Классификация → ResNet18 inference
  4. Постобработка → Softmax + Confidence scoring
  5. Результат → JSON API + Визуализация

📈 Данные и разметка

📚 Источники данных

🏷️ Качество разметки

  • Формат: COCO annotations
  • Классы: 2 (поврежден/не поврежден)
  • Баланс: Автоматическое разделение train/val/test (70/15/15)
  • Аугментация: RandomHorizontalFlip, RandomRotation, ColorJitter

📊 Статистика данных

  • Общий объем: ~1000+ изображений
  • Train set: ~700 изображений
  • Validation set: ~150 изображений
  • Test set: ~150 изображений
  • Разрешение: 224x224 пикселей

🎯 Baseline и улучшения

📊 Baseline сравнение

Модель 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

🚀 Ключевые улучшения

  1. Fine-tuning: Адаптация предобученной модели под задачу
  2. Аугментация данных: Увеличение разнообразия обучающих примеров
  3. Оптимизация гиперпараметров: Learning rate, batch size, epochs
  4. Валидация: 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: Различные условия освещения, ракурсы съемки

🌟 Обработка сложных случаев

  • Освещение: Модель обучена на разнообразных условиях освещения
  • Ракурсы: Аугментация включает повороты и наклоны
  • Погодные условия: Данные включают различные погодные сценарии

🎨 Демо и UX

💻 Веб-интерфейс

  • Drag & Drop: Интуитивная загрузка изображений
  • Предварительный просмотр: Проверка загруженного фото
  • Результаты в реальном времени: Мгновенный анализ
  • Адаптивный дизайн: Работает на всех устройствах

📱 UX особенности

  • Визуальные индикаторы: Цветные полосы прогресса
  • Детальная информация: Вероятности для каждого класса
  • Обратная связь: Анимации загрузки и результатов
  • Простота использования: Минимум кликов для анализа

🚀 API Endpoints

  • POST /upload - Загрузка и анализ изображения
  • GET /model_status - Проверка состояния модели
  • GET /health - Статус приложения

⚠️ Риски и этика

🔒 Приватность

  • Локальная обработка: Фотографии не передаются третьим лицам
  • Временные файлы: Автоматическое удаление после анализа
  • Без логирования: Изображения не сохраняются на сервере

⚖️ Потенциальные ограничения

  • Bias: Модель обучена на ограниченном наборе данных
  • Условия съемки: Может хуже работать при экстремальном освещении
  • Типы повреждений: Фокус на царапинах и вмятинах
  • Качество камер: Зависимость от разрешения и четкости

🚧 Ограничения текущей версии

  • Бинарная классификация: Только поврежден/не поврежден
  • Степень повреждений: Не учитывается тяжесть повреждений
  • Локальные условия: Не адаптирована к снегу, пыли, дождю

🚀 План улучшений

📅 Краткосрочные (1-2 месяца)

  • Многоклассовая классификация: Легкие/серьезные повреждения
  • Улучшение при плохом освещении: Дополнительные данные
  • Расширение датасета: Больше разнообразных примеров

📅 Среднесрочные (3-6 месяцев)

  • Детекция конкретных типов: Царапины, вмятины, ржавчина
  • Адаптация к погоде: Снег, дождь, пыль
  • Мобильная интеграция: SDK для iOS/Android

📅 Долгосрочные (6+ месяцев)

  • Real-time видео: Анализ в реальном времени
  • 3D анализ: Оценка глубины повреждений
  • Предиктивная аналитика: Прогноз состояния автомобиля

🛠️ Технические детали

📦 Зависимости

  • PyTorch: 2.1.0+ (GPU поддержка)
  • Torchvision: 0.16.0+
  • Flask: 2.3.0+ (веб-фреймворк)
  • Pillow: 10.0.0+ (обработка изображений)
  • OpenCV: 4.8.0+ (компьютерное зрение)

🐳 Docker конфигурация

  • Базовый образ: 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 для модели и данных

🚀 Быстрый старт

!!! ВАЖНО переместить best_model.pth в prepared папку

Вариант 1: Python (разработка)

# 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

Вариант 2: Docker (продакшен)

# Быстрый запуск
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/                # Временные файлы

🔧 API Документация

POST /upload

Загрузка и анализ изображения

Параметры:

  • file: файл изображения (multipart/form-data)

Ответ:

{
  "prediction": "Поврежден" | "Не поврежден",
  "confidence": 0.95,
  "probabilities": {
    "no_damage": 0.05,
    "damage": 0.95
  }
}

GET /model_status

Проверка состояния модели

Ответ:

{
  "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

🔗 Полезные ссылки

👥 Команда

Проект разработан для хакатона inDrive с фокусом на практическое применение в реальном продукте.


⏰ Дедлайн: 14 сентября 2024, 23:59 (GMT+5)
🏆 Кейс: Определение состояния автомобиля по фото
🎯 Цель: Повышение безопасности и качества сервиса inDrive

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published