В этой статье продолжаем онлайн‑дневник экспериментов с TAPe‑подходом к компьютерному зрению на COCO. Кратко: подняли точность до ~98% на двухпроцентной выборке, уменьшили количество ложных срабатываний и начали переход от поиска центроидов к детекции прямоугольников вокруг объектов.
Если вы тут впервые, сначала можно посмотреть:
базовую статью про TAPe+ML — TAPe + ML: универсальная архитектура компьютерного зрения
Как наш домашний НИИ обошёл DINOv2, ViT и десятки ML‑моделей в видео‑разметке
Небольшое напоминание: что такое TAPe и зачем он нам
TAPe (Theory of Active Perception) — это математическая теория и технология, которая описывает (и моделирует) механизм активного восприятия: она разбивает изображение на устойчивые признаки и задаёт структуру связей между ними. В TAPe+ML мы используем эти элементы и далее работаем уже с ними, а не с сырыми пикселями.
В рамках TAPe+ML TAPe‑алгоритмы превращают изображение в элементы TAPe — структурированные “строительные блоки” с известными связями между ними, давая компактное векторное представление вместо сырых пикселей. На этих представлениях мы уже строим эксперименты: от self‑supervised задач в духе DINO/iBOT до классических ML‑методов (кластеризация, поиск, классификация) и детекции объектов на COCO, за которыми как раз следим в этом дневнике.
Эксперименты с COCO: 2% данных и 98% точности
Продолжили работу с полным датасетом COCO (используя 2% из него для быстрых тестов - это около 2400 изображений).
Провели эксперименты с наведением и сбором данных используя инверсные пирамиды (точный TAPe-патч в середине, а дальше рост масштаба при удалении в стороны). Это привело к улучшению результатов до 98% точности в двухпроцентном датасете. По традиции дальше занимались удалением ложных срабатываний.
В рамках этих экспериментов мы:
работали с наведением и сбором TAPe-данных с использованием инверсных пирамид;
экспериментировали с количеством прототипов для каждого класса;
подбирали, сколько TAPe-патчей заднего фона и сколько объектов модель должна видеть во время тренировки.
Сколько прототипов и фоновых TAPe‑патчей нужно модели
Прототипы на класс
В самой модели провели много экспериментов со стороны количества прототипов для каждого класса (на данный момент времени лучшее число - 2).
Баланс фон / объекты
Также провели эксперименты, сколько модель должна увидеть TAPe-патчей заднего фона, а сколько конкретно объектов во время тренировки.
Пока лучший результат при использовании в два раза большего количества фона, чем объектов - что логично, потому как фон невыразительный и модели нужно больше его примеров для конкретного ответа. Но в тоже самое время слишкое большое количество фона в датасете приводит к тому, что модель определяет всё и вся как фон.
Как TAPe может заменить два этапа обучения эмбеддингов
Оба эти этапа могут быть заменены на этап тренировки с использованием подготовленных нами по логике TAPe объектов.
Также эта первичная тренировка может нам позволить тренировать операции по логике TAPe^ которые мы просто не знаем в форме записи в эмбеддинг, если так можно выразиться. Что означает, что мы можем попросту найти её выражение в форме для эмбеддингов и таким образом решить различные задачи взаимосвязи TAPe и ML.
Сейчас тренировка происходит в два этапа:
один этап для разделения эмбеддингов, чтобы в них не было большого пересечения данных и направление было относительно разное;
второй этап уже играет в сторону точности — то есть эмбеддинги сводятся к тому, чтобы один и тот же объект описывался похожими эмбеддингами.
От центроидов к боксам и ложные срабатывания
Переход к боксам
Проводили работу с переходом из нахождения центра объекта, как это было раньше, к нахождению прямоугольника, закрывающий объект. На первых стадиях сложно было судить о проценте правильности, но визуально выглядит хорошо.
Ложные срабатывания
Тогда же получилось в том числе снизить количество ложных срабатываний конкретно на объектах (их мы тоже прогоняем для тестов, без тренировки на датасете объектов) до всего 30 на всём датасете из ~1500 изображений.
Сколько “взглядов” нужно для детекции без классификации
Провели несколько экспериментов с архитектурами, проверяя, сколько “взглядов” модели вообще нужно для детекции (для которой не нужна классификация как таковая). Просмотра только по углам, а также в центр изображения хватило для детекции на COCO (опять таки, это без учета классификации, классификация твердо зависит от эмбедингов).
Что интересно - поле решения очень ассиметричное - средний процент нахождения центроида ~72% (ещё рано хвастаться - это центроид, а не бокс), но при этом для самых текстурных классов он за 90%, приближаясь к 93-94% для таких классов как “клавиши пианино”, “зебра”, “лодка” - то есть, для классов, где разница в очень богатой текстуре (пианино и зебры черно белые, лодки на море).
Худшее определение у вилок из-за их размера, а также у людей из-за количества вариаций в людях в датасете. Это достаточно частая проблема: иногда человек это всего лишь его лицо, иногда это кто-то со спины, иногда сидящий человек, и т.д. Это самый вариативный класс в датасете, но задача решается “стандартными” подходами – в нашем понимании стандарта.
TAPe‑патчи, эмбеддинги и “операции по логике TAPe”
Кстати, стандартные способы работы с пикселями в CV борются с тем, чтобы получать описательные вектора одного и того же размера для любой пиксельной области. В нашем же случае мы получаем такую возможность с самого начала, из самой концепции того, как находятся TAPe-данные.
Если рассматривать каждый патч TAPe-данных как токен, то изображение - это просто последовательность этих патчей, с которой можно очень удобно работать в рамках, например, iBOT-задач – мы уже знаем, что их мы можем решать с чрезмерным успехом.
Единственная проблема в том, что такие подходы зависят от Global Attention – что в свою очередь зависит от градиентного спуска. Эту вещь мы исследовали позже, но пока из изначального просмотра в TAPe данных уже присутствует структура, позволяющая проводить attention в намного более логичном виде.
Оба эти этапа могут быть заменены на этап тренировки с использованием подготовленных нами по логике TAPe объектов.
Также эта первичная тренировка может нам позволить тренировать операции по логике TAPe, которые мы просто не знаем в форме записи в эмбеддинг, если так можно выразиться. Что означает, что мы можем попросту найти её выражение в форме для эмбеддингов и таким образом решить различные задачи взаимосвязи TAPe и ML.
