НАСТРОЙКА И КОНФИГУРИРОВАНИЕ ПРОГРАММНО-АППАРАТНОЙ ПЛАТФОРМЫ NVIDIA JETSON TX2 В СОСТАВЕ МУЛЬТИКАМЕРНОЙ СИСТЕМЫ ТЕХНИЧЕСКОГО ЗРЕНИЯ

Ю. В. Соколовский

Инженер-программист 1 категории

uvsokolovsky@robotics.by

Введение

В настоящий момент компанией NVIDIA разработана серия программно-аппаратных платформ, предназначенных для использования в составе систем технического зрения беспилотных летательных аппаратов $($БПЛА$)$, различных роботов и «умных» электронных устройств.

Одной из ведущих программно-аппаратных платформ, возможных к применению в различных устройствах промышленного назначения, является NVIDIA Jetson TX2 с набором инструментов JetPack 4.2, которая обладает низким уровнем энергопотребления, обеспечивая вычислительную производительность на уровне сервера для любых современных устройств. NVIDIA Jetson TX2 $($рисунок 1$)$ оснащена 256-ядерным графическим процессором NVIDIA с архитектурой Pascal, 64-битным модулем CPU Complex ARMv8 с шестью ядрами и 8 ГБ памяти LPDDR4 с 128-битным интерфейсом. Модуль CPU Complex объединяет в себе четырехъядерный кластер ARM Cortex-A57 и два ядра NVIDIA Denver 2. NVIDIA Jetson TX2 имеет габариты 50 х 87 мм, ее вес составляет 85 г, а уровень энергопотребления при стандартной нагрузке – всего 7,5 Вт.

Программно-аппаратная платформа NVIDIA Jetson TX2

Рисунок 1 - Программно-аппаратная платформа NVIDIA Jetson TX2

Настройка и конфигурирование NVIDIA JETSON TX2

Важным этапом подготовки NVIDIA Jetson TX2 для использования в составе мультикамерной системы технического зрения является установка пакета Jetpack 4.2. Для этого необходимо перейти на официальный сайт производителя по ссылке $($рисунок 2$)$.

Страница NVIDIA JetPack 4.2

Рисунок 2 – Страница NVIDIA JetPack 4.2

С сайта производителя необходимо скачать и проинсталлировать менеджер установки NVIDIA SDK Manager для JetPack 4.2 $($рисунок 3$)$, который предназначен для программно-аппаратных платформ Jetson AGX Xavier, TX2, and Nano Developer Kits. Подробнее о SDK можно прочитать в NVIDIA SDK Manager Documentation $($рисунки 4-5$)$.

Скачивание NVIDIA SDK Manager для JetPack 4.2

Рисунок 3 – Скачивание NVIDIA SDK Manager для JetPack 4.2

Ссылка на документацию NVIDIA SDK Manager

Рисунок 4 – Ссылка на документацию NVIDIA SDK Manager

Документация NVIDIA SDK Manager

Рисунок 5 – Документация NVIDIA SDK Manager

Установку NVIDIA SDK Manager будем осуществлять на виртуальную машину с операционной системой Linux Ubuntu 16.04, для чего необходимо скачать пакет установки $($рисунок 6$)$ и скопировать или перенести его в предварительно созданную папку $($рисунок 7$)$.

Скачивание пакета установки NVIDIA SDK Manager в Linux Ubuntu 16.04

Рисунок 6 – Скачивание пакета установки NVIDIA SDK Manager в Linux Ubuntu 16.04

Копирование пакета установки NVIDIA SDK Manager в отдельную папку

Рисунок 7 - Копирование пакета установки NVIDIA SDK Manager в отдельную папку

Пакет установки NVIDIA SDK Manager предусматривает возможность запуска инсталляции как путем нажатия на него $($открывается окно установки$)$, так и через терминал. Для того, чтобы воспользоваться последним, способом следует в папке с пакетом открываем терминал и ввести команду для установки пакета:

sudo apt install ./sdkmanager_0.9.12-4180_amd64.deb

После чего ввести пароль для продолжения установки с правами администратора $($рисунок 8$)$.

Установка пакета NVIDIA SDK Manager

Рисунок 8 – Установка пакета NVIDIA SDK Manager

После завершения установки пакета раскроется окно менеджера $($рисунок 9$)$.

Окно запуска менеджера NVIDIA SDK Manager

Рисунок 9 - Окно запуска менеджера NVIDIA SDK Manager

Запуск sdk так же возможен двумя способами: нажатием кнопки Launch или через терминал. Для того, чтобы воспользоваться вторым способом $($рисунок 10$)$, необходимо открыть терминал и ввести команду:

sdkmanager

Запуск NVIDIA SDK Manager с помощью эмулятора терминала

Рисунок 10 – Запуск NVIDIA SDK Manager с помощью эмулятора терминала

В открывшемся окне $($рисунок 11$)$ необходимо ввести данные своей учетной записи, под которой вы зарегистрированы на developer.nvidia.com.

Окно авторизации NVIDIA SDK Manager

Рисунок 11 – Окно авторизации NVIDIA SDK Manager

После нажатия кнопки Login, появиться сообщение об разрешении использования data collection $($рисунок 12$)$, на этом этапе от данного шага можно отказаться, так как на процесс дальнейшей установки это не повлияет.

Окно выбора использования data collection в NVIDIA SDK Manager

Рисунок 12 – Окно выбора использования data collection в NVIDIA SDK Manager

После чего появится окно конфигурации программного обеспечения и оборудования $($рисунок 13$)$.

Окно конфигурирования программного обеспечения и оборудования

Рисунок 13 – Окно конфигурирования программного обеспечения и оборудования

В конфигурации оборудования Target Hardware следует выбрать Jetson TX 2 $($рисунок 14$)$.

Выбор программно-аппаратной платформы NVIDIA Jetson TX 2

Рисунок 14 – Выбор программно-аппаратной платформы NVIDIA Jetson TX 2

После выбора устройства и нажатия кнопки OK следует перейти к шагу 2 - установке компонентов $($рисунок 15$)$.

Окно установки компонентов JetPack 4.2

Рисунок 15 – Окно установки компонентов JetPack 4.2

В состав компонентов для установки входят на хостовой машине:
  • CUDA;
  • компьютерное зрение - Computer Vision $($включает в себя OpenCV и VisionWorks$)$;
  • набор инструментов разработчика - Developers Tools $($включает NVIDIA Nsight Graphics, NVIDIA Nsight Systems, DevTools Documentation$)$.

На программно-аппаратную платформу NVIDIA Jetson TX2 устанавливаются: операционная система Jetson $($файловая и операционная системы, драйверы и Flash Jetson TX2$)$ и JetsonSDK.

Jetson SDK включает в себя следующие компоненты:
  • CUDA $($CUDA Toolkit for L4T$)$;
  • AI $($cuDNN и TensorRT$)$;
  • компьютерное зрение - Computer Vision $($включает в себя OpenCV и VisionWorks$)$;
  • пакет для работы с Multimedia $($Multimedia API$)$.

Нажав Expand all можно просмотреть полный список устанавливаемых компонентов $($рисунки 16-18$)$.

Список компонентов, устанавливаемых на JetPack 4.2 на хостовую машину

Рисунок 16 – Список компонентов, устанавливаемых на JetPack 4.2 на хостовую машину

Список компонентов, устанавливаемых на программно-аппаратную платформу NVIDIA Jetson TX2

Рисунок 17 - Список компонентов, устанавливаемых на программно-аппаратную платформу NVIDIA Jetson TX2

Список компонентов, устанавливаемых на программно-аппаратную платформу NVIDIA Jetson TX2

Рисунок 18 - Список компонентов, устанавливаемых на программно-аппаратную платформу NVIDIA Jetson TX2

CUDA - это программно-аппаратная архитектура параллельных вычислений, которая позволяет существенно увеличить вычислительную производительность благодаря использованию графических процессоров фирмы NVIDIA. CUDA Toolkit предоставляет собой среду разработки для разработчиков C и C ++, создающих высокопроизводительные приложения с GPU-ускорением с библиотеками CUDA. Инструментарий включает в себя:
  • Nsight Eclipse Edition $($средства отладки и профилирования, а также набор инструментов для кросс-компиляции приложений$)$;
  • NVIDIA Nsight Systems $($инструмент профилирования для всей системы с минимальными издержками, предоставляющий разработчикам идеи для анализа и оптимизации производительности программного обеспечения$)$;
  • NVIDIA Nsight Graphics $($это автономное приложение для отладки и профилирования графических приложений$)$.
Инструментарий для работы с системами искусственного интеллекта $($AI$)$ представлен:
  • сuDNN $($CUDA Deep Neural Network$)$ – библиотекой, которая предоставляет высокопроизводительные примитивы для систем глубокого обучения и включает поддержку сверток, функций активации и тензорных преобразований;
  • TensorRT - это высокопроизводительной средой для глубокого обучения для классификации изображений, сегментации и нейронных сетей обнаружения объектов. Она ускоряет процесс глубокого обучения, а также уменьшает объем памяти, выделяемой во время выполнения, для сверточных и неконвенционных нейронных сетей. TensorRT специально предназначена для быстрого и эффективного запуска уже обученной сети на графическом процессоре с целью получения результата $($процесса, который называется Inference$)$.
Система компьютерного зрения включает в себя:
  • OpenCV - являющуюся лидирующей библиотекой с открытым исходным кодом для компьютерного зрения, обработки изображений и машинного обучения, и теперь имеет ускорение на GPU для работы в реальном времени;
  • VisionWorks - это пакетом разработки программного обеспечения для систем компьютерного зрения и обработки изображений.
Пакет для работы с Multimedia $($Multimedia API$)$ предоставляет API низкого уровня для гибкой разработки приложений, в том числе:
  • API приложения камеры, предлагающий низкоуровневый API-интерфейс с синхронизацией кадров для приложений камеры с возможностью управления параметрами камеры для каждого кадра, поддержкой нескольких $($в том числе синхронизированных$)$ камер и вывода потока EGL;
  • API драйвера датчика$($сенсора$)$ содержащий: API V4L2 $($обеспечивает функции декодирования, кодирования, преобразования и масштабирования видео$)$ и V4L2 $($обеспечивает функции управления скоростью передачи, предустановки качества, кодирования с низкой задержкой, временный компромисс, карты векторов движения и т.д.$)$
Для установки на хостовой машине будет необходимо создать папки, предназначенные для скачивания и установки пакетов sdk_downloads и nvidia_sdk, и указать их в качестве папок назначения в менеджере установки NVIDIA SDKManager$($рисунки 19-20$)$. Создание директорий для скачивания и установки JetPack 4.2

Рисунок 19 - Создание директорий для скачивания и установки JetPack 4.2

Выбор директорий для скачивания и установки JetPack 4.2 в NVIDIA SDK Manager

Рисунок 20 - Выбор директорий для скачивания и установки JetPack 4.2 в NVIDIA SDK Manager

После указания и выбора папок следует закрыть DOWNLOAD & INSTALL OPTION, подтвердить согласие с лицензионным соглашением и нажать CONTINUE, для перехода к следующему шагу установки $($рисунок 21$)$.

Подтверждение согласия с лицензионным соглашением NVIDIA

Рисунок 21 – Подтверждение согласия с лицензионным соглашением NVIDIA

В появившейся форме ввести пароль администратора для продолжения установки $($рисунок 22$)$.

Форма для подтверждения прав администратора и продолжения установки

Рисунок 22 – Форма для подтверждения прав администратора и продолжения установки

После чего начнется загрузка и установка компонентов на хостовую машину $($рисунок 23$)$.

Загрузка и установка компонентов JetPack 4.2 на хостовую машину

Рисунок 23 – Загрузка и установка компонентов JetPack 4.2 на хостовую машину

При завершении установки компонентов на хостовой машине будет предложено выполнить установку компонентов на программно-аппаратную платформу NVIDIA Jetson TX2.
После чего следует перейти в режим ручной $($рисунок 24$)$. установки и выполнить шаги согласно предлагаемой инструкции:
  1. Отключить устройство отсоединив адаптер питания;
  2. Заново присоединить адаптер;
  3. Нажать кнопку POWER для включения устройства;
  4. Нажать и удерживать кнопку RECOVERY FORCE;
  5. Нажать и отпустить кнопку RESET $($пока держите нажатой кнопку RECOVERY FORCE$)$;
  6. Подождать 2 секунды и отпустить кнопку RECOVERY FORCE.
Окно ручного режима установки JetPack 4.2

Рисунок 24 – Окно ручного режима установки JetPack 4.2

После установки операционной системы $($Ubuntu 18.04$)$ на программно-аппаратной платформе NVIDIA Jetson TX2 на хостовой машине появляется окно автоматического продолжения установки с просьбой ввести IP, имя пользователя и пароль. Для получения IP следует в NVIDIA Jetson TX2 ввести в терминале ifconfig и получить требуемый IP-адрес, после чего ввести, имя пользователя и пароль, после чего продолжится установка компонентов $($рисунки 25-26$)$.

Установка компонентов на программно-аппаратную платформу NVIDIA Jetson TX2

Рисунок 25 – Установка компонентов на программно-аппаратную платформу NVIDIA Jetson TX2

Рисунок 26 – Установка компонентов на программно-аппаратную платформу NVIDIA Jetson TX2

Рисунок 26 – Установка компонентов на программно-аппаратную платформу NVIDIA Jetson TX2

После завершения установки $($рисунок 27$)$ следует завершить подготовку и настройку программно-аппаратной платформы NVIDIA Jetson TX2 для использования в составе мультикамерной системы технического зрения. В виду малого объема собственного накопителя $($32 ГБ$)$. Следует доукомплектовать программно-аппаратную платформу твердотельным накопителем SSD $($который будет использоваться для установки программного обеспечения$)$ и SD картой памяти $($используемой в качестве Swap раздела$)$.

Завершение установки Jetpack 4.2

Рисунок 27 – Завершение установки Jetpack 4.2

Для контроля использования ядер и оперативной памяти следует установить утилиту, предназначенную для вывода на терминал списка запущенных процессов и информации о них $($монитор процессов$)$. В данном случае была установлена утилита htop, для чего в окне терминала была введена команда:
sudo apt-get install htop
Далее следует отформатировать SSD $($в нашем случае был взят SSD объёмом 512 Гб$)$ и SD карту памяти $($была взята карта памяти объемом 256 Гб$)$, которая будет использована как swap раздел. С целью выполнения описанных выше действий используем встроенную в Ubuntu утилиту $($рисунки 28-29$)$.

Использование встроенной утилиты для форматирования твердотельного накопителя SSD и SD карты памяти

Рисунок 28 – Использование встроенной утилиты для форматирования твердотельного накопителя SSD и SD карты памяти

Пример использования утилиты для форматирования

Рисунок 29 – Пример использования утилиты для форматирования

Для установки программного обеспечения $($например, сборки Qt, Qt-creator и т.п.$)$ требуется объём памяти больше, чем предоставляет платформа NVIDIA Jetson TX2. Для решения данной проблемы была использована в качестве swap раздела SD карта памяти объемом 256 Гб, вставленная в разъем кардридера имеющейся платформы. Для использования SD карты памяти с помощью встроенной утилиты discs было выполнено ее форматирование в формате Linux Swap Partition $($для этого следует нажать на SD -> форматировать –> тип Other, и выбирать раздел Linux Swap Partition$)$. После форматирования нажать на кнопку Activate selected swap partition $($рисунки 30-32$)$.

Выбор типа форматирования для SD карты памяти

Рисунок 30 – Выбор типа форматирования для SD карты памяти

Выбор форматирования SD памяти как Swap раздела

Рисунок 31 – Выбор форматирования SD памяти как Swap раздела

Активация SD карты памяти в качестве Swap раздела

Рисунок 32 – Активация SD карты памяти в качестве Swap раздела

Проверка настроек и работоспособности программно-аппаратной платформы с помощью примеров

Для проверки работоспособности программно-аппаратной платформы NVIDIA Jetson TX2 был выполнен ряд тестовых примеров, в частности для CUDA, VisionWorks, Multimedia API. Для выполнения, примеры следует предварительно собрать. Тестовые примеры находятся:
  • для CUDA в папке /usr/local/cuda-10.0/samples;
  • для VisionWorks в папке home/VisionWorks-SFM-0.90-Samples/bin/aarch64/linux/release;
  • для Multimedia API в папке usr/src/tegra_multimedia_api/samples.

Для сборки примеров необходимо выполнить Makefile находящийся в папке с примерами командой:
$ sudo make –j8

Предварительно, для ускорения сборки, следует запустить дополнительные ядра программно-аппаратной платформы с помощью специального bash-скрипта или командами:
$ sudo echo 1 > /sys/devices/system/cpu/cpu1/online
$ sudo echo 1 > /sys/devices/system/cpu/cpu2/online

Введение NVIDIA Jetson TX2 Development Kit приводит к появлению нового инструмента nvpmodel-интерфейса командной строки. Nvpmodel представляет пять различных «режимов» на NVIDIA Jetson TX2. В таблице 1 приведены режимы, используемые ядра ЦП и максимальная частота используемого ЦП и ГП. Тестирование осуществлялось на всех режимах. Результаты выполнения тестовых примеров для CUDA и WorkVision представлены в таблице 2.

Таблица 1- Параметры nvpmodel-режимов.

РежимНазвание режимаDenver 2ЧастотаARM A57ЧастотаЧастота GPU
0Max-N22.0 GHz 42.0 GHz1.30 Ghz
1Max-Q041.2 Ghz0.85 Ghz
2Max-P Core-All21.4 GHz41.4 GHz1.12 Ghz
3Max-P ARM042.0 GHz1.12 Ghz
4Max-P Denver12.0 GHz12.0 GHz1.12 Ghz


Таблица 2 - Результаты выполнения тестовых примеров для CUDA и WorkVision.

Тестовый примерКоличество fps в зависимости от режима
0 $($Max-N$)$1 $($Max-Q$)$2 $($Max-P Core-All$)$3 $($Max-P ARM$)$4 $($Max-P Denver$)$
smokeParticles$($CUDA 10.0$)$ 25.5-33.719.4-28.418.3-28.423.5-31.223.0-28.7
Particles$($CUDA 10.04$)$ 178.9-220.0166.9-201.2148.1-187.8189.9-232.7198.2-261.8
SfM Point Cloud Algoritm/Display, Display ограничен 30 fps $($VisionWorks$)$20.8-45.2 /
18-30
11.2-27.2 /
15-20
19.3-35.1 /
15-20
13.7-34.7 /
14-20
16.6-35.4 /
15-20
GLX gears 1327.9-1407.7 1042.7-1151.01054.6-1123.01682.0-2157.7721.0-300.9
Количество включенных ядер $($htop$)$6 ядер4 ядра6 ядер4 ядра2 ядра


Для дополнительной оценки скорости GPU использовался тест GLX gears. Который устанавливается в операционной системе Linux Ubuntu 18.04 с помощью команды:
$ sudo apt-get install mesa-utils

Для оценки скорости GPU необходимо отключить вертикальную синхронизацию, которая ограничивает работу теста 60 fps, для чего следует выполнить команду:
$ vblank_mode=0 __GL_SYNC_TO_VBLANK=0 glxgears

При этом, мы видим, что максимальная производительность для тестовых примеров обеспечивается в режимах Max-N и Max-P ARM, а минимальная - в режиме Max-P Denver.

С целью тестирования Multimedia API произведем декодирование видео формата .h264 и .h265 полученное из тестовых видео $($имеющихся в свободном доступе для скачивания в сети интернет$)$ Big Buck Bunny для разрешений 640x360, 1280x720, 1920x1080 для формата .h264 и jellyfish $($доступном на сайте$)$ разрешением 3840x2160 $($4K$)$ для формата .h265.

Следует отметить, что видео-файлы изначально представлены в медиаконтейнерах .mp4 и .mkv, которые кроме видео могут включать аудио, субтитры и другие вложения. Для извлечения потока видео без вложений воспользуемся утилитой ffmpeg, представляющую собой набор свободных библиотек с открытым исходным кодом, предназначенных для конвертирования видеофайла из одного формата в другой, извлечения видео и захватывать видео в реальном времени и т.д.

Для этого необходимо скачать утилиту с официального сайта FFmpeg,выбрав тип операционной системы. После чего следует разархивировать скачанный архив ffmpeg-20190618-ebcf4d3-win64-static.zip.

Для запуска утилиты и получения сведений о файле необходимо поместить видео-файл в одну папку с файлом ffmpeg.exe, после чего запустить интерпретатор командной строки, введя в командной строке проводника или файлового менеджера $($Total Commander$)$, команду cmd.

В открывшемся окне введя команду:
ffmpeg -i <имя файла>
можно получить детальную информацию о файле продолжительность, bitrate, сведения о потоках, которые находятся в медиаконтейнере и др.

Для извлечения потоков необходимо ввести команды:
  • для video - $ video_decode H264 –fps 60 --stats test.h264
  • для video c аппаратной поддержкой $ video_dec_cuda test.h265 H265 -fps 60
При запуске видео в формате .h264 vs были получены следующие результаты, число fps:
  • для видео разрешением 640x360, 1280x720, 1920x1080 – максимальное количество fps 60 $($что в два раза больше характеристики для видеопотока, полученной с помощью утилиты ffmpeg$)$;
  • для видео высокой четкости 4К $($3840 × 2160$)$ максимальное количество fps 60 $($что соответствует полученному в качестве характеристики для видеопотока с помощью утилиты ffmpeg$)$.

При запуске видео в формате .h265 в декодере с аппаратной поддержкой, мы получаем максимальное количество fps установленного для данного типа видео, в данном случае - 60fps. Попытка увеличить количество fps c помощью средств, поддерживаемых утилитой для проигрывания тестовых примеров, как и воспроизвести видео с помощью декодера без аппаратной поддержки, успехом не увенчались.

Список использованных источников