文档

NVIDIA驱动器上的语义细分

此示例演示如何为使用深度学习的图像分割应用程序生成和部署CUDA®可执行文件。它使用GPU编码器™ NVIDIA GPU支持包,用于在NVIDIA驱动器上部署可执行文件™ 平台。此示例在主机上执行代码生成,并使用支持包的远程构建功能在目标平台上构建生成的代码。有关语义分段的更多信息,请参阅金宝app语义分割网络的代码生成.

先决条件

目标板要求

  • NVIDIA Drive PX2嵌入式平台。

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

  • 主板上安装了NVIDIA CUDA工具包。

  • NVIDIA CUDNN图书馆(V5及以上)在目标上。

  • 目标上的OpenCV 3.0或更高版本库,用于读取和显示图像/视频

  • 编译器和库目标上的环境变量。有关支持的编译器和库版本及其设置的信息,请参阅金宝app安装和设置NVIDIA主板的先决条件.

开发主机需求

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

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

  • 用于深入学习库的GPU编码器接口支持包。若要安装此支持包,请使用金宝app附加资源管理器.

  • 主机上的NVIDIA CUDA工具包。

  • 编译器和库主机上的环境变量。有关有关编译器和库的支持版本的信息,请参阅金宝app第三方产品下载188bet金宝搏.设置环境变量,请参阅环境变量.

创建一个文件夹并复制相关文件

以下代码行在当前工作目录(主机)中创建一个文件夹,并将所有相关文件复制到此文件夹中。如果无法在此文件夹中生成文件,请在运行此命令之前更改当前工作目录。

gpucoderdemo_setup('segnet_deploy');

连接到NVIDIA硬件

用于NVIDIA GPU的G金宝appPU编码器支持包使用TCP / IP上的SSH连接在构建并在驱动器平台上运行生成的CUDA代码时执行命令。因此,必须将目标平台连接到与主机相同的网络,或者使用以太网交叉电缆将电路板直接连接到主机。请参阅有关如何设置和配置电路板的NVIDIA文档。

要与NVIDIA硬件进行通信,您必须使用使用的创建实时硬件连接对象驾驶作用您必须知道目标板的主机名或IP地址,用户名和密码以创建实时硬件连接对象。例如,

hwobj=驱动器('drive-px2-name',“ubuntu”,“ubuntu”);

笔记:

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

验证GPU环境

使用Coder.CheckGPuInstall.函数并验证运行此示例所需的编译器和库是否已正确设置。

envcfg = coder.gpuenvconfig(“驾驶”);Envcf​​g.basicCodegen = 1;Envcf​​g.quiet = 1;envcfg.hardwareObject = hwobj;Coder.CheckGpuInstall(Envcf​​g);

获取佩带的SEGNET DAG网络对象

net=getSegNet();

DAG网络包含91层,包括卷积、批处理归一化、池化、非池化和像素分类输出层。要看到网络的所有层,进入net.layers.在MATLAB®命令窗口中。

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

本例使用segnet_.m,是代码生成的入学点函数。要生成可以部署到NVIDIA目标的CUDA可执行文件,请创建用于生成可执行文件的GPU代码配置对象。

cfg=coder.gpuConfig(“exe”);

当不同目标有多个实时连接对象时,代码生成器会在为其创建最近的实时对象的目标上执行远程生成。若要选择硬件板以执行远程生成,请使用setupCodegenContext()相应实时硬件对象的方法。如果仅创建一个实时连接对象,则无需调用此方法。

hwobj.setupcodegencontext;

使用编码器硬件函数为驱动器平台创建配置对象并将其分配给硬件属性cfg.

cfg.Hardware=coder.Hardware('nvidia drive');

使用建筑物属性指定要在目标上执行远程生成过程的目录。如果目标上不存在指定的生成目录,则软件将创建具有给定名称的目录。如果未为其分配任何值cfg.hardware.builddir.,远程生成过程发生在最后指定的生成目录中。如果没有存储的生成目录值,则生成过程发生在与live connection对象关联的用户的主目录中。

cfg.Hardware.BuildDir='〜/';

某些NVIDIA平台(如驱动器PX2)包含多个GPU。在此类平台上,使用选择CUDADevice属性来选择特定的GPU。

cfg.guconfig.selectcudadevice = 0;

习俗主要的文件是一个包装器,可在生成的代码中调用预测函数。使用OpenCV接口在主文件中添加后处理步骤。SEGNET预测的输出是11通道图像。这里的11个频道代表了11种不同类别的预测得分。在后处理中,为每个像素分配一个类标签,该标签具有11个通道之间的最大分数。每个类都与唯一的可视化颜色相关联。使用OpenCV显示最终输出imshow.作用

cfg.CustomSource=fullfile(“main.cu”);

在此示例中,代码生成使用图像作为输入到网络。但是,自定义主文件被编码为将视频拍摄为输入,并为视频序列中的每个帧进行SEGNET预测。使用OpenCV库构建的编译器和链接器标志在BuildInfo中更新segnet_.m文件。

生成用于代码生成的示例图像输入。

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

要生成CUDA代码,请使用编码基因函数并传递GPU代码配置对象。在主机上生成代码后,将复制生成的文件并在目标上生成。

编码基因('-config',cfg,“segnet_预测”,“-args”,{img},'-报告');

在目标上运行可执行文件

将输入测试视频复制到目标工作区目录,使用Workspacedir.硬件对象的属性。此属性包含该路径编码基因目标文件夹。

hwobj.putfile('camvid.avi',hwobj.workspacedir);

使用runapplication()在目标硬件上启动可执行文件的硬件对象的方法。

hwobj.runapplication(“segnet_预测”,'camvid.avi');

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

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

hwobj.killApplication(“segnet_预测”);

清理

删除文件并返回到原始文件夹。

清理