Как проверить инструкцию разметки до заказа тысячи изображений
До массовой разметки стоит проверить, одинаково ли люди понимают классы. Соберём пилот двойной аннотации, посчитаем разногласия и уточним правила на конкретных изображениях.
Сначала проверяем воспроизводимость правила
Для проверки полок магазин собирает фотографии и просит разметчиков пометить состояние: полка полная, частично пустая или пустая. Тысяча изображений кажется простым заказом. Но один человек считает отсутствие одной упаковки пустотой, другой ждёт свободного места на половине полки. Модель получит противоречивые примеры даже при аккуратной технической разметке.
Перед основной партией выделите пилот и дайте одинаковые кадры двум людям независимо. В него нужны и обычные сцены, и трудные границы: отражение, перекрытие, ценник вместо товара, край полки. Случайная выборка показывает распространённость разногласий, целевой подбор сложных сцен помогает улучшить инструкцию. Храните эти две части отдельно, потому что их доли классов различаются.
Согласие не равно правильности. Два человека могут одинаково неверно понять инструкцию. Поэтому после независимой разметки нужен разбор с ответственным за предметную задачу. Цель пилота — найти места, где правило не воспроизводится, и записать решение так, чтобы следующий разметчик мог его применить без устного объяснения.
Посмотрим не только долю совпадений
В примере каждому изображению назначают один класс, поэтому можно напрямую сопоставить пары ответов по id. Для рамок детекции потребовалось бы сначала сопоставить объекты на изображении по классу и перекрытию. Доля одинаковых строк в двух файлах не измеряет согласие координат, если объекты перечислены в разном порядке.
Посчитаем общую долю совпадений и пары разных ответов. Такая таблица сразу показывает, какую границу классов надо обсуждать. В маленьком наборе откройте каждый спорный кадр и выясните причину разного решения.
from collections import Counter
first = {"1": "full", "2": "empty", "3": "partial",
"4": "full", "5": "empty", "6": "partial"}
second = {"1": "full", "2": "partial", "3": "empty",
"4": "full", "5": "empty", "6": "partial"}
assert first.keys() == second.keys()
matches = sum(first[k] == second[k] for k in first)
disputes = Counter((first[k], second[k]) for k in first if first[k] != second[k])
print("agreement:", round(matches/len(first), 3))
print("disputes:", dict(disputes))
assert matches == 4
assert set(disputes) == {("empty", "partial"), ("partial", "empty")}
Совпали четыре ответа из шести, а оба разногласия относятся к границе empty/partial. Значит, следующая полезная работа — определить, что делает полку пустой. Возможно, задача магазина связана с отсутствием конкретного товара, и состояние всей полки вообще выбрано неверно. Метки должны поддерживать решение: пополнять выкладку, проверять наличие позиции или измерять долю свободного места.
После обсуждения добавьте в инструкцию положительные и отрицательные примеры границы. Запишите правила для видимости: что делать, если полку закрыл человек; как различать неизвестное состояние и пустую полку; нужны ли отдельные классы для снимков, на которых невозможно решить задачу. Для неоднозначного кадра полезнее явный статус, чем случайно выбранная метка.
Повторите независимую разметку на новой порции изображений. Если использовать только уже обсуждённые кадры, проверка измерит запоминание ответа. Сохраните версии инструкции и аннотаций: когда определение empty изменится, ранее размеченные данные могут потребовать пересмотра.
В большой партии делайте выборочный контроль по людям, источникам и классам. Общая доля согласия легко скрывает редкую важную категорию, потому что массовый full доминирует в числе кадров. Отчёт пилота должен завершаться конкретными решениями: какую границу уточнили, какие изображения переразметили и какие случаи пока отправляются на ручной разбор.
Для следующего шага пригодится утечка между соседними кадрами.
В платном курсе «Computer Vision Engineer: от детекции и Doc-AI до продакшна» вы готовите и проверяете датасеты, разбираете QA разметки и затем оцениваете качество обученной модели. Так инструкция становится частью воспроизводимого CV-процесса. Откройте программу курса.
Продолжить на практике
- Computer Vision Engineer: от детекции и Doc-AI до продакшна ↗
Практический курс по Computer Vision. Соберёте продакшн-сервис: датасет → обучение (YOLO/RT-DETR, SAM), трекинг, OCR/Doc-AI, веб-приложение (UI+API) и мониторинг. Экспорт в ONNX/TensorRT/OpenVINO, батчинг/квантование под CPU/GPU. Плюс профессиональные блоки: mAP/IoU/Dice и калибровка доверия, QA разметки и аугментации, p95/стоимость, дрейф данных и алерты, guardrails (NMS/правила), A/B-тесты, Triton/gRPC/FastAPI.
