Компьютерное зрение on-premise выше SOTA, весом 4мб и на одном ядре CPU: как «Ночной глаз» превратился во всевидящее око

—

от автора

Вода камень точит. А у нас – не вода.

Итак.

Последние пару месяцев мы в Comexp Research Lab сотрудничаем с ГК «Барс» в рамках развития их проекта «Ночной глаз» – это такая система для лодок и катеров. Команда проекта использовала TAPe+ML, подготовила собственный датасет, обучила нашу модель распознавания и встроила ее в решение с RGB-камерой и тепловизором.

Камера помогает увидеть обстановку на воде. Компьютерное зрение помогает понять, что находится в кадре. Вместе они превращают систему ночного видения в инструмент, который не только показывает изображение, но и выделяет значимые объекты.

Система прошла испытания на воде и получила положительную оценку заказчика. Теперь мы вместе готовим локальную версию для коммерческих комплектов.

Зачем добавлять компьютерное зрение к ночному видению

В целом понятно зачем. Но есть нюансы. Ночью оператору катера недостаточно просто видеть изображение с камеры. Нужно различать объекты на воде, следить за курсом и вовремя замечать то, что требует внимания. В воде встречаются не только буи и катера, но и бревна и всякие другие препятствия, в темноте трудно различимые.

«Ночной глаз» уже решает задачу получения изображения при слабой освещенности. Добавление распознавания расширяет его возможности: система выделяет буи, лодки и другие целевые объекты прямо в кадре. Для судоводителя это дополнительная помощь при наблюдении за обстановкой. Не нужно постоянно искать каждый объект на экране самостоятельно: система обращает на него внимание.

Именно для этой задачи «Ночной глаз» выбрал TAPe+ML после проведения тестовых испытаний и сравнения, хех, с YOLO.

Что мы предоставили команде «Ночного глаза»

Как вы уже знаете, TAPe – это  фундаментальный феномен, подобно электричеству, которое не сводится к отдельному устройству или способу его использования. TAPe всем нам открывает другой способ работы с информацией и позволяет создавать решения, либо недоступные при привычных подходах, либо кратно эффективнее с точки зрения как требуемых ресурсов (деньги, время, человеки, серверы, GPU, электроэнергия и пр.), так и, собственно, результата.

Одно из таких применений TAPe – компьютерное зрение уровня передовых мировых моделей, которое можно переносить на разные вычислительные носители, а не привязывать к тяжелой инфраструктуре. В ближайшее время мы выкатим on-premise модель с невероятными характеристиками и подробнее расскажем о ней. «Ночной глаз» фактически стал первым, кто ее получил.

Если вы впервые читаете о TAPe, можно начать с наших предыдущих материалов:

Так вот. Напомним, что в нашей модели TAPe+ML высокое качество распознавания сочетается с компактной архитектурой: модель достигла 88,1% точности на ImageNet-1k и 65,3% mAP50–95 на COCO при менее чем 100 тысячах параметров. Это не предел. Читайте arXiv или краткое резюме на Хабре уважаемом.

Если говорить совсем скромно и просто, то для разработчиков и производителей оборудования это принципиально новая возможность строить интеллектуальные продукты вокруг любой собственной задачи. Например, развернуть компьютерное зрение уровня SOTA на своей камере, без доступа к интернету.

Вот какие инструменты команда «Ночного глаза» получила:

  • загрузку тренировочных и валидационных данных;

  • ручную и автоматическую разметку;

  • обучение моделей;

  • анализ результатов;

  • API для интеграции и автоматизации.

Мы предоставили им технологию и платформу. «Ночной глаз» подготовил предметные данные, обучил собственную модель и разработал программную часть, которая связывает распознавание с камерами и пользовательским интерфейсом.

Вот как «Ночной глаз» обучил модель под свою задачу

Работу над CV-компонентом со стороны «Глаза» вел Илья Егоров. До этого проекта Илья занимался ИИ-интеграциями и автоматизацией бизнес-процессов. Использование TAPe+ML позволило ему перейти к прикладной задаче компьютерного зрения, не начиная с разработки собственной архитектуры.

Илья отвечал за подготовку данных, обучение и интеграцию. Аппаратная команда развивала камеры и оборудование «Ночного глаза».Такое разделение работы позволило соединить две компетенции: знание продукта и условий его эксплуатации со стороны «Ночного глаза» и технологию распознавания со стороны TAPe.

Я разговаривал с ним два часа, чтобы вытащить из него фактуру для этой статьи, задав примерно 80 вопросов. Как и большинство технарей, он был предельно немногословен, зато предельно конкретен. Сторителлинга не вышло, но контента более чем достаточно. Кроме того, Илья так впечатлился проектом и технологией, что через неделю будет читать лекцию и проводить семинар для слушателей ВШЭ на тему того, как компьютерное зрение в исполнении TAPe может помочь руководителям принимать управленческие решения. Об этом мы расскажем в свое время (я видел план лекции, там все круто и интересно).

Датасет: RGB, ночная съемка и тепловизор

Исходный датасет включал RGB-изображения лодок, буев и других объектов. Затем команда дополнила датасет ночными записями, кадрами с собственных камер и тепловизионными изображениями.

На одном из поздних этапов выборка содержала 2205 тренировочных и 506 валидационных изображений.

Это была не просто задача набрать больше картинок. Требовалось представить объекты так, как их увидит устройство: с разных расстояний, на фоне воды и берега, в RGB- и тепловизионном каналах.

Бревна, малые препятствия и туман: каких данных не хватало

При подготовке модели оказалось, что доступность изображений не всегда совпадает с важностью объекта для пользователя. Фотографии лодок и буев найти проще, чем кадры плавающего бревна или камня, едва выступающего над водой. При этом именно такие небольшие препятствия интересуют команду «Ночного глаза»: их нужно замечать в условиях слабой видимости.

Например, для первой попытки обучения на бревнах Илья собрал около 15 изображений – десять для обучения и пять для валидации (да, нашей модели нужно вот столько изображений для обучения). Поэтому работу над этой категорией выделили в отдельное направление, а в первой версии сосредоточились на буях и плавсредствах. Следующий этап – дополнительные съемки и расширение модели на малые препятствия.

Важна была не только категория объекта, но и то, как его видит конкретная камера. В открытых наборах встречались хорошие тепловизионные изображения, однако команде требовалось больше ближних кадров с собственного оборудования. Также нужно было расширить разнообразие лодок, снятых камерами «Ночного глаза» в темноте: разные типы плавсредств, ракурсы и расстояния.

Отдельная задача – туман. На этапе подготовки модели таких сцен в датасете еще не было. Команда запланировала пополнять выборку во время выходов на воду, чтобы развивать распознавание на съемках из реальных условий эксплуатации.

Так работа с данными стала частью развития продукта. Для первого решения команда «Ночного глаза» подготовила модель под приоритетные объекты, а для следующих версий сформировала конкретную программу сбора изображений: туман, малые препятствия, бревна и дополнительные ночные и тепловизионные сцены.

Авторазметка и исправление аннотаций через API

Автоаннотация TAPe+ML ускорила подготовку данных. Вместо того чтобы расставлять каждую рамку с нуля, Илья проверял и корректировал предложения системы.

Параллельно команда очищала разметку: уточняла границы объектов, разрешала конфликты между классами и удаляла повторяющиеся боксы. В ходе работы были удалены 416 дублирующихся рамок на 282 файлах.

API помог автоматизировать часть операций над датасетом. Илья использовал его не только для распознавания, но и для подготовки данных: удалял ошибочно выставленные дублирующиеся боксы одного класса на объекте, менял классы у уже размеченных объектов – например, при объединении buoy и marker_buoy (буя со световым огнем). До запуска обучения он также получал количество боксов по каждому классу в тренировочной и валидационной выборках, чтобы понять, где нужно добавить, перенести или убрать кадры. Все эти операции Илья выполнял через запросы к API.

Буи и плавсредства – основные классы первой версии

Илья пересматривал набор категорий по мере обучения. Близкие классы объединяли, а приоритет отдавали объектам, важным для первого сценария использования: прежде всего буям и плавсредствам. Это позволило сосредоточить работу на конкретной пользовательской функции, а не на максимально длинном списке распознаваемых сущностей.

От обученной модели к работе на воде

После обучения Илья подключил модель к камерам «Ночного глаза». На испытаниях система получала изображения с RGB-камеры и тепловизора, распознавала объекты через наш API и выводила рамки с названиями классов в пользовательском интерфейсе.

В выбранном запуске модель достигла F1 0,736 и mAP50 0,756. Показатели характеризуют качество обнаружения объектов: баланс между пропусками и ложными срабатываниями, правильность определения классов и расположения рамок. За этим результатом стояла работа с водными сценами: сбор кадров, проверка разметки, уточнение классов и добавление ночных и тепловизионных изображений. 

На воде команда проверила, как обученная модель работает в составе «Ночного глаза».

Собственная модель «Ночного глаза» на TAPe+ML: классы объектов для водной среды и результаты обучения

Собственная модель «Ночного глаза» на TAPe+ML: классы объектов для водной среды и результаты обучения

Как модель научилась отличать буй от лодки

Для «Ночного глаза» важно не просто найти объект в кадре, а определить его категорию. Буй и лодка требуют разной интерпретации, хотя на небольшом тепловизионном изображении могут выглядеть похоже.

Эту разницу показывает один из примеров подготовки модели. На одном и том же изображении базовая модель обозначила небольшие цели на воде как boat, а модель «Ночного глаза» использовала категорию buoy. Обучение на предметных данных позволило перейти от общего распознавания к категориям, нужным продукту.

Интеграция с камерами и интерфейсом через API

Следующий шаг – связать распознавание с камерами и интерфейсом. В испытательной конфигурации RGB-камера и тепловизор подключались к мини-ПК RDBox. Для работы с нашим API использовали интернет, раздаваемый с телефона.

TAPe+ML получала кадры и возвращала координаты обнаруженных объектов. Написанный командой «Ночного глаза» Python-сервис наносил рамки на изображения и выводил результат в интерфейсе системы.

Таким образом, обученная модель стала частью собственного решения «Ночного глаза». На экране пользователь видит не только изображение с камеры, но и выделенные объекты – результат совместной работы аппаратной системы, нашей модели распознавания и программной интеграции партнера.

Испытания на воде: лодки на 500 метрах и ложное срабатывание под мостом

На нескольких полевых испытаниях команда проекта проверила всю цепочку: получение изображений, передачу кадров, распознавание и отображение объектов в интерфейсе. Система работала с реальными камерами в водной среде. 

Например, TAPe+ML обнаружила лодки на расстоянии 500 метров – по описанию участников испытаний, на изображениях с тепловизора и обычной камеры в тот момент не было видно «даже точки».

Конечно, система еще работает не идеально: однажды при проходе под мостом она распознала красные блики от его габаритных огней как буй – скорее всего, потому, что обучена распознавать в том числе буи с красными огнями. Это решается дообучением модели – а именно добавлением в датасет свежих кадров с лодок и добавлением нового класса «мост».

От испытаний к локальной коммерческой версии

После испытаний естественным образом решили двигаться к локальному распознаванию. В коммерческой конфигурации рассматривается Android-планшет с RGB-камерой и тепловизором.

Локальная обработка означает, что CV-функция не будет зависеть от соединения с облачным API. Для производителя это возможность поставлять распознавание как часть комплекта оборудования.

Работа над локальной версией для «Ночного глаза» стала одним из этапов оптимизации TAPe+ML под процессорное ядро. Первоначальная поставка для проекта занимала около 28–30 МБ. Эта версия работала на RDBox с загрузкой ядра всего 30–60%.

Затем мы продолжили оптимизацию библиотек и исполнения. Текущая локальная поставка занимает около 4,2 МБ. Модель помещается во внутренней памяти процессора и после первоначальной загрузки работает там – без постоянного переноса ее параметров из оперативной памяти. На протестированных CPU обработка кадра на одном ядре занимает 8,6–15,8 мс.

Для коммерческих комплектов «Ночного глаза» мы готовим локальное исполнение, обновления, активацию и поддержку. Команда проекта также планирует расширить набор распознаваемых объектов, включая малые препятствия на воде. Модель можно развивать вместе с продуктом: добавлять целевые съемки и обучать новые категории.

Как распознавание повышает ценность «Ночного глаза»

Параллельно с технической работой мы обсуждаем коммерческую модель «вендор — интегратор» и совместный заработок на всех этапах. Одна единица использования соответствует одному обработанному кадру. Стартовый пакет можно включать в стоимость комплекта, а затем пополнять по мере эксплуатации.

Такой подход позволяет нам учитывать разные сценарии. Частный катер используется сезонно и сравнительно недолго. Чартерное судно работает интенсивнее и чаще нуждается в пополнении.

В поставку предполагается включить не только использование модели, но и ее обновления и поддержку интеграции. Команда рассматривает и дальнейшее продвижение продукта на рынках ОАЭ и Европы.

Возможности модели (SOTA, 4,2 МБ, одно ядро CPU) открывают, как говорится, широкие возможности и для производителей, и для нас. Присоединяйтесь все, кому интересно.

Как обучить модель для своей задачи

С TAPe ML вы можете обучить модель на своих данных и встроить распознавание в собственный продукт – систему наблюдения, промышленное оборудование или пользовательский сервис. На платформе ml.comexp.net собраны инструменты для всего цикла: загрузки изображений, ручной и автоматической разметки, обучения, проверки результатов и интеграции. Детекция, сегментация, классификация, object tracking. Все там.

Начать можно с готовой модели: загрузить изображение и посмотреть, какие объекты она обнаружит. Базовая модель обучена на COCO и распознает 80 классов. Для собственных объектов и категорий можно создать и обучить отдельную модель.

Дальнейшая работа проходит в несколько шагов:

  1. Загрузить данные своей задачи. На платформе доступны загрузка тренировочных и валидационных изображений, подготовка разметки и обучение. В «Ночном глазе» команда использовала RGB-кадры, ночные записи и тепловизионные изображения — данные с тех камер и из тех условий, в которых предстояло работать системе.

  2. Разметить первые примеры и подключить авторазметку. Необязательно вручную размечать весь набор до первого обучения. После начальной разметки модель предлагает объекты на остальных изображениях, а пользователь подтверждает или исправляет результат. Такой цикл позволяет пополнять датасет, проверяя предложения системы, а не рисуя каждую рамку с нуля.

  3. Обучить модель и проверить результат. Платформа предоставляет инструменты обучения и анализа результатов. Команда «Ночного глаза» использовала их, чтобы пересматривать набор классов, исправлять аннотации и дополнять данные ночными и тепловизионными сценами.

  4. Подключить распознавание к своему продукту. Через API можно получать результаты обнаружения объектов и использовать их в собственном приложении. API также позволяет автоматизировать подготовку данных: в «Ночном глазе» с его помощью удаляли дублирующиеся рамки, объединяли классы и проверяли количество размеченных объектов в тренировочной и валидационной выборках.

  5. Получить локальную версию для своего оборудования. После обучения мы можем подготовить исполнение под процессор заказчика. Текущая локальная поставка занимает около 4,2 МБ и работает на одном ядре CPU — без обязательной видеокарты (как мы и грозились) и передачи кадров в облачный API.

Проектная команда «Ночного глаза» во главе с Ильей прошла этот путь: подготовила данные, обучила модель, встроила ее в систему и проверила работу на воде. TAPe ML предоставила инструменты для каждого этапа — от разметки до интеграции. Технология сочетает качество распознавания уровня SOTA с локальным исполнением на одном ядре CPU. Кажется, мы это уже говорили, но кашу маслом не испортишь.

Загрузите свои изображения на ml.comexp.net и проверьте распознавание на своей задаче.

ссылка на оригинал статьи https://habr.com/ru/articles/1095492/