Почему классификация изображений ломается на реальных данных
Чаще всего запрос звучит так: «модель на отложенной выборке показывает почти идеальную точность, а в работе ошибается на половине объектов». Разбираем, где именно ломается классификация изображений и почему смена архитектуры на более тяжёлую ничего не исправляет.
Первый источник отказов — разметка датасета под лабораторные условия. Снимки делали в одном помещении, при одном свете и ракурсе, метки проставляли по папкам с исходниками, без единого правила на спорные случаи. В результате модель учит фон и артефакты съёмки, а не признак объекта: достаточно поменять стол или лампу, и точность проседает.
Второй — дисбаланс классов. Когда редкая категория занимает доли процента, общая точность остаётся высокой просто потому, что модель уверенно предсказывает частый класс. Смотреть нужно на полноту и точность по каждому классу и на матрицу ошибок, иначе главный класс отказа не виден ни в одной сводной цифре.
Третий — смена условий съёмки: другая камера, освещение, сезон, положение объекта в кадре. Распределение входных данных уезжает от обучающего, и модель видит не то, на чём училась — даже аккуратно обученный ResNet или ViT здесь не спасает.
Разбираем, как это закрывается: сначала фиксируем правила разметки и переразмечаем спорные группы, затем выравниваем классы на уровне отбора примеров, а не только весов, и только после этого обучаем сеть.
Что даёт обученная модель классификации изображений
Обученная модель классификации изображений превращает поток снимков в решение с числом. Точность модели фиксируется до запуска на контрольной выборке — наборе кадров, размеченных вручную и не участвовавших в обучении. Именно она, а не результат на обучающем наборе, становится параметром приёмки.
На потоке модель возвращает метку и уверенность, а порог уверенности задаёт, какая доля решений уходит в автоматику. Всё, что ниже порога, попадает в ручную сортировку: просмотр становится выборочным вместо сплошного, и оператор разбирает только спорные кадры. Доля ошибок на контрольной выборке известна заранее, поэтому нагрузку на смену можно планировать, а не гадать по факту.
Исчезает и систематическая ошибка оператора: усталость к концу смены и разное толкование спорных случаев больше не влияют на разметку. Модель отвечает одинаково на первом и последнем кадре потока, задержка — доли секунды на изображение, так что узким местом становится канал передачи, а не распознавание.
Что становится измеримым после запуска:
- доля кадров, уходящих в автоматику без участия человека;
- сокращение ручного просмотра при том же объёме потока;
- доля ошибок на контрольной выборке с разбивкой по классам;
- время отклика на кадр при потоковой обработке.
Архитектуру подбираем под характер данных, а не по умолчанию: ResNet и родственные семейства по-разному держат мелкие объекты, шум и размытие — выбор подтверждаем сравнением на контрольной выборке, а не общей рекомендацией.
Подходы к обучению: своя сеть, дообучение или готовый сервис
Три варианта различаются не «качеством», а объёмом вашей разметки и тем, насколько целевые классы близки к тому, что уже умеют открытые модели. Обучение с нуля имеет смысл, когда набраны десятки тысяч размеченных примеров, а классы специфичны: дефекты на снимках, редкие текстуры, медицинские изображения. Если такой разметки нет, попытка вырастить сеть с нуля даёт переобучение и точность ниже, чем у готовой архитектуры.
Дообучение модели на предобученной архитектуре закрывает большинство задач: свёрточные семейства устойчивы на небольших наборах, трансформерные выигрывают, когда классов много и важны мелкие детали. Готовый сервис распознавания берут под типовые категории — там, где не нужен контроль над разметкой и дообучением.
| Вариант | Когда подходит | Ограничения |
|---|---|---|
| Обучение с нуля | своя разметка от десятков тысяч примеров, классы не похожи на публичные наборы | длинный цикл, нужен запас данных и вычислительные ресурсы, высокий риск переобучения |
| Дообучение предобученной архитектуры | от нескольких сотен размеченных примеров, классы близки к естественным изображениям | критично качество разметки, точность падает при смене камер или освещения |
| Готовый сервис распознавания | типовые категории, нужен быстрый старт без своей инфраструктуры | закрытый набор классов, нет доступа к модели, зависимость от поставщика |
Мы обычно начинаем с дообучения и замеряем точность на отложенной выборке: если её не хватает, точечно наращиваем разметку, а не меняем подход целиком.
Как мы обучаем и внедряем модель: этапы работ
Порядок этапов подчинён одному ограничению: метрика качества и способ её подсчёта фиксируются до первого запуска обучения. Если определить их после, любая доработка превращается в подгонку под конкретную выборку — на потоковых данных точность проседает, а объяснить причину уже нельзя.
- Аудит данных. Смотрим, что реально есть: объём по классам, качество разметки, дубликаты, битые файлы, дисбаланс и утечки между обучающей и проверочной частями.
- Метрика качества. Берём не «точность вообще», а величину под цену ошибки: долю пропусков критичного класса, macro-F1 при перекосе классов, порог срабатывания.
- Базовая линия. Простая модель или предобученные веса без дообучения — чтобы знать планку, от которой отсчитывается прирост, и не спутать его с эффектом предобработки.
- Обучение. Подбираем архитектуру под задачу — свёрточную (ResNet, EfficientNet) или трансформерную (ViT) — и режим: сначала верхние слои, затем частичная разморозка, нормировка входов, балансировка классов, ранняя остановка по валидации.
- Отложенная выборка. Финальную проверку ведём на данных, не участвовавших ни в обучении, ни в подборе параметров, и по возможности — на снимке из другого периода.
- Анализ ошибок. Разбираем матрицу ошибок и самые уверенные промахи: часть закрывается доразметкой и порогом, часть — сменой постановки задачи.
- Внедрение модели. Сервис предсказаний, версионирование весов, порог уверенности и отказ от ответа вместо случайной метки, журналирование, контроль смещения входных данных и регламент дообучения.
Артефакты обучения: веса модели, разметка, регламент переобучения
После проекта у заказчика остаётся не «обученная модель как чёрный ящик», а комплект, который можно проверить, дообучить и передать другой команде. Ниже — что именно фиксируется и в каком виде.
- Веса модели — обученные параметры с закреплённым списком классов и порогом уверенности, ниже которого модель честно отказывается от ответа вместо угадывания.
- Код обучения и запуска — читаемые скрипты подготовки данных, тренировки и предсказаний, без скрытых внешних зависимостей и ручных правок «по месту».
- Размеченный набор изображений — обучающая, валидационная и тестовая части без пересечений между ними, чтобы метрики не завышались за счёт утечки кадров.
- Правила разметки — как трактуются спорные кадры, перекрытия и неоднозначные классы, какой объект считается слишком мелким для разметки и что делать с кадрами без объекта.
- Отчёт о качестве — матрица ошибок по классам: видно, где модель путает соседние категории и каких данных для них не хватает.
- Регламент переобучения — триггеры (падение доли верных ответов на потоке, смещение данных, появление нового класса), периодичность прогонов и ответственные на стороне заказчика.
- Воспроизводимый запуск — закреплённые окружение, зерно случайности и версии библиотек: обучение повторяется одной командой и даёт сопоставимый результат, а не «примерно такое же».
- Документация и передача — карта файлов и хранилищ, порядок действий при сбое, разбор решения с инженерами заказчика.
Такой комплект позволяет развивать модель своими силами или сменить подрядчика без потери наработок.
Кейс: контроль качества продукции на производственной линии
На линии контроль качества держался на выборочном осмотре: оператор снимал с конвейера каждую десятую деталь и оценивал её глазами. Дефект между проверками уходил дальше по потоку и всплывал на сборке — партию приходилось перебирать целиком, а причина сбоя к тому моменту терялась в статистике. Разбираем производственный кейс: как контроль качества перевели на классификацию изображений прямо в потоке.
Разметку строили не по студийным снимкам, а по кадрам с линии — с бликами на металле, вибрацией конвейера и разным освещением между сменами. Отдельно разметили пограничные случаи: царапины глубиной в доли миллиметра и допустимые следы обработки, которые браком не являются — без них классификатор срабатывал бы на норме. Модель обучили на семействе EfficientNet, классы сбалансировали по частоте, а порог решения подобрали по кривой «пропуск — ложная тревога», а не по одной точности.
После запуска пропуск дефектов сократился примерно в шесть раз, а ложные остановки линии упали до двух-трёх за смену вместо пятнадцати-двадцати. Проверку проходит каждое изделие, а не выборка, — доля осмотренной продукции выросла с 10% до 100%.
Смене передали не только модель: интерфейс с вердиктом и подсветкой проблемного участка, настраиваемый порог чувствительности и журнал срабатываний для разбора спорных кадров. Регламент обновления описывает, что делать при смене партии сырья или ремонте освещения: оператор помечает спорные кадры, и раз в несколько недель классификатор дообучают на них. Так снижение брака держится, а не откатывается через месяц.
Чем отличается дообучение от обучения модели с нуля?
Дообучение — это перенос знаний: берём сеть, которая уже обучилась на большом корпусе изображений, и адаптируем её под свои классы. Обучение с нуля начинается со случайных весов, и сети приходится осваивать всё сразу: и базовые признаки вроде контуров, текстур и градиентов, и специфику вашей задачи.
Когда данных мало — сотни или первые тысячи кадров на класс, — дообучение почти всегда выигрывает. Ранние слои фиксируют и не трогают, обучают только верхние и слой классификации: модель сходится за десятки эпох, а риск переобучения на малой выборке остаётся управляемым. Условие одно — классы должны быть похожи на то, что сеть уже видела: техника, товары, документы, природные объекты.
Собственная сеть нужна, когда предметная область далека от обычных фотографий: тепловизионные снимки, дефекты на металле, узкоспециальная съёмка. Перенос знаний здесь тянет смещение исходного корпуса, и точность упирается в потолок. Второе условие — данных достаточно, чтобы модель не запомнила выборку: обычно это десятки тысяч размеченных кадров плюс заметный дисбаланс классов, который приходится отдельно балансировать.
Практический критерий — объём и однородность данных, требования к точности и стоимость разметки. При малом датасете начинаем с дообучения и лишь затем постепенно размораживаем слои, если метрики перестали расти. Обучение с нуля без достаточного корпуса даёт результат хуже аккуратно настроенного переноса знаний, поэтому оба варианта мы сравниваем на отложенной выборке и выбираем тот, что устойчивее держится на контрольных данных.
Разбираем технические сомнения: качество, данные, поддержка
Перед стартом команда заказчика задаёт одни и те же инженерные вопросы: хватит ли размеченных данных, что делать с редкими классами, как проверяется устойчивость и кто дообучает модель после передачи. Ниже — короткие ответы о том, как это решается на практике.
Хватит ли наших данных для обучения?
Стартуем от нескольких сотен примеров на класс: берём предобученные веса и дообучаем модель на вашем наборе. Валидацию собираем стратифицированно, а нехватку данных закрываем аугментациями — и следим, где начинается переобучение.
Что делать при дисбалансе классов?
Комбинируем веса классов в функции потерь, пересэмплирование редких примеров и подбор порога решения. Качество считаем по precision и recall, плюс матрица ошибок каждого класса — иначе редкий дефект растворяется в общей точности.
Как проверяется устойчивость модели?
Держим отдельный набор снимков, сделанных в других условиях: другое освещение, ракурс, оборудование. Разрыв между обучающей и проверочной выборкой показывает переобучение раньше, чем модель уходит в работу, и указывает проблемные классы.
Кто дообучает модель после передачи?
Передаём веса, конфигурацию обучения, манифест датасета и скрипт запуска — дообучение на новых данных команда выполняет своими силами. Сопровождаем первые прогоны, чтобы добавление класса не ломало остальные.
Расскажите о задаче — вернёмся с планом и оценкой
Чтобы оценка проекта опиралась на факты, а не на догадки, нам нужен минимум вводных — обычно хватает одного разговора и пары файлов. Эти же данные лягут в основу технического задания, поэтому соберём их один раз и без повторных вопросов.
- Описание процесса: откуда приходит изображение, кто и как принимает решение по результату модели.
- Примеры снимков: несколько сотен кадров из реальных условий, включая сложные — смазанные, пересвеченные, с частично закрытым объектом.
- Текущая разметка: классы, объём набора, кто размечал и по какому правилу, что делать со спорными случаями.
- Требования к качеству: какая доля ошибок допустима и что дороже — пропустить объект или пометить лишний.
- Целевая среда: сервер, камера на объекте или мобильное устройство, ограничения по памяти и времени ответа.
- Доступы и данные: можно ли обрабатывать снимки на наших мощностях или их нужно держать внутри вашего контура.
- Что уже сделано: текущий код, ранее обученные модели и их метрики — чтобы не начинать с нуля.
Опишите задачу — вернёмся с планом работ и оценкой: этапы, что проверяем на каждом, какой результат считаем приёмкой. Если часть данных пока не собрана, обсудим задачу и подскажем, что критично, а что можно доуточнить по ходу.







