Как мы ушли от всем известного способа градиентного спуска
Продолжаю дневник разработки "Суперраспознавалки" для демо/пилота. День третий. Основная задача: настроить TAPe-модель на датасет типа COCO под задачу detection. Вторая - дать клиентам возможность добавлять собственные классы к уже существующим. Ну и далее, при необходимости, полная адаптация модели под конкретного заказчика. Поскольку у нас есть Теория активного восприятия с ее методами, на выходе заказчик должен получить кратную эффективность и кратную экономию ресурсов.
В первые два дня настраивали базовую струтуру сегментации, детекции и классификации. Модель решает задачи на обучении уже 115 тыс параметров – в отличии от YOLO, которой мало 2 млн + параметров.
Начало здесь
Второй день здесь
Про архитектуру TAPe+ML здесь
Тут сравнение трех десятков кодировок в задаче сегментации видео в DBSCAN (включая ViT, DINO) с TAPe
День 3
Сегодня занимаемся исправлением количества ложных срабатываний. Проблема ложных срабатываний в целом в том, что мы смотрим в первую очередь на текстуру изображения (из-за особенностей методов TAPe). Поэтому приходится прибегать к менее-обычным способам для обучения разделения между текстурой заднего плана (в каком-либо виде, будь это снег, или трава) и текстурой самого объекта.
Сейчас эта проблема решается условно через определенные движения области сбора данных для выявления текстур, которые, возможно, не были найдены в области, расположенной стандартным способом (то есть начальным разбиением изображения на патчи). Это позволяет сильно уменьшить количество ложных срабатываний.
На данный момент времени около 220 объектов срабатывают без ложных срабатываний в целом. Проблема происходит только в изображениях с большим количеством маленьких деталей по типу гравия, или же травы, при этом не уменьшая общее количество правильных нахождений.
В целом, здесь помогают стандартные ML-подходы по типу увеличения батчей, чтобы сгладить ошибки. Были эксперименты с проведением аугментаций, которые не привели к улучшению результатов: большая часть аугментаций просто повторяют уже существующие данные.
Также начали эксперименты с добавлением цветовых каналов. Однако проведенные эксперименты с цветами в простой схеме объединения features по каналам не дало желаемых результатов: даже с greyscale мы забираем столько информации, что цветовая гамма по большей части их просто дублирует. Это приводит к тому, что модель опирается слишком сильно на общие черты, не “видя” при этом выдающиеся черты разницы цвета. Что в то же самое время может и являться хорошей фичей, а не багом, потому что через разницу в текстуре мы, по идее, должны найти разницу в любом случае (если это реальное изображение). Поэтому мы не полагаемся в решении на конкретную задачу, где цвет более релевантен, а полагаемся на общее решение детекции в целом.
Также на заднем плане были закончены эксперименты с разными архитектурами (эксперименты продолжались параллельно несколько дней). Нашли самую лучшую архитектуру на данный момент (самая логичная по её смыслу, как нам кажется). Тут без подробностей, но мы ушли от всем известного способа градиентного спуска, что позволяет нам после тренировки модели прийти к глобальному минимуму решения (или к чему-то очень близкому к этому – всё равно есть зависимость от задачи).
Мы собираем данные из патчей определенным образом, объединяем их в общее описание, а затем уже классифицируем конкретно эти объединения по тому, есть там объект или его нет. Классификация происходит за счет общих описаний каждого класса, который модель видит - и не тренируется отдельно, потому что исходит натурально из первичной тренировки векторов, а затем сводится к одному описанию через k-means.
В результате выходит модель с очень малым количеством ложных срабатываний – с которыми, впрочем, мы все равно боремся. Плюс есть некие проблемы центровки, так что скорее всего количество параметров увеличится. Но все равно, модель работает чрезвычайно быстро. Тренировка как таковая проходит на CPU (так проще).