Nvidia Jetson Имплементация обученных нейронных сетей

Последняя статья нашего цикла посвящена непосредственному «выкатыванию модели в прод». Так на языке датасаентистов называется этап интеграции модели машинного обучения в архитектуру проекта.

Итак, у нас есть обученная нейронная сеть ssd_mobilenet из Tensorflow Zoo и Jetson Nano с предустановленными tensorflow и opencv, а также docker контейнер, в который упакованы указанные библиотеки. Давайте интегрироваться!

Кратко о содержании проекта

Для детекции выбрана сеть ssd_mobilenet, обученная в соответствии с шагами, описанными в предыдущей статье. Дополнительно граф сети был сконвертирован в Tensorrt и представлен в проекте в виде файла ssd_trt_graph.pb.

Главным скриптом проекта является test_detection.py. Данный скрипт осуществляет захват видеопотока с камеры и распознаванием объектов на фреймах. Его то мы и будем запускать. Для тестирования корректности работы камеры и библиотеки opencv рекомендуется сперва запустить скрипт test_display.py.

Познакомившись с проектом и убедившись в работоспособности вашей камеры, давайте делать следующий шаг.

Запуск детектирования в окружении python самого Jetson Nano

Для этого необходимо в терминале перейти в директорию с проектом и запустить главный скрипт следующей командой:

$ python3 test_detection.py

Первый запуск сети требует определенного времени и вашего терпения. Tensorflow запускает библиотеки для работы с графическим ускорителем и прогружает в память все необходимые элементы сети.

После успешной загрузки можно вертеть камеру и детектировать лодки, стоящие в порту.

Запуск детектирования в контейнере docker

Как было сказано ранее, у нас имеется контейнер с предустановленными tensorflow и opencv тех же версий, что и в окружении python самого Jetson Nano. Вы можете собрать данный контейнер самостоятельно, используя команду

$ sudo docker build -t tf_cv2:v1 .

Для запуска нашего решения необходимо в терминале выполнить немного запутанную команду

$ sudo docker run -it —runtime nvidia —device=/dev/video0:/dev/video0 —network host -v /home/bds/Projects/TF_object_detection:/home/detection_app -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY tf_cv2:v1

Если все выполнено верно, то перейдя в контейнере в директорию ~/home/detection_app вы обнаружите наш проект. Сложность команды объясняется тем, что нам очень хочется наблюдать результаты детектирования на экране, что требует дополнительных настроек.

После этого нам достаточно выполнить команду внутри контейнера docker

$ python3 test_detection.py

После аналогичной процедуры первой инициализации tensorflow мы будем наблюдать окошко с результатами детектирования

 

Как итог

Сегодня мы на практике познакомились с двумя способами имплементации нейронной сети, решающей задачу детектирования объектов, в Jetson Nano. Как можно видеть, сложности по интеграции никакой нет – процесс аналогичен имплементации на обыкновенный сервер. Стоит отметить способ с использованием docker контейнеров – такое решение с легкостью может быть масштабирована на другие Jetson Nano без их дополнительной настройки.

Для более подробного описания текущего решения стоит обратиться к ВИДЕО:

Добавить комментарий

Поиск по сайту