Чтобы ответить на вопрос «Есть ли жизнь после Nvidia?», мы продолжаем поиск альтернативных вычислительных устройств, с помощью которых надеемся в дальнейшей перспективе решать задачи по распознаванию транспорта и пешеходов.
Мы — CodeInside — аутсорсинговая ИТ-команда, открывшая продуктовое направление и разработавшая ряд цифровых решений для города и бизнеса на основе нейросетевых технологий Machine Learning (ML) и Computer Vision (CV).
Наш флагманский продукт — Smart Traffic System (STS) — система мониторинга транспортных потоков для «Умного города» на основе ML и CV. Смена инфраструктуры для развертывания системы заставила нас, разработчиков, заняться поиском альтернатив линейки аппаратных и программных платформ Jetson от компании Nvidia. Это же, возможно, позволит присвоить системе STS статус «кроссплатформенная».
В предыдущей серии
В первой части исследования мы развернули STS на аппаратной платформе Rockchip RK3588S. Теперь переходим к работе с другим устройством, а именно — SOPHON AI Micro Server SE5-16. К счастью, в России есть официальный дистрибутер SOPHON — партнером вендора стала компания Softlogic.
GPU (графический процессор) — это процессор, предназначенный для...
... выполнения матричных операций. Он включает сотни или тысячи арифметико-логических устройств (ALU) и способен параллельно обрабатывать большое количество вычислений.
NPU (нейропроцессор) — это специализированный процессор для...
... ускорения задач нейронных сетей. NPU энергоэффективен и подходит для долгосрочного использования в непрерывных нейросетевых вычислениях.
TPU (тензорный процессор) — это специализированные процессоры, для...
... приложений искусственного интеллекта. Они предназначены для эффективного выполнения тензорных операций, что делает их особенно подходящими для задач глубокого обучения. TPU в 15-30 раз производительнее современных GPU и CPU в задачах inference, но из-за ограниченного производства могут быть дорогими.
Что имеем сейчас
В течение пилотирования устройства производилось исследование возможности запуска сервисов Smart Traffic System. Особое внимание требуют сервисы, которые в базовом варианте (при использовании Nvidia Jetson) используют ресурсы видеокарты. Такими сервисами являются Traffic detector и Plate recognition.
Traffic detector
Для переноса Traffic detector необходимо решить задачи:
Object detection — по детекции (распознаванию) объектов;
Object tracking — по трекингу (отслеживанию) объектов;
Задача Object detection решается с помощью детектора YOLOv8. Данный детектор достаточно распространённый и проблем с конвертацией для использования TPU на базе SOPHON не возникло. Конвертация произведена успешно для базового YOLOv8, а также для переобученной модели.
Почему мы не использовали YOLOv10?
Переход на более новые версии мы производим по мере необходимости. В основном он осуществляется из-за улучшения показателей производительности в новых версиях. Точность не сильно интересует, так как даже YOLOv5s модели хватает, чтобы в совокупности с трекером показывать 98% точности трекинга на Nvidia Jetson.
При решении задачи Object tracking возникла проблема. В базовом варианте при использовании Nvidia Jetson в качестве Object tracking алгоритма реализован NvDCF. NvDCF — это оптимизированный при помощи CUDA трекер DCF. Исходный код скрыт, так как для использования предоставляется только скомпилированный .so файл. Было решено исследовать примеры из официального репозитория:
DeepSORT;
Byte Tracker.
В репозитории представлено две реализации решения DeepSORT: с использованием OpenCV и с использованием BMCV — это специализированная библиотека и инструмент, разработанный компанией SOPHON (иногда также называемой Bitmain) для обработки задач компьютерного зрения на базе TPU. Решение на базе OpenCV на текущем этапе исследования показало достаточную точность, но недостаточную скорость inference.
В связи с этим было решено попробовать запустить решение DeepSORT BMCV, так как оно больше опиралось на библиотеки SOPHON и могло быть более оптимизированным, в сравнении с DeepSORT OpenCV. Изначально мы хотели добиться скорости обработки в 10 кадров в секунду и точность, сравнительную с Jetson. При использовании BMCV удалось достичь требуемой скорости inference, однако по точности результат ухудшился.
В итоге использовать DeepSORT оказалось невозможно, так как не получилось достигнуть требуемой скорости и точности в одном решении. DeepSORT работал либо с требуемой скоростью, но сильно отставал по точности, либо точностью, что соответствовала необходимой, но скорость обработки была примерно в 2 раза ниже необходимой скорости для работы в режиме реального времени.
Далее было произведено исследование Byte Tracker. На базе данного алгоритма удалось достичь требуемой точности и скорости обработки (не менее 10 FPS). Было проведено тестирование, результаты, которого представлены в таблице 1.
Таблица 1. Результаты тестирования.
Nvidia Jetson | SOPHON SE 5 | |
Из направления №1 | ||
Bus | 12 | 10 |
Car | 254 | 257 |
Truck | 7 | 4 |
В направлении №1 | ||
Bus | 14 | 13 |
Car | 235 | 228 |
Truck | 6 | 5 |
Ambulance | 0 | 1 |
Из направления №2 | ||
Bus | 4 | 1 |
Car | 74 | 71 |
Truck | 2 | 1 |
В направлении №2 | ||
Bus | 2 | 1 |
Car | 81 | 79 |
Truck | 1 | 2 |
Ambulance | 2 | 1 |
Из направления №3 | ||
Bus | 10 | 12 |
Car | 205 | 205 |
Truck | 5 | 5 |
Ambulance | 2 | 2 |
В направлении №3 | ||
Bus | 12 | 11 |
Car | 257 | 261 |
Truck | 8 | 5 |
Из направления №4 | ||
Bus | 2 | 2 |
Car | 129 | 129 |
Truck | 2 | 2 |
В направлении №4 | ||
Bus | 0 | 0 |
Car | 89 | 94 |
Truck | 1 | 0 |
Из таблицы 1 видно, что полностью результаты не соответствуют друг другу, однако сильно не отличаются. Из этого можно сделать вывод, что данный подход имеет хороший потенциал для развития.
Основная проблема при переносе детектора трафика — это работа в режиме реального времени. При использовании платформы Nvidia Jetson работа осуществляется с частотой в 10 FPS. При том, что с камеры видеопоток поступает с частотой в 25 FPS.
Почему именно 10 FPS?
10 FPS было выбрано не просто так. Этого количества кадров достаточно для того, чтобы несколько раз считать автомобиль при допустимых скоростных режимах и отследить его путь. Если брать больше кадров, то увеличится нагрузка на оборудование, однако точность останется прежней. А если использовать меньшее количество кадров, то с увеличением производительности будут потери в точности обработки.
Осуществляется это с помощью плагина Videorate из Gstreamer. При запуске на Sophon не использовалось средств Gstreamer, поэтому регулирование входной скорости кадров осуществлялось с помощью базовых средств Python и OpenCV. При пропуске 2 кадров трекер стал некорректно работать и постоянно менять идентификаторы у треков.
Но это были первые тесты, дальше - лучше :)
На данный момент получилось добиться корректной работы трекера в режиме реального времени с получением кадров по RTSP. Для этого была предпринята попытка отказаться от потоковой обработки кадров, оставив основной поток со всеми обработками и поток для отрисовки кадров. После изменения стандартных настроек трекера получилось приблизить точность к Jetson, но отличия до сих пор присутствуют.
Алгоритм работы не является специфичным. Средствами OpenCV производится получение кадра, он изменяется под размер модели нейронной сети, далее обрабатывается через YOLO, после чего результаты отправляются в ByteTracker. Результаты трекера обрабатываются нашим алгоритмом подсчета объектов по направлениям. И параллельным потоком производится визуализация обработанных кадров, как показано выше на Рисунке 2.
Таблица 2. Результат тестирования RTSP.
Nvidia Jetson | SOPHON SE 5 | |
Из направления №1 | ||
Bus | 21 | 16 |
Car | 110 | 108 |
Truck | 3 | 1 |
В направлении №1 | ||
Bus | 16 | 9 |
Car | 92 | 94 |
Truck | 3 | 1 |
Из направления №2 | ||
Bus | 18 | 8 |
Car | 77 | 78 |
Truck | 1 | 0 |
В направлении №2 | ||
Bus | 16 | 12 |
Car | 102 | 102 |
Truck | 3 | 1 |
Из направления №3 | ||
Bus | 0 | 0 |
Car | 55 | 56 |
Truck | 3 | 1 |
В направлении №3 | ||
Bus | 8 | 7 |
Car | 47 | 46 |
Truck | 1 | 1 |
Из направления №4 | ||
Bus | 3 | 4 |
Car | 37 | 40 |
Truck | 2 | 1 |
В направлении №4 | ||
Bus | 2 | 0 |
Car | 38 | 40 |
Truck | 2 | 0 |
Для улучшения точности требуется более глубокая настройка трекера.
Также была проверена возможность запуска 2-х потоков для Traffic detection. При работе в таком режиме скорость обработки увеличивается в среднем на 10-15 мс (110-130 мс/кадр), общее потребление ресурсов процессора в сумме составляет около 50%, общее потребление оперативное памяти поднимается до 700±5 МБ, а нагрузка на TPU варьируется от 30% до 40% при потреблении памяти TPU 110 МБ из 9 ГБ. Такие результаты получены без трансляции. Тесты проводились при RTSP-соединении с камерой.
При тестировании 3-х потоков нагрузка на процессор возросла до 75%, на TPU до 160 МБ потребления и 40-50% с общим потреблением оперативной памяти в 760-770 МБ, скорость обработки составляет 110-170 мс/кадр.
При тестировании 4-х потоков: процессор потребляет до 85%, TPU до 220 МБ потребления и 40-50% нагрузки, общее потребление оперативная память 850 МБ, скорость обработки составляет 110-190 мс/кадр.
Plate recognition
Задача распознавания номера состоит из 3-х этапов:
Детекция 4-х точек рамки номера;
Приведение рамки номера к положению параллельно горизонту;
Чтение текста с рамки номера.
Для реализации 2-го пункта не требуется аппаратных ускорителей, Поэтому перенос этого решения не вызывает никаких трудностей. Для пунктов 1 и 3 были разработаны «кастомные» модели, которые успешно конвертировались в необходимый для SOPHON формат.
Конвертация в onnx для Plate recognition описана в статье «Разработка производительного распознавателя автономеров для edge-устройств». А для YOLO конвертер уже присутствует в репозитории SDK от производителя. Для запуска любого примера требовалась сборка модели под формат bmodel. Как позже выяснилось, конвертация моделей из onnx в bmodel производится при помощи docker-образа, который разворачивается на стороннем ПК. На нем собирается модель, после чего ее можно переносить на SOPHON и использовать. Инструкция по развертыванию Docker на компьютере.
Сложности в работе с SOPHON
Первые трудности при работе с SOPHON начались чуть ли не сразу.
На устройстве была предустановлена ОС Debian 9, на которой нельзя установить Python той версии, которая требуется для запуска примеров. Найти необходимый образ ОС оказалось не сложно. Переустановка системы реализована достаточно удобно. Распаковываем архив с образом ОС на microSD карту, вставляем в SOPHON и ждем 5-10 минут.
Основные трудности начались после переустановки. Необходимо было установить все системные зависимости для возможности работы с компонентами, на которых выполняются вычисления нейронных сетей.
Дальнейший план исследования
По итогам пилотирования получилось полностью перенести Traffic tracker и Plate recognition на SOPHON. В режиме реального времени, при соединении с камерой по RTSP проект корректно работает. Основной целью дальнейшего исследования является улучшение ByteTracker, либо портирование других трекеров на SOPHON для повышения точности трекинга объектов.
Был ли у вас опыт переноса ПО на другую платформу? Будем рады почитать про ваш опыт в комментариях.