Сколько стоит разметить один кадр с дефектом на индустриальном конвейере? Пять рублей? Десять? Правильный ответ — около тысячи, если считать стоимость неизбежной переразметки, зарплату инженеров и упущенную выгоду от простоев линии из-за ложноположительных срабатываний на проде. А когда речь заходит про безопасность, жесткие NDA и невозможность вынести сырые видеопотоки за периметр предприятия, цена улетает в космос. Никаких крауд-платформ. Никаких студентов на фрилансе. Только свои серверы, штатные операторы и параноидальный контроль. Разметка данных для CV без слива на сторону: пайплайн от CVAT до контроля качества — это не роскошь. Это суровая необходимость выживания модели в реальном мире. Инженерия начинается здесь, а не в импортах PyTorch.
Инфраструктура разметки и онтология: где умирает качество
Развернуть CVAT (Computer Vision Annotation Tool) внутри изолированного контура предприятия — техническая задача на сорок минут. Пробросили порты, подняли контейнеры, настроили бекапы базы. Инфраструктура готова. Но проблема не в софте. Проблема в правилах игры.
90% качества будущего датасета закладывается на этапе проектирования онтологии (набора классов) и написания инструкций для асессоров. Если инструкция допускает двойное толкование, разметчики будут трактовать её по-разному. Помню, когда мы в Morana Labs катили систему видеоаналитики для закрытого горно-обогатительного комбината, первую версию инструкции заказчик составил в духе «выделяйте куски породы на ленте». Через неделю мы получили эталонный мусор: один оператор обводил каждый камень по контуру, второй захватывал группу камней одним гигантским боксом, третий игнорировал мелкую фракцию, потому что для него это была «пыль», а не порода. Пришлось останавливать процесс и документировать всё до пикселя: минимальная площадь объекта, правила работы с перекрытиями (occlusions), жесткий гайдлайн по отступам bounding box от краев объекта.
Не закрепите детерминированные правила на старте — переразметите весь пул через месяц. За свой счет.
Контроль качества (QA): как поймать уставшего асессора
Человек выгорает за три часа монотонной работы. Глаз замыливается. Уверенность в том, что штатный оператор будет идеально обводить пиксели всю смену — это управленческая халатность. Если у вас нет автоматизированного QA-пайплайна, у вас нет датасета.
Чтобы метрики на инференсе не пробивали дно, пайплайн обязан включать три уровня контроля:
- Слепой кросс-чек: от 5% до 15% пула данных (в зависимости от сложности) отправляется на разметку двум независимым асессорам. Если их результаты расходятся, кадр улетает на арбитраж тимлиду разметки. Это отсекает индивидуальные галлюцинации.
- Эталонные сабсеты (Honeypots): в общую очередь задач незаметно подмешиваются заранее идеально размеченные кадры (golden set). Система автоматически сверяет ответ асессора с эталоном. Провалил три ханипота за день — блокировка аккаунта и переобучение. Это единственный способ держать людей в тонусе.
- Математика согласия: визуальный контроль не масштабируется. Мы считаем IoU (Intersection over Union) для геометрии и каппу Коэна (Cohen's kappa) для классов. Каппа Коэна критически важна: она учитывает вероятность того, что два асессора сошлись в ответе случайно. Если метрика согласия падает ниже 0.8, проблема не в людях — проблема в вашей онтологии.
Active Learning и грязный секрет предразметки
Полностью ручная разметка с нуля — это больно и дорого. Очевидный способ срезать косты — использовать саму модель для черновой работы (Model-assisted labeling). Прогнали инференс по сырым данным, отрисовали боксы, отдали человеку на валидацию. Скорость работы растет кратно. Бюджеты экономятся.
Именно здесь спрятана главная ловушка MLOps, о которой стыдливо молчит маркетинг. Посмотрите на сухие цифры типичного индустриального бенчмарка.
| Подход к разметке | Скорость (фреймы/час) | Согласие с QA (IoU) | Деградация на edge-кейсах |
|---|---|---|---|
| Полностью ручная | 40 - 50 | 0.85+ | 0% (базлайн) |
| Тотальная предразметка | 150 - 200 | 0.92 (иллюзия) | Падение recall до 15% |
| Active Learning (AL) | 60 - 80 | 0.88+ | Минимальная |
Почему при тотальной предразметке деградируют сложные кейсы? Из-за Confirmation Bias (предвзятости подтверждения). Асессор превращается в «кликера». Если модель поставила рамку, которая смещена на пять пикселей от реальной границы дефекта, корректировка потребует от человека прицеливания и перетягивания граней. Нажать пробел (Accept) — одно легкое движение. Человек ленив. Смиритесь. Датасет молча впитывает ошибки модели, закрепляя их. С каждым циклом дообучения сеть становится всё более уверенной в своей же неточности.
Решение — Active Learning (активное обучение). Мы не предразмечаем весь пул. Мы заставляем модель прогонять инференс и оценивать собственную неуверенность (через энтропию или margin sampling). Человеку отправляются только те кадры, где сеть сомневается. Кадры, где модель уверена на 99%, автоматически идут в трейн-сет без ручного ревью. Кадры с высокой энтропией (там, где модель не понимает, блик это или царапина) уходят на чистую ручную разметку, БЕЗ показа предсказаний сети. Так мы рвем порочный круг confirmation bias и получаем чистый сигнал на сложных примерах.
Баланс классов и хард-майнинг
В промышленном компьютерном зрении 99% времени на конвейере или в зоне контроля не происходит ровным счетом ничего. Дефекты, возгорания, нарушения техники безопасности — это редкие аномалии. Если вы будете просто брать каждый сотый кадр с видеопотока и отправлять в CVAT, вы разоритесь на разметке пустых фонов.
Замкнутый data-loop обязан включать Hard Negative Mining. Модель непрерывно мониторит поток на периметре. Как только она видит ложноположительное срабатывание (например, тень от крана с детектилась как человек в опасной зоне) с пограничным уровнем уверенности — этот конкретный кусок видео автоматически вырезается и улетает в базу для разметки. Мы собираем не просто данные. Мы прицельно собираем те данные, на которых текущая архитектура ломается.
Изолированный контур — не оправдание для медленной работы. Пайплайн, где данные перекидываются жесткими дисками, а экспорт JSON делается скриптами на коленке, не выдержит масштаба. Настраивается интеграция очередей. Инференс на edge-устройстве складывает сложные семплы в локальное S3-хранилище, оттуда они пушатся в CVAT, асессоры размечают их по жестким правилам с кросс-чеком, и каждую ночь модель автоматически дообучается на обновленном эталонном датасете. Утром обновленные веса едут на железо заказчика.
Это и есть production-ready подход. Без магии, без надежды на идеальных людей, с жестким математическим контролем качества каждого пикселя.