Computer Vision на практике
CV-практика - вопросы про шрамы: почему модель упала в проде, почему метрика врёт, что даёт дешёвый буст. Здесь проверяют не знание слоёв, а привычки человека, донёсшего модель до камеры.
// Универсальный ответ темы: данные грязнее модели - аудит разметки до тюнинга архитектуры.
Аугментации и transfer learning
Аугментации - главный дешёвый буст: флипы, кропы, цвет, яркость, blur; тяжёлые схемы (RandAugment, MixUp/CutMix) - при больших бюджетах обучения.
Аугментация обязана уважать семантику задачи: вертикальный флип для распознавания текста или цифр - вредитель, агрессивный кроп срезает мелкие объекты вместе с разметкой.
// Transfer learning - дефолт: замороженный предобученный бэкбон + голова на малых данных; полная разморозка с малым lr - на средних. С нуля - почти никогда.
- MixUp / CutMix
- смешивание картинок и меток - сильная регуляризация
Разрешение, экспорт и честные замеры
Разрешение входа - сильная ручка: мелкие объекты требуют высокого разрешения, но цена растёт квадратично - компромисс ищется по валидации, а не по привычке «224 и хватит».
Прод-инференс: экспорт в ONNX (Open Neural Network Exchange)/TensorRT, квантизация, батчинг. Латентность мерится на целевом железе и по p95, не по среднему на своей девелоперской GPU.
// Test-time augmentation - пара процентов качества за кратную цену инференса: для офлайн-скоринга ок, для реалтайма нет.
- TTA
- test-time augmentation: на инференсе прогоняют несколько версий картинки (отражения, кропы) и усредняют - качество за цену времени
Данные и дрейф домена
Аудит данных до тюнинга: дубли между трейном и валидацией (бич датасетов из веба - метрика врёт), битые метки, дисбаланс классов.
Тихая смерть CV (cross-validation) в проде - дрейф домена: другая камера, освещение, сезон. Модель не падает - она молча деградирует. Нужны мониторинг на свежих данных и петля дообучения на новой разметке.
// Ещё одна тихая ловушка: несовпадение нормализации трейна и инференса - mean/std, RGB против BGR. Ошибки нет, качество просело.
- domain drift
- прод-картинки уехали от трейна: камера, свет, сезон
Как отвечать: «CV-модель отлично работала на валидации и деградировала в проде. Причины?»
Иду по частым причинам. Первая - препроцессинг: нормализация инференса не совпала с трейновой - mean/std, RGB против BGR, другой ресайз; ошибок нет, качество просело. Вторая - дрейф домена: прод-камера, свет или сезон не похожи на трейн - сравниваю распределения и собираю свежую разметку на дообучение. Третья - валидация изначально врала: дубли трейн/вал после сбора данных из веба завышают метрику. И проверяю саму сборку прода: версию экспорта, квантизацию - деградация могла родиться при конвертации. Дальше - мониторинг на свежих данных, чтобы следующее проседание увидеть раньше пользователей.
Четыре реальные причины в порядке проверки плюс вывод про мониторинг - маршрут человека, разбиравшего такие инциденты.
На чём валят
- −Аугментации, ломающие семантику: вертикальный флип для текста, жёсткий кроп мелких объектов.
- −Нормализация инференса ≠ трейновой (mean/std, RGB/BGR) - тихая деградация.
- −Мерить FPS (frames per second) на своей GPU, деплоить на CPU/эдж.
- −Дубли трейн/вал из веб-сбора - метрика врёт.
Проверьте себя
Пять вопросов из банка по этой подтеме. Всего их 11, остальные разбираются в тренажёре.
- Модель отлично работает на валидации, но на реальных фото в проде — плохо. Частая CV-причина?A)Домен-сдвиг: другое освещение/камеры/ракурсы или препроцессинг не как на обучении — вход из другого распределенияB)Причина в том, что на продакшен-сервере установлена немного другая версия библиотеки для чтения файлов изображенийC)Реальные фотографии сложно подать в обученную свёрточную сеть без потери качества распознаванияD)Модель просто обучалась слишком мало эпох, и достаточно продолжить обучение на той же самой валидационной выборке
показать ответ и разбор
+A)Домен-сдвиг: другое освещение/камеры/ракурсы или препроцессинг не как на обучении — вход из другого распределения// разбор: Классика — domain shift: валидация взята из того же чистого распределения, что и трейн, а прод-фото сняты в других условиях (освещение, фон, камера, ракурс, разрешение) или иначе препроцессятся (другая нормализация/ресайз, чем на обучении). Модель видит вход из другого распределения и проседает. Лечат репрезентативной обучающей выборкой, аугментацией под реальные условия и совпадающим на train/prod препроцессингом.
- Берёте предобученную на ImageNet сеть. Почему важно нормировать входы теми же mean/std, что при предобучении?A)Сеть училась на входах определённого масштаба; другая нормировка сдвигает распределение и роняет качествоB)Без точных mean/std сеть физически не сможет прочитать изображение и сразу упадёт с ошибкойC)Значения mean/std влияют лишь на скорость обучения, но на итоговое качество предсказаний обученной модели не влияют совсем никакD)Нормировка нужна лишь для чёрно-белых изображений, а для цветных её вполне можно и пропустить
показать ответ и разбор
+A)Сеть училась на входах определённого масштаба; другая нормировка сдвигает распределение и роняет качество// разбор: Предобученные веса откалиброваны под конкретное распределение входов (нормировку на ImageNet-статистики). Подадите иначе масштабированные пиксели — активации уйдут в непривычный диапазон, и качество упадёт, хотя ошибки не будет. Поэтому при transfer learning повторяют ту же нормировку (или аккуратно адаптируют при дообучении). Это не про способность «прочитать» кадр и не только про скорость.
- В классификации изображений один класс встречается в 50 раз реже. Что разумно сделать?A)Ничего: свёрточные сети сами устойчивы к дисбалансу классов в данных и корректируют его автоматически прямо в процессе обучения без какого-либо вмешательства инженераB)Удалить редкий класс из обучения — раз примеров мало, предсказывать частые классыC)Взвесить лосс по классам, досэмплировать/аугментировать редкий, смотреть per-class recall, а не accuracyD)Перевести все изображения в оттенки серого — это само по себе выравнивает частоты классов
показать ответ и разбор
+C)Взвесить лосс по классам, досэмплировать/аугментировать редкий, смотреть per-class recall, а не accuracy// разбор: При сильном дисбалансе сеть склонна игнорировать редкий класс, а accuracy это маскирует (почти всё предсказать «частым» и получить высокую точность). Лечат перевесом лосса в пользу редкого, oversampling/аугментацией его примеров (или undersampling частых) и оценкой по per-class recall/precision, PR-AUC — не по accuracy. Удаление класса и перевод в серое проблему не решают.
- Что такое test-time augmentation (TTA) и что она даёт?A)Аугментация обучающей выборки прямо во время обучения ради дополнительной регуляризации сетиB)Прогон нескольких аугментированных версий одного кадра на инференсе с усреднением предсказаний — чуть точнее и стабильнееC)Автоматический подбор гиперпараметров модели прямо на тестовой выборке перед финальным замеромD)Сжатие модели перед выкатом в прод за счёт удаления части её свёрточных фильтров и слоёв
показать ответ и разбор
+B)Прогон нескольких аугментированных версий одного кадра на инференсе с усреднением предсказаний — чуть точнее и стабильнее// разбор: TTA применяют на инференсе: одно изображение прогоняют в нескольких вариантах (флип, кропы, масштабы), а предсказания усредняют. Это сглаживает случайные ошибки и обычно чуть повышает качество и устойчивость ценой роста времени инференса в разы. Не путать с обучающей аугментацией (во время тренировки); подбором гиперпараметров на тесте это тем более не является — это была бы утечка.
- Чем аугментации mixup и cutmix отличаются от обычных (флип, кроп, поворот)?A)Они меняют яркость и контраст изображения, не трогая его геометрию и содержимоеB)Это аугментации для инференса, на этапе обучения их применять не получитсяC)Они работают лишь с чёрно-белыми снимками и требуют предварительного удаления цвета из кадраD)Смешивают два изображения и их метки (линейно или вклейкой куска), заставляя модель работать с промежуточными примерами
показать ответ и разбор
+D)Смешивают два изображения и их метки (линейно или вклейкой куска), заставляя модель работать с промежуточными примерами// разбор: Обычные аугментации преобразуют одно изображение, сохраняя метку. Mixup линейно смешивает пары картинок и их метки (λ и 1−λ), cutmix вклеивает вырезанный кусок одной в другую и так же смешивает метки пропорционально площади. Модель учится на «промежуточных» примерах — это регуляризует, сглаживает границы классов, повышает устойчивость. Речь о смешивании пар и меток, а не о яркости, инференсе или цвете.
дальше
Теорию прочитали. Навык ставится повторением
В Сеньорчике эта подтема идёт в ежедневных сессиях: движок возвращает её, пока ответы не станут уверенными, и ведёт прогресс отдельно по каждой подтеме. Теория внутри тоже бесплатна, лимит только на количество вопросов в день.