Семантическая Сегментация на ДИСКЕ NVIDIA

В этом примере показано, как сгенерировать и развернуть исполняемый файл CUDA® для приложения сегментации изображений, которое использует глубокое обучение. Это использует MATLAB® Coder™ Support Package для NVIDIA, Джетсон и NVIDIA УПРАВЛЯЮТ Платформами, чтобы развернуть исполняемый файл на платформе Drive™ NVIDIA. Этот пример выполняет генерацию кода на хосте - компьютере и создает сгенерированный код на целевой платформе при помощи удаленной возможности сборки пакета поддержки. Для получения дополнительной информации смотрите Генерацию кода для Сети Семантической Сегментации.

Необходимые условия

Требования требуемой платы

  • ДИСК NVIDIA PX2 встроил платформу.

  • Кабель перекрестного соединения Ethernet, чтобы соединить требуемую плату и PC хоста (если вы не можете соединить требуемую плату с локальной сетью).

  • NVIDIA инструментарий CUDA установлен на плате.

  • Библиотека NVIDIA cuDNN (v5 и выше) на цели.

  • Библиотека OpenCV по цели для чтения и отображения изображений.

  • Переменные окружения на цели для компиляторов и библиотек. Для получения дополнительной информации смотрите Необходимые условия Установки и Setup для Советов NVIDIA (Пакет поддержки MATLAB Coder для NVIDIA, Джетсон и NVIDIA УПРАВЛЯЮТ Платформами).

Требования узла разработки

  • GPU Coder для генерации кода CUDA. Для примера смотрите Начало работы с GPU Coder.

  • Deep Learning Toolbox™, чтобы использовать сетевой объект DAG.

  • Интерфейс GPU Coder для пакета поддержки Библиотек Глубокого обучения. Чтобы установить этот пакет поддержки, используйте MATLAB® Add-On Explorer.

  • NVIDIA инструментарий CUDA на хосте.

  • Переменные окружения для компиляторов и библиотек. Для получения дополнительной информации смотрите Стороннее Оборудование и Подготовку Необходимых как условие продуктов.

Создайте папку и скопируйте соответствующие файлы

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

nvidiademo_setup('segnet_deploy');

Свяжите с оборудованием NVIDIA

Пакет поддержки использует связь SSH по TCP/IP, чтобы выполнить команды при создании и выполнении сгенерированного кода CUDA по платформам ДИСКА. Соедините целевую платформу с той же сетью как хост - компьютер или используйте кабель перекрестного соединения Ethernet, чтобы соединить плату непосредственно с хостом - компьютером. Для получения информации о том, как настроить и сконфигурировать вашу плату, видит документацию NVIDIA.

Чтобы связаться с оборудованием NVIDIA, создайте живой аппаратный объект связи при помощи drive (Пакет поддержки MATLAB Coder для NVIDIA Джетсон и NVIDIA УПРАВЛЯЕТ Платформами), функция. Необходимо знать, что имя хоста или IP-адрес, имя пользователя и пароль требуемой платы создают живой аппаратный объект связи. Например, при соединении с требуемой платой впервые, создайте живой объект для оборудования Диска при помощи команды:

hwobj = drive('drive-px2-name','ubuntu','ubuntu');

Во время оборудования живое создание объекта пакет поддержки выполняет аппаратные и программные проверки, установку сервера IO, и собирает периферийную информацию о цели. Эта информация отображена в Командном окне.

В случае отказа связи о сообщении об ошибке диагностики сообщают в командной строке MATLAB. Если связь прервалась, наиболее вероятной причиной является неправильный IP-адрес или имя хоста.

Проверьте среду графического процессора в требуемой плате

Чтобы проверить, что компиляторы и библиотеки, необходимые для выполнения этого примера, настраиваются правильно, используйте coder.checkGpuInstall функция.

envCfg = coder.gpuEnvConfig('drive');
envCfg.BasicCodegen = 1;
envCfg.Quiet = 1;
envCfg.HardwareObject = hwobj;
coder.checkGpuInstall(envCfg);

Получите предварительно обученный сетевой объект SegNet DAG

net = getSegNet();
Downloading pre-trained SegNet (107 MB)...

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

Сгенерируйте код CUDA для требуемой платы Используя GPU Coder

Этот пример использует segnet_predict.m файл как точка входа функционирует для генерации кода. Чтобы сгенерировать исполняемый файл CUDA, который можно развернуть на цели NVIDIA, создайте объект настройки графического процессора кода для генерации исполняемого файла.

cfg = coder.gpuConfig('exe');

Когда существует несколько живых объектов связи для различных целей, генератор кода выполняет удаленную сборку на требуемой плате, для которой был создан недавний живой объект. Чтобы выбрать аппаратное управление по выполнению удаленной сборки, используйте setupCodegenContext() метод соответствующего живого аппаратного объекта. Если только один живой объект связи был создан, вы не должны вызывать этот метод.

hwobj.setupCodegenContext;

Чтобы создать настройку возражают для платформы ДИСКА и присвоить его Hardware свойство объекта cfg настройки кода, используйте coder.hardware функция.

cfg.Hardware = coder.hardware('NVIDIA Drive');

Чтобы задать папку для выполнения удаленного процесса сборки на требуемой плате, используйте BuildDir свойство. Если заданная папка сборки не существует на требуемой плате, то программное обеспечение создает папку с именем. Если никакое значение не присвоено cfg.Hardware.BuildDir, удаленный процесс сборки происходит в последней заданной папке сборки. Если нет никакого сохраненного значения папки сборки, процесс сборки происходит в домашней папке.

cfg.Hardware.BuildDir = '~/remoteBuildDir';

На платформах NVIDIA, таких как ДИСК PX2, которые содержат несколько графических процессоров, используют SelectCudaDevice свойство в настройке графического процессора возражает, чтобы выбрать определенный графический процессор.

cfg.GpuConfig.SelectCudaDevice = 0;

Пользовательский main.cu файл является оберткой, которая вызывает предсказать функцию в сгенерированном коде. Постобрабатывающие шаги добавляются в основном файле при помощи интерфейсов OpenCV. Выход предсказания SegNet является изображением с 11 каналами. Одиннадцать каналов здесь представляют множество предсказания одиннадцати различных классов. На постобработке каждый пиксель присвоен метка класса, которая имеет максимальный счет среди 11 каналов. Каждый класс сопоставлен с уникальным цветом для визуализации. Окончательный результат показывают при помощи OpenCV imshow функция.

cfg.CustomSource  = fullfile('main.cu');

В этом примере генерация кода использует изображение в качестве входа к сети. Однако пользовательский основной файл закодирован, чтобы снять видео, как введено и выполнить предсказание SegNet для каждой системы координат в видео последовательности. Компилятор и флаги компоновщика, требуемые создавать исполняемый файл с библиотекой OpenCV, обновляются в buildinfo разделите в |segnet_predict.m|file.

Сгенерируйте демонстрационный вход изображений для генерации кода.

img = imread('peppers.png');
img = imresize(img,[360 480]);

Чтобы сгенерировать код CUDA, используйте codegen функционируйте и передайте настройку графического процессора кода и размер входных параметров для и segnet_predict.m функция точки входа. После того, как генерация кода происходит на хосте, сгенерированные файлы скопированы и основаны на требуемой плате.

codegen('-config ', cfg, 'segnet_predict', '-args', {img},'-report');

Запустите исполняемый файл в требуемой плате

Скопируйте входное тестовое видео в целевую папку рабочей области, с помощью workspaceDir свойство аппаратного объекта. Это свойство содержит путь к codegen папка на требуемой плате.

hwobj.putFile('CamVid.avi', hwobj.workspaceDir);

Чтобы запустить исполняемый файл на целевом компьютере, используйте runApplication() метод аппаратного объекта.

hwobj.runApplication('segnet_predict','CamVid.avi');

Сегментированный вывод изображений отображен в окне на мониторе, который соединяется с требуемой платой.

Можно остановить рабочий исполняемый файл на требуемой плате средой MATLAB на хосте при помощи killApplication() метод аппаратного объекта. Этот метод использует имя приложения а не имя исполняемого файла.

hwobj.killApplication('segnet_predict');

Очистка

Чтобы удалить файлы в качестве примера и возвратиться к исходной папке, вызовите cleanup функция.

cleanup

Смотрите также

Объекты

  • (Пакет поддержки MATLAB Coder для NVIDIA Джетсон и NVIDIA УПРАВЛЯЕТ платформами), | (Пакет поддержки MATLAB Coder для NVIDIA Джетсон и NVIDIA УПРАВЛЯЕТ платформами),

Похожие темы