ИИ-оценка повреждений автомобиля по фото
Страховой случай: клиент фотографирует машину на парковке, загружает 6 снимков в приложение, через 40 секунд получает предварительную оценку ущерба. Без выезда эксперта, без очереди на осмотр. Это не фантастика — это конкретная архитектура на базе YOLOv8-seg + регрессионной модели стоимости, которую можно развернуть в продакшн за 8–12 недель.
Что реально детектирует модель
Задача делится на три уровня:
Локализация повреждений — где именно и что: вмятина (dent), царапина (scratch), трещина (crack), разбитое стекло (glass damage), деформация кузова (deformation). Сегментационная модель даёт полигональную маску каждого дефекта с площадью в пикселях.
Классификация детали — к какой зоне автомобиля относится повреждение: передний бампер, капот, левое переднее крыло, дверь и т.д. Это важно для привязки к прайсу нормо-часов конкретной детали.
Оценка severity — лёгкое / среднее / тяжёлое повреждение. Регрессионная голова на фичах из backbone даёт скор, который умножается на коэффициенты из справочника стоимости.
Architecture пайплайна
Двухэтапная схема работает надёжнее сквозного end-to-end:
- Детекция и сегментация повреждений → YOLOv8-seg или SAM 2 с автоматическими промптами по зонам авто
- Классификация детали → ResNet-50 или EfficientNet-B3, обученный на разбивке кузова (30–50 классов деталей)
- Оценка стоимости → XGBoost или LightGBM на признаках: площадь маски, класс детали, severity score, марка/модель авто из EXIF или отдельного классификатора
# Пример инференса сегментационной модели
from ultralytics import YOLO
import cv2
model = YOLO('damage_seg_v8x.pt') # fine-tuned на датасете повреждений
results = model.predict(
source='car_damage.jpg',
conf=0.35,
iou=0.45,
imgsz=1280, # высокое разрешение критично для мелких царапин
retina_masks=True
)
for r in results:
masks = r.masks.data # (N, H, W) tensor
classes = r.boxes.cls # классы повреждений
areas = masks.sum(dim=[1,2]) # площадь каждой маски в пикселях
Где модели чаще всего ошибаются
Освещение и блики. Металлические поверхности при прямом солнце дают зеркальные блики, которые модель путает с царапинами. Решение — data augmentation с симуляцией бликов (albumentations RandomSunFlare, RandomBrightness) и требование к пользователю снимать в рассеянном свете. На практике добавляем quality check: если variance of Laplacian < 100 (размытое фото) или saturation > 240 (пересвет) — отклоняем снимок с просьбой переснять.
Мелкие царапины < 5px на изображении 640px. При стандартном imgsz=640 царапина длиной 10 см на расстоянии 1.5 метра занимает 3–4 пикселя. YOLOv8 пропускает их с IoU < 0.3. Поднятие imgsz до 1280 увеличивает recall по мелким дефектам с 0.44 до 0.71, но latency растёт с 28ms до 95ms на RTX 3090.
Старые повреждения vs новые. Модель не знает, когда возникло повреждение — это юридическая проблема для страховых. Решение: цветовой анализ краёв маски (свежий скол — белый, старый — коричневый от ржавчины) + cross-check с историей предыдущих осмотров.
Датасет и обучение
Минимальный объём для рабочей модели: 5 000 размеченных изображений с масками, покрывающих все классы повреждений и детали. На практике используем:
- Открытые датасеты: CarDD (4 000 фото), COCO с дообучением
- Синтетика из Blender — для редких случаев (тотальное разрушение передней части)
- Клиентские данные из архива страховых дел
Fine-tuning YOLOv8x-seg на RTX 4090 с датасетом 8 000 изображений — около 18 часов (100 эпох, batch=16, imgsz=1280). Финальные метрики: [email protected] = 0.79, [email protected]:0.95 = 0.61.
Integration и деплой
API на FastAPI, инференс через ONNX Runtime или TensorRT, Docker-контейнер. Мобильное SDK — CoreML для iOS (конвертация через coremltools), TFLite для Android. Latency на iPhone 14 Pro с CoreML: 1.2 секунды на одно фото.
| Компонент | Вариант | Latency |
|---|---|---|
| Сегментация повреждений | YOLOv8x-seg TensorRT FP16 | 45ms (A100) |
| Классификация детали | EfficientNet-B3 ONNX | 12ms (CPU) |
| Оценка стоимости | LightGBM | < 1ms |
| Итого (GPU сервер) | — | ~60ms |
| Мобильный (CoreML) | YOLOv8n-seg | 1.1–1.5s |
Сроки проекта
От 8 до 16 недель в зависимости от наличия размеченных данных и требований по интеграции с системами страховщика. Стоимость рассчитывается индивидуально.







