Компьютерное зрение on-premise выше SOTA, весом 4мб и на одном ядре CPU: как «Ночной глаз» превратился во всевидящее око. ai.. ai. computer vision.. ai. computer vision. ml.. ai. computer vision. ml. tape.. ai. computer vision. ml. tape. yolo.. ai. computer vision. ml. tape. yolo. искусственный интеллект.. ai. computer vision. ml. tape. yolo. искусственный интеллект. компьютерное зрение.. ai. computer vision. ml. tape. yolo. искусственный интеллект. компьютерное зрение. Машинное обучение.. ai. computer vision. ml. tape. yolo. искусственный интеллект. компьютерное зрение. Машинное обучение. Обработка изображений.

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

Итак.

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

Последние пару месяцев мы в 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. Обучение на предметных данных позволило перейти от общего распознавания к категориям, нужным продукту.

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

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

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

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

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

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

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

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

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

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

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

После испытаний естественным образом решили двигаться к локальному распознаванию. В коммерческой конфигурации рассматривается 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 и проверьте распознавание на своей задаче.

Автор: oopatow

Источник