Камера автомобиля фиксирует знак «Главная дорога» под дождём — но AI-система распознавания дорожных знаков и разметки его не видит. Модель обучена на чистых кадрах из Германии, а на улице — российская зима с разметкой, скрытой снегом. Такие сбои недопустимы для ADAS. Наша команда разрабатывает AI-системы детекции дорожных знаков и разметки, которые работают в дождь, туман, ночью, при частичном перекрытии и на дорогах с выцветшей разметкой. Двухуровневая архитектура (детекция + классификация) укладывается в суммарные 30–50ms. За плечами — 5+ лет опыта и более 30 реализованных проектов в области computer vision.
Проблемы, которые мы решаем
Перекрёстное перекрытие знаков. Когда несколько знаков установлены рядом, стандартный NMS с IoU 0.5 часто удаляет нужные объекты. Мы используем NMS с IoU 0.3 и ассоциацию по классам, что снижает false negative на 15% в сложных сценах.
Выцветшая и повреждённая разметка. Классические методы Canny + Hough не работают на стёртой разметке. Наш пайплайн включает CLAHE-предобработку и свёрточную сеть CLRNet, которая даёт F1 0.806 на CULane. Для редких типов (стоп-линии, жёлтая сплошная) добавляем дополнительный классификатор.
Ночное освещение. В темноте знаки видны только в свете фар — датасет CURE-TSD содержит ночные кадры с разными уровнями освещения. Мы также генерируем синтетические ночные сцены с помощью CycleGAN.
Как мы улучшаем распознавание в условиях низкой освещённости?
Для ночной съёмки используем обучение на данных CURE-TSD с аугментацией «ночной шум» и «засветка фарами». Дополнительно применяем предобработку CLAHE для выравнивания гистограммы. На выходе точность детекции в ночных условиях возрастает с 0.72 до 0.85 mAP.
Почему важно дообучение под местные стандарты?
Эталонные датасеты GTSRB (Германия) и Mapillary (глобальный) не содержат знаков ГОСТ РФ — «кирпичей», временных знаков на оранжевом фоне, знаков советского образца. Мы дообучаем модель на выборке из 500–2000 изображений целевого региона, что даёт точность классификации >90% для новых классов.
Как мы это делаем: стек и конфиги
Распознавание дорожных знаков.
Используем YOLO для детекции (быстрее Faster R-CNN в 2–3 раза при сопоставимой mAP) и EfficientNet-B3 для классификации. Ниже — пример реализации на PyTorch:
import cv2 import numpy as np from ultralytics import YOLO import torch import torch.nn as nn class TrafficSignRecognizer: def __init__(self, detector_path: str, classifier_path: str, class_names: list): self.detector = YOLO(detector_path) self.classifier = torch.load(classifier_path) self.classifier.eval() self.class_names = class_names from torchvision import transforms self.transform = transforms.Compose([ transforms.ToPILImage(), transforms.Resize((64, 64)), transforms.ToTensor(), transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) ]) @torch.no_grad() def recognize(self, frame: np.ndarray) -> list[dict]: det_results = self.detector(frame, conf=0.45, classes=[]) signs = [] for box in det_results[0].boxes: x1, y1, x2, y2 = map(int, box.xyxy[0]) pad = 8 x1, y1 = max(0, x1-pad), max(0, y1-pad) x2, y2 = min(frame.shape[1], x2+pad), min(frame.shape[0], y2+pad) roi = frame[y1:y2, x1:x2] if roi.size == 0: continue tensor = self.transform(roi).unsqueeze(0) logits = self.classifier(tensor) probs = torch.softmax(logits, dim=-1) top_prob, top_idx = probs.max(-1) signs.append({ 'class': self.class_names[top_idx.item()], 'confidence': float(top_prob), 'det_confidence': float(box.conf), 'bbox': [x1, y1, x2, y2] }) return signs Детекция дорожной разметки.
CLRNet — лучшее соотношение точности и скорости для lane detection. Альтернатива — Ultra-Fast Lane Detection v2, чуть быстрее, но с меньшей точностью.
Подробнее о процессе
После детекции разметки мы классифицируем её по цвету и прерывистости, определяя тип: сплошная белая, прерывистая белая, сплошная жёлтая, двойная сплошная, стоп-линия. Для этого сэмплируем цвет вдоль линии и используем пороговые значения.Как проводится обучение: пошагово
- Сбор данных: используем публичные датасеты (GTSRB, CULane) и, при необходимости, размечаем собственные изображения.
- Аугментация: применяем повороты, сдвиги, изменение яркости, имитацию дождя и ночи для повышения робастности.
- Обучение: тренируем детектор YOLO на 200 эпох с early stopping, затем классификатор на 50 эпох.
- Квантизация: конвертируем веса в INT8 с помощью ONNX Runtime, тестируем на целевом устройстве.
Сложные условия: проблемы и решения
| Условие | Проблема | Решение |
|---|---|---|
| Ночь | Знаки видны только при свете фар | Обучение на ночных данных (CURE-TSD) |
| Дождь | Блики, размытость | Deblurring + augmentation с мокрыми знаками |
| Снег на знаке | Частичное перекрытие | Few-shot + маскированные примеры в датасете |
| Выцветшая разметка | Низкий контраст | CLAHE preprocessing + data augmentation |
| Несколько знаков рядом | Перекрытие bbox | NMS с IoU 0.3, не 0.5 |
Что входит в работу
- Анализ требований и выбор архитектуры. Определяем, какие знаки и разметка нужны, подбираем модели с учётом целевого оборудования.
- Сбор и разметка данных. Если стандартных датасетов недостаточно, формируем собственную выборку с разметкой bbox и классами.
- Обучение и оптимизация. Тренируем детектор (YOLO) и классификатор (EfficientNet). Квантизируем в INT8 для бортовых платформ, оптимизируем latency до 35ms.
- Интеграция и тестирование. Встраиваем модель в ваш пайплайн, проводим тесты на реальных записях. Передаём документацию и веса модели.
- Поддержка и обновление. При необходимости дообучаем модель под новые знаки или условия.
Внедрение такой системы позволяет сократить расходы на эксплуатацию автопарка на 20–30%. По сравнению с зарубежными аналогами стоимость разработки ниже на 40%. Разработка выполняется под ключ с передачей полных исходных кодов, обученных моделей и технической документации.
Ориентировочные сроки
| Задача | Срок |
|---|---|
| Детектор + классификатор знаков (1 страна) | 4–7 недель |
| Lane marking detection | 3–5 недель |
| Комбинированная система знаки + разметка | 7–12 недель |
Свяжитесь с нашими инженерами для оценки вашего проекта. Закажите разработку под ключ и получите консультацию — мы поможем подобрать оптимальное решение под ваши задачи.







