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

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

Предпосылки

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

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

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

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

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

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

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

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

  • GPU Coder для генерации кода. Для обзора и примеров, посетите страницу продукта GPU Coder.

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

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

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

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

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

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

gpucoderdemo_setup('segnet_deploy');

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

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

Чтобы связаться с оборудованием NVIDIA, необходимо создать живой аппаратный объект связи при помощи функции диска. Необходимо знать, что имя хоста или IP-адрес, имя пользователя и пароль требуемой платы создают живой аппаратный объект связи. Например,

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

Примечание:

В случае отказа связи о сообщении об ошибке диагностики сообщают относительно командной строки 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 слой включая свертку, нормализацию партии., объединение, необъединение и классификацию пикселей выходные слои. Чтобы видеть все слои сети, введите net.Layers в командном окне MATLAB®.

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

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

cfg = coder.gpuConfig('exe');

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

hwobj.setupCodegenContext;

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

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

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

cfg.Hardware.BuildDir = '~/';

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

cfg.GpuConfig.SelectCudaDevice = 0;

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

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

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

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

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

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

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