Проблемы архитектур систем Computer Vision
Владимир Хомяков, разработчик систем компьютерного зрения, Beltel Datanomics.
Рынок компьютерного зрения очень быстро развивается. Создаются новые устройства для выполнения алгоритмов нейронных сетей: FPGA, VPU, многоядерные процессоры и другие системы. Растет число топологий нейронных сетей, при этом они публикуются как open source, выкладываются уже предобученные веса нейронных сетей в открытый доступ, что только ускоряет их внедрение в проект. Развиваются различные подходы в компьютерном зрении: детекция, сегментация, подсчет потока людей, распознавание лиц, эмоций, возраста и гендера, и все это доступно для современных разработчиков.
Однако тенденция «Time to market» (быстрый вывод продукта на рынок) и сжатые сроки разработки приводят к тому, что отводится недостаточное время на проектирование и архитектуру решения. На начальном этапе также важно не забыть о системах контроля состояний и параметров устройств, например, неисправность камеры, перегрев, переполнение памяти и так далее. Спешка в запуске продукта приводит к созданию плохо масштабируемых монолитных систем, что в дальнейшем только ухудшает поддержку и развитие.
Какие последствия ждать от такого подхода
Для заказчиков:
- усложняется подключение новых протоколов, устройств и методов в систему;
- увеличивается время исправления ошибок;
- падает стабильность работы системы;
- увеличивается время поддержки, следовательно, и стоимость поддержки обходится дороже.
Для разработчиков:
- усложняются поддержка и дальнейшая разработка системы;
- последовательно накапливаются ранее допущенные ошибки, которые в дальнейшем могут полностью остановить систему;
- становится почти невозможной проверка новых гипотез;
- существенно усложняется расширение команды.
Почему так получается и как это исправить
Как отмечали выше, проблема заключается в концепции монолита и актуальном требовании «Time to market» и, как следствие, быстрой и некачественной проработки архитектуры системы.
Рассмотрим возможный сценарий построения решения в сжатые сроки:
- Выбор нейросети для поставленной задачи.
Этому шагу разработчики уделяют максимальное время и силы. Нейросеть – это основа системы, гарантия требуемой точности распознавания.
- Архитектура проекта.
Сроки поджимают и на проработку архитектуры выделяется минимум времени. Как следствие, получается некий монолит, где «всё включено» – прием видеопотока, подготовка для подачи этого видеопотока на нейросеть, само выполнение нейросети, СУБД, веб-интерфейс, REST API и прочие процессы.
- Добавление нейросетей для детектирования дополнительных случаев.
Основа системы – одна конкретная нейросеть, но решение начинает обрастать дополнительными.
- Раздувание общего окружения подсистем.
Здесь и возникают ошибки при расширении и доработке основной системы, теряется время на усложнившуюся отладку системы.
В решениях Datanomics для предотвращения обозначенных проблем и для быстрого вывода продукта на рынок мы используем блочную архитектуру проекта, в основе которой лежит контейнерная виртуализация Docker.
Docker – это платформа, облегчающая процесс сборки, запуска, управления и дистрибуции приложений. Все это она делает путем виртуализации операционной системы компьютера, на котором установлена и запущена.
Вариант архитектуры системы видеоаналитики, использующий блочный подход
- С видеокамер, установленных на объекте, передается видеопоток на блок «Обработка видеопотока». В данном блоке-контейнере docker происходит декодирование видеоинформации. Так как этот процесс требует ресурсов, то для масштабирования системы при увеличении количества камер можно использовать несколько таких контейнеров, размещенных на разных устройствах.
- Далее декодированная информация передается на блок нейросетей. Заметим, что нейросети, развернутые в docker-контейнерах, можно использовать на разных устройствах, в числе которых GPU и CPU, чем достигается полное масштабирование системы.
- Информационный поток с инференса нейросетей передается на блок «Сбор информации с нейросетей». На данном этапе происходит обработка распознанной информации и передача ее в СУБД.
- Параллельно данные передаются на блок формирования выходного видеопотока. Здесь на видеокадры, полученные с блока-декодирования, накладывается распознанная информация, например, выделяется детектированные объекты, наносится на кадры информация о зарегистрированном событии и другие данные.
- В итоге информация передается на вебсервис (WEB SERVICE), на котором может быть настроено визуальное отображение для пользователя, или имеет API-интерфейс для работы с этим информационным потоком.
Что получаем?
Результат – унификация всей системы. Отладка и оптимизация значительно упрощаются, достаточно протестировать любой из блоков. Появляется возможность делегирования конкретных задач аутсорсерам или другим отделам внутри компании. Система становится масштабируемой как в ширину, так и иерархично – расширение функционала путем добавления новых нейросетей. Один из важнейших результатов – кроссплатформенность системы, которую можно развернуть на любом оборудовании.