Компьютерное зрение и распознавание
{
"title": "Компьютерное зрение и распознавание: что упускают 90 % специалистов — экспертный разбор",
"keywords": "компьютерное зрение, распознавание изображений, ошибки CV, аннотация данных, аугментация, метрики качества, продуктивные модели",
"description": "Экспертный разбор частых ошибок в проектах компьютерного зрения: смещение датасета, переоценка точности, неочевидные причины плохой работы моделей. Практические советы и цифры.",
"html_content": "Почему точность 99 % на тесте — это ловушка
Самая частая ошибка, которую я вижу в коммерческих проектах по компьютерному зрению, — слепая вера в метрики валидационного набора. Модель показывает 99,2 % accuracy на отложенной выборке, но в реальных условиях падает до 60 %. Проблема не в архитектуре, а в несовпадении распределения данных (data distribution shift). Даже небольшое изменение освещения, угла камеры или фона ломает нейросеть, если она не обучалась на таких примерах.
- Ковариационный сдвиг (covariate shift): модель переобучается на статистических артефактах датасета — например, на водяных знаках, временных метках или цвете неба, которые коррелируют с классом. На новых данных эти корреляции исчезают, и точность резко падает. Метод борьбы: тестировать модель на данных принципиально иного источника (например, с другой камеры) ещё до деплоя.
- Несбалансированность по группам (subgroup shift): даже при равном количестве классов внутри категории могут быть подгруппы с разной сложностью. Пример: детектор пешеходов работает отлично для взрослых людей в тёплой одежде, но пропускает детей в светлых куртках. Решение — стратифицированная валидация по группам (skin-tone, одежда, ракурс) с фиксацией worst-group accuracy.
- Скрытые корреляции: в медицинском датасете снимки здоровых пациентов часто делались на старом аппарате, а больных — на новом. Модель учится распознавать аппарат, а не патологию. Проверка: обучение с контролем домена (domain adversarial training) или ручная чистка метаданных.
- Переоценка за счёт перепокрытия (data leakage): когда изображения одного объекта попадают и в тренировку, и в тест. Типичный кейс — кадры из видео: соседние кадры почти идентичны, модель «запоминает» их, а не обобщает. Надо разбивать последовательности целыми сессиями, а не случайными кадрами.
- Игнорирование уверенности модели: даже при высокой accuracy модель может быть неуверена в большинстве предсказаний, но «угадывать» верно за счёт сдвига. Метрики калибровки (Expected Calibration Error) и доверительные интервалы (conformal prediction) обязательны для safety-critical систем.
Профессионалы всегда оценивают модель на нескольких независимых датасетах — как минимум из другого источника (cross-dataset evaluation) и с синтетическими искажениями. Истинная точность — это не цифра на лидере Kaggle, а стабильность при смене условий съёмки.
В 2026 году в коммерческих проектах стандартом стал отчёт по 5+ метрикам надёжности: accuracy на чистом тесте, accuracy при синтетическом шуме (Gaussian blur, изменение яркости), worst-group accuracy, calibration error и latency-accuracy tradeoff. Без этого модель нельзя выпускать в прод.
Аннотация данных: где теряется 80 % бюджета
В любом проекте компьютерного зрения затраты на разметку часто превышают затраты на разработку модели. Но дело не в цене за штуку, а в системных ошибках: несогласованность инструкций, разный уровень разметчиков, неконтролируемая разметка границ объектов. Это ведёт к «грязному» датасету: модель учится на шуме, а не на признаках.
- Стандартизация инструкций: чётко пропишите, что считать границей объекта: включая "frame" (рамку по габаритам) или "tight" (только видимую часть)? Для каждого тега — 3–5 примеров-эталонов. Разметчики должны пройти тест из 50 изображений с контролем по kappa-коэффициенту (цель — ≥ 0,85).
- Многоуровневый контроль: минимум двойная независимая разметка одного изображения разными людьми. Расхождение > 10 % площади polygon отправляется на ревью арбитра. Это добавляет 15–20 % к затратам, но повышает качество модели на 12–18 % по mAP.
- Аугментация как способ детекции плохой разметки: если после сильного поворота или затемнения модель резко теряет точность, проблема часто в неравномерности разметки по углам и освещению. Запустите passive-aggressive проверку: разметчикам показывают аугментированные версии неразмеченных данных и проверяют, не игнорируют ли они объекты после трансформаций.
- Аннотация «невидимого»: объекты, частично выходящие за край кадра, должны быть размечены до границы изображения, а не игнорироваться. Стандарт COCO — отмечать их обычным polygon, даже если он обрывается на краю. Пропуск таких объектов — распространённая причина недооценки recall у мелких целей.
- Асимметрия качества: easy- и hard-примеры должны размечаться с разной стоимостью. На редкие сложные случаи (сильное перекрытие, нечёткая граница) ставьте двойную цену и отправляйте самым опытным разметчикам. Иначе модель провалится на них, а они определяют применимость в продакшене.
- Периодический аудит: раз в месяц случайные 200–300 изображений проверяет эксперт. Если ошибок > 2 %, вся партия того разметчика отправляется на переразметку. Метрика — error rate per annotator, а не просто accuracy.
Распространённая иллюзия, что больше данных автоматически означает лучше модель. На практике 10 000 качественно размеченных изображений дают лучший результат, чем 100 000 с мусором. В 2026 году подходы с активным обучением (active learning) позволяют сократить объём разметки на 40–60 % при сохранении точности: модель сама выбирает, какие неподписанные примеры ей «непонятны», и их размечают в первую очередь.
Ещё одно правило из промышленных проектов: никогда не используйте crowdsourcing-разметку без контрольных затравок (golden questions). Вставляйте 5–10 % тестовых изображений с известной истинной разметкой — если разметчик ошибается на них чаще 5 %, забраковывайте всю его работу.
Выбор архитектуры: не гонитесь за SOTA на лидере
В интернете полно статей, сравнивающих ResNet, EfficientNet, ConvNeXt, Vision Transformers (ViT) и гибриды вроде CoAtNet. Соблазн взять самую мощную модель с минимальным error rate на ImageNet велик. Но для реального приложения действует правило «железного треугольника»: точность, скорость, память. И в 90 % победных подходов на лидере жертвуют двумя последними, что неприемлемо для деплоя.
- Latency прежде всего: если вам нужно 30 FPS на edge-устройстве (камера умного дома), нейросеть с 50 млн параметров не пройдёт — даже с квантизацией. Для таких задач лучше MobileNetV3-Large (5.4M параметров) или EfficientNet-Lite (7M) с DeepLabV3-головой. Они дают mAP на 3–5 % ниже SOTA, но работают в realtime.
- Input resolution — скрытый рычаг: увеличение сторона с 224 до 384 пикселей поднимает mAP на ~0.5–1 % за счёт 2–3-кратного роста вычислений и памяти. Часто выгоднее использовать модель того же размера, но с входом 256×256, чем брать модель с вдвое большим числом параметров. Это снижает latency на 40 % при незначительном падении точности.
- Neural Architecture Search (NAS) для вашей задачи: готовые семейства (EfficientNet, MobileNet) уже оптимизированы под общие задачи. Но лучше запустить NAS на вашем датасете — это найдёт архитектуру под конкретный баланс latency и accuracy. Инструменты: Google Vertex AI NAS, AutoKeras, Microsoft NNI.
- Головы для детекции и сегментации: часто «тяжесть» модели не в backbone, а в голове (detection head). Замена стандартной головы на центроидную (CenterNet head) или простую голо (YOLO head) уменьшает количество параметров на 30–50 % без потери recall для боксов среднего размера.
- Квантизация и pruning: INT8-квантизация — стандарт 2026 года. Она ускоряет инференс в 2–4 раза и снижает энергопотребление на 60–70 % при потере mAP всего на 0.2–0.5 % — но только если модель хорошо калибрована. Без калибровки на представительной выборке (100–500 images) точность может упасть на 2–5 %.
- Тест на краю: не верьте цифрам latency из даташитов — они считаны на GPU A100. Измерьте реальное время на целевом устройстве (Jetson Nano, Raspberry Pi, мобильный NPU). Разница может быть 5x из-за кэш-промахов и акселераторов.
В итоге выбор архитектуры — это не поиск лучшей модели на лидере, а осознанный компромисс. Профессионал всегда начинает с бенчмарка: фиксирует разрешение (224 или 256), латентность (например, 15 ms), и бюджет памяти (< 100 MB для мобильного приложения). Затем среди моделей, удовлетворяющих этим ограничениям, выбирает по mAP на релевантном датасете, а не на общем ImageNet.
Задача сегментировать медицинские изображения с точностью 0.96 Dice — не про SOTA с 0.98, а про стабильность предсказаний на 2D и 3D. Я рекомендую хранить 3–5 моделей с разными компромиссами (скорость vs качество) и выбирать на этапе деплоя под реальные требования.
Обработка редких случаев: где модель слепнет
Даже идеально работающая модель падает на редких паттернах: перевёрнутые объекты, необычные ракурсы, частичное закрытие, артефакты съёмки (засветка, блики, грязь на линзе). Таких примеров в стандартном датасете мало (1–3 %), но продуктовая ошибка на них приводит к отказу пользователя. Например, face unlock не работает в тёмной комнате, детектор автомобиля пропускает мотоцикл с пассажиром сзади.
- Сбор hard примеров: на этапе эксплуатации собирайте все случаи, где модель сделала ошибку с высокой уверенностью (false positive / false negative). Размечайте их отдельно и добавляйте в тренировочный пул. Пассивное обучение: раз в месяц размечать 500–1000 таких «трудных» кадров — этого достаточно, чтобы точность на краях распределения выросла на 5–8 %.
- Синтетическое расширение: используйте генеративные модели (Stable Diffusion, ControlNet) для создания реалистичных редких вариантов: снег, туман, зеркальное отражение, ночь. В 2026 году лучшие результаты даёт комбинация фотореалистичного рендера (Unreal Engine 5) и GAN-дообразовки. Добавление 5–10 % синтетических данных снижает error rate на датасетах с погодными условиями на 15–25 %.
- Многомасштабная обработка: для детекции мелких объектов (например, знак на дороге вдалеке) используйте feature pyramid networks (FPN) или адаптивный ресайз с областью интереса (patch-based processing). В Inference подавайте изображение в разных масштабах (1x, 2x, 0.5x) и агрегируйте предсказания — это добавляет 10–20 % latency, но повышает recall small objects на 30–50 %.
- Аугментация специфических искажений: стандартные повороты и цвета — базовый минимум. Программируйте аугментации под реальные артефакты камеры: motion blur (имитация дрожания камеры), salt-and-pepper noise (грязь на матрице), lens flare (блики от солнца). Используйте ImgAug или Albumentations — библиотеки с готовыми трансформациями.
- Условное обучение (conditional training): добавьте в модель входной «контекстуальный» вектор — метку условий съёмки (освещение, угол, погода). Модель учится предсказывать, игнорируя сдвиг. В продакшене используйте light-version: простой MLP на top features, который переключает веса головы детектора в зависимости от условий. Это уменьшает ошибку на sift-примерах на 10–15 %.
Система компьютерного зрения промышленного уровня должна иметь механизм fallback: если модель не уверена (softmax < порога, например, < 0.7), возвращать NULL с пометкой «не определено». Это предотвращает ложные срабатывания на редких паттернах и повышает доверие пользователя. В 2026 году такой порог — норма для safety-critical систем.
Не забывайте про тестирование на adversarial examples: даже небольшие возмущения, невидимые глазу, могут полностью изменить предсказание. Сделайте robustness benchmark со стандартными атаками (FGSM, PGD) и используйте атакующее обучение (adversarial training) для защиты дорогих сценариев (платёжное распознавание лиц, безопасность автомобиля).
Мониторинг после деплоя: как модель деградирует незаметно
После запуска модели в реальную эксплуатацию её точность неизбежно падает — это называется distribution drift. В течение 3–6 месяцев mAP может уменьшиться на 5–10 % из-за изменения камер, освещения, появления новых объектов (например, новые модели автомобилей). Без мониторинга вы узнаете об этом от пользователей — когда они пожалуются на ошибки. К тому моменту отток может составить 5–10 % клиентов.
- Автоматический мониторинг метрик: настроить сбор prediction log без доступа к true labels. Метрики: confidence histograms, количество detections per image, соотношение классов — любой аномальный сдвиг (> 2 std) — сигнал к ретрейнингу. В 2026 году стандарт — инструменты Evidently AI или MLflow Model Registry с автоматическими алертами в Slack/Telegram.
- Ground truth через user feedback: в продуктах, где пользователь может подтвердить или опровергнуть предсказание (например, разблокировка по лицу — успех/отказ), используйте эти сигналы как слабую разметку. Так вы сможете оценивать real-world accuracy в реальном времени без ручной аннотации. <
Добавлено: 23.04.2026
