Заказчик сжёг два миллиона рублей на ручную разметку датасета под дефектоскопию. Когда мы в Morana Labs забрали проект на аудит, выяснилось, что 85 процентов размеченного — это пустой конвейер, где базовая модель и так выдавала уверенный ноль с вероятностью 0.99. Ассессорам платили за то, что они неделями жали кнопку «далее».
Размечать сырой датасет с нуля руками в 2026 году — это маркер либо глубокой некомпетентности, либо откатной схемы.
Внедрять индустриальный ИИ, высоконагруженные системы или edge-вычисления на железе клиента бессмысленно, если бюджет проекта умирает еще на этапе подготовки данных. Правильная разметка данных с LLM и активное обучение меняют математику процесса радикально. Мы уже писали про изоляцию контура и связку CVAT с жестким контролем качества, а также разбирали экономику инхаус-команд по сравнению с аутсорсом. Теперь о том, как аппаратно убрать основной объем рутины из сметы, оставив людям только сложную интеллектуальную работу.
Воронка удешевления аннотации: active learning и VLM под капотом
Разберем профиль нагрузки типичного проекта компьютерного зрения. Из десяти тысяч кадров реальную ценность для градиентов несут от силы полторы тысячи. Остальное — легко предсказуемый фон или тривиальные ракурсы. Скармливать этот мусор людям нельзя. Мы строим пайплайн отсева.
Сначала весь массив прогоняется через локальную Vision-Language модель. Никакого OpenAI и слива по API наружу — мы ограничены 152-ФЗ и коммерческой тайной предприятия, поэтому на on-prem сервере поднимается квантованная LLaVA или Qwen-VL. Она делает zero-shot pre-labeling датасета. Человек больше не рисует боксы с нуля. Он работает валидатором: подтверждает или правит готовую маску. Одно это дает ускорение в три-пять раз.
Но главная экономия начинается дальше. Здесь включается активное обучение (active learning). Ассессору уходят только те примеры, где сеть сомневается. Мы берем пул неразмеченных данных, прогоняем через текущий чекпоинт целевой модели и считаем uncertainty — энтропию предсказаний или разброс вероятностей.
import numpy as np
def get_uncertainty_scores(predictions):
# Вычисляем энтропию предсказаний для выборки спорных кадров
# predictions shape: (batch_size, num_classes)
entropy = -np.sum(predictions * np.log(predictions + 1e-10), axis=1)
return entropy
def active_learning_step(unlabeled_pool, model, top_k_percent=0.15):
preds = model.predict(unlabeled_pool)
uncertainty = get_uncertainty_scores(preds)
# Отбираем индексы кадров с максимальной энтропией
num_samples = int(len(unlabeled_pool) * top_k_percent)
hard_indices = np.argsort(uncertainty)[-num_samples:]
return unlabeled_pool[hard_indices]Только топ-15 процентов самых неочевидных кадров отправляются в CVAT. Уверенные кейсы получают псевдолейблы и сразу летят в обучающую выборку.
Сразу возникает проблема качества: авторазметка LLM и контроль качества предсказаний. Локальные модели врут, галлюцинируют и съезжают с координат. Ловить это нужно до того, как мусорный датасет отравит веса. Мы используем консенсус нескольких прогонов. Модель делает три предсказания с легкой вариацией температуры. Если результаты расходятся — кадр автоматически помечается как сложный (высокий disagreement) и уходит человеку. Для оценки надежности самого ассессора в поток незаметно подмешивается golden set — эталонные примеры. Падение метрики согласованности Cohen's kappa ниже 0.7 означает, что разметчика нужно отключать от пула, пока он не запорол всю партию.
Цифры, синтетика и точка остановки
Давайте смотреть на честный замер. Дано: десять тысяч изображений дефектов на трубах. Исторически разметка такого объема с нуля занимала около тысячи часов ФОТ и обходилась в триста тысяч рублей. Внедрение связки из LLM-предразметки и uncertainty sampling перевернуло картину.
VLM разметила весь объем за час серверного времени. Из массива скрипт вытащил полторы тысячи кадров с высокой энтропией. Ассессоры только верифицировали их и поправили съехавшие границы. Итог: сто пятьдесят часов работы, сорок пять тысяч рублей бюджета. F1-score целевой легковесной сети остался на уровне 0.92, mAP не просел ни на долю процента. Бюджет срезан более чем в шесть раз при идентичном качестве инференса.
Весь процесс замыкается в бесконечную петлю. Разметили сложную выборку, дообучили целевую edge-модель, прогнали ее по новому куску сырых данных, снова отобрали спорное через active learning, повторили. Если на очередном витке мы ловим редкий edge-case, который в природе встречается раз в год, в дело идет синтетика. Добавлять синтетические данные дешевле, чем месяцами ждать нужную аномалию с реальной камеры. Главное не переборщить: если синтетика составит больше трети батча, domain gap гарантированно убьет обобщающую способность сети на реальном производстве.
Инженерия заканчивается там, где метрика выходит на плато. Как только добавление новых размеченных батчей перестает давать прирост точности на validation-сете, процесс нужно жестко останавливать. Дальше размечать не окупается. Вы просто жжете вычислительные мощности и зарплатный фонд ради тысячных долей процента, которые растворятся в шуме реального видеопотока. Если вашему производству нужна рабочая CV-модель и настроенный on-premise разметочный контур под ключ, не выкачивающий деньги в пустоту, приходите в Morana Labs.