В этом примере показано, как сгенерировать и развернуть исполняемый файл 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');
Пакет Поддержки 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);
net = getSegNet();
Сеть DAG содержит 91 слой включая свертку, нормализацию партии., объединение, необъединение и классификацию пикселей выходные слои. Чтобы видеть все слои сети, используйте analyzeNetwork
функция.
Этот пример использует 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
функция. очистка