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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

gpucoderdemo_setup('segnet_deploy');

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

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

Чтобы связаться с оборудованием NVIDIA, создайте живой аппаратный объект связи при помощи drive (Пакет Поддержки GPU Coder для 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();

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

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

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

cfg = coder.gpuConfig('exe');

% When there are multiple live connection objects for different targets,
% the code generator performs a remote build on the target board for which
% a recent live object was created. To choose a hardware board for
% performing a remote build, use the |setupCodegenContext()| method of the
% respective live hardware object. If only one live connection object was
% created, you do not need to call this method.
%
%   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 функция. очистка

Для просмотра документации необходимо авторизоваться на сайте