文档

在NVIDIA驱动语义分割

这个例子说明如何生成和部署使用深度学习的图像分割应用程序的可执行CUDA®。它采用了GPU编码器™Support Pack万博1manbetxage的NVIDIA GPU的部署上NVIDIA DRIVE™平台的可执行文件。本实施例中在主计算机上执行的代码生成,并通过使用支持包的远程构建能力建立在目标平台上生成的代码。万博1manbetx有关语义分割的更多信息,请参阅代码生成语义分割网络

先决条件

目标板的要求

  • NVIDIA驱动PX2嵌入式平台。

  • 以太网跨接电缆连接目标板和主机PC(如果目标板不能被连接到本地网络)。

  • NVIDIA CUDA工具包安装在电路板上。

  • NVIDIA cuDNN库(V5及以上)上的目标。

  • OpenCV的3.0或在目标上,用于读取和显示图像/ videoo更高库

  • 对目标的编译器和库环境变量。有关编译器和库及其设置的支持版本的信息,请参阅万博1manbetx安装和设置先决条件NVIDIA板

开发主机需求

  • GPU编码器(TM),用于代码生成。有关概述和教程,请访问GPU编码器产品页面

  • 深度学习工具箱™使用DAG网络对象。

  • GPU编码器接口深度学习库的支持包。万博1manbetx要安装此支持包,使用万博1manbetx加载项资源管理器

  • NVIDIA CUDA工具包的主机上。

  • 主机为编译器和库的环境变量。有关编译器和库的支持版本的信息,请参阅万博1manbetx第三方产品s manbetx 845。对于设置环境变量,看环境变量

创建一个文件夹,并将相关档案

下面的代码行创建在当前工作目录(主机)的文件夹,以及所有相关的文件复制到该文件夹​​。如果你不能生成此文件夹中的文件,运行此之前commnad改变当前的工作目录。

gpucoderdemo_setup('segnet_deploy');

连接到NVIDIA硬件

该GPU编码器支持包的NVI万博1manbetxDIA GPU使用基于TCP / IP的SSH连接,同时建立和运行驱动平台上生成的CUDA代码执行命令。因此,您必须在目标平台连接到同一个网络主机或使用以太网交叉线板直接连接到主机。请参阅如何设置了NVIDIA的文件和配置您的主板。

为了与NVIDIA硬件进行通信,必须通过建立即时的硬件连接对象驾驶功能。你必须知道目标板的主机名或IP地址,用户名和密码,以创建生动的硬件连接对象。例如,

hwobj =驱动器(车-PX2-名“'Ubuntu的''Ubuntu的');

注意:

在连接失败的情况下,诊断报告错误消息MATLAB命令行上。如果连接失败,最可能的原因是不正确的IP地址或主机名。

验证GPU环境

使用coder.checkGpuInstall功能,并验证所需要的运行该示例中,编译器和库的设置是否正确。

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

获取预训练SegNet DAG网络对象

净= getSegNet();

DAG网络包含91层,包括卷积,批标准化,池,unpooling和像素分类输出层。要查看网络的所有层,进入net.Layers在MATLAB®命令窗口。

生成CUDA代码为目标使用GPU编码器

本例使用segnet_predict.m,是代码生成的入口点函数。产生可以部署在一个NVIDIA目标一个CUDA可执行文件,用于生成一个可执行创建一个GPU代码配置对象。

CFG = coder.gpuConfig('可执行程序');

当有不同目标的多重实时连接对象,代码生成器进行远程建立在为其创建最近活对象的目标。要选择一个硬件电路板,用于执行远程构建,使用setupCodegenContext()各个活硬件对象的方法。如果只有一个实时连接对象的创建,这是没有必要调用此方法。

hwobj.setupCodegenContext;

使用coder.hardware函数来创建用于驱动平台的配置对象,并将其分配给硬件代码配置对象的属性CFG

cfg.Hardware = coder.hardware(“NVIDIA驱动”);

使用BuildDir属性指定的目录对目标进行远程构建过程。如果指定的构建目录上不存在目标,则软件创建具有给定名称的目录。如果没有值被分配到cfg.Hardware.BuildDir,远程构建过程发生在最后指定的构建目录。如果没有存储build目录价值,构建过程发生在与带电连接对象相关联的用户的主目录。

cfg.Hardware.BuildDir ='〜/';

某些NVIDIA平台如DRIVE PX2包含多个GPU。在这样的平台上,使用SelectCudaDevice在GPU配置对象属性来选择一个特定的GPU。

cfg.GpuConfig.SelectCudaDevice = 0;

定制主要文件是调用生成的代码的预测功能的包装。后处理步骤使用的OpenCV接口的主文件被添加。segnet预测的输出是一个11通道的图像。这里的11个频道代表的十个一​​种不同类别的预测分数。在后处理中,每个像素被分配一个具有11个信道中的最大得分的一类的标签。每个类都具有独特的颜色可视化有关。最终输出是使用的OpenCV所示imshow功能。

cfg.CustomSource =完整文件('main.cu');

在这个例子中,代码生成是使用图像作为输入提供给网络来完成。但是,自定义主文件被编码,以采取视频作为输入,并为所述视频序列中的每个帧执行segnet预测。需要建立与OpenCV库的编译器和连接器选项在buildinfo中更新segnet_predict.m文件。

生成用于代码生成的样本图像输入。

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

要生成CUDA代码,使用代码生成函数,并且传递GPU代码配置对象。代码生成需要在主机上进行设置,生成的文件被复制并建立目标。

代码生成('-config',CFG'segnet_predict''-args'{IMG}'-报告');

运行目标上的可执行文件

输入测试视频复制到目标的工作空间目录中,使用workspaceDir硬件对象的属性。此属性包含路径代码生成在目标文件夹。

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

使用runApplication()硬件对象的方法来启动在目标硬件的exectuable。

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

分割图像输出显示在连接到目标板上的监视器上的窗口。

您可以通过杀死从主机上的MATLAB环境中的目标运行可执行程序killApplication()硬件对象的方法。此方法使用的应用程序的名称,而不是可执行文件。

hwobj.killApplication('segnet_predict');

清理

删除文件,并返回到原来的文件夹中。

清理