主要内容

基于NVIDIA DRIVE的语义分割

这个例子展示了如何为使用深度学习的图像分割应用程序生成和部署CUDA®可执行文件。它使用NVIDIA Jetson和NVIDIA DRIVE平台的MATLAB®Coder™支持包,在NVIDIA DRIVE™平台上部署可执行文件。本示例在主机上执行代码生成,并使用支持包的远程构建功能在目标平台上构建生成的代码。有关更多信息,请参见语义分割网络的代码生成(GPU编码器)

先决条件

目标板要求

  • NVIDIA DRIVE PX2嵌入式平台。

  • 用于连接目标板和主机PC的以太网交叉电缆(如果无法将目标板连接到本地网络)。

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

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

  • 目标上的OpenCV库用于读取和显示图像。

  • 目标上用于编译器和库的环境变量。有关更多信息,请参见NVIDIA板的安装和设置先决条件

开发主机要求

  • 用于CUDA代码生成的GPU编码器。有关教程,请参见开始使用GPU编码器(GPU编码器)

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

  • GPU编码器接口的深度学习库支持包。要安装此支持包,请使用MATLAB®扩展浏览器

  • 主机上的NVIDIA CUDA工具包。

  • 编译器和库的环境变量。有关更多信息,请参见第三方硬件(GPU编码器)而且设置必备产品2022世界杯八强谁会赢?(GPU编码器)

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

下面这行代码在主机上的当前工作文件夹中创建了一个文件夹,并将所有相关文件复制到该文件夹中。如果无法在此文件夹中生成文件,请先更改当前工作文件夹再执行此命令。

nvidiademo_setup (“segnet_deploy”);

连接到NVIDIA硬件

支持包使用TCP/IP上的SSH连接来执行命令,同时在DRIVE平台上构建和运行生成的CUDA代码。将目标平台连接到与主机相同的网络中,或者使用以太网交叉电缆将单板直接连接到主机。有关如何设置和配置您的电路板的信息,请参阅NVIDIA文档。

属性来创建活动硬件连接对象,以与NVIDIA硬件通信开车函数。创建硬件活连接对象时,需要知道目标板的主机名或IP地址、用户名和密码。例如,当第一次连接到目标板时,为Drive硬件创建一个活对象,使用命令:

Hwobj = drive(“drive-px2-name”ubuntu的ubuntu的);

在硬件活动对象创建期间,支持包执行硬件和软件检查、IO服务器安装并收集目标的外围设备信息。该信息显示在“命令窗口”中。

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

检查目标板GPU环境

要验证运行此示例所需的编译器和库是否已正确设置,请使用coder.checkGpuInstall(GPU编码器)函数。

envCfg = code . gpuenvconfig (“开车”);envCfg。BasicCodegen = 1;envCfg。安静= 1;envCfg。HardwareObject = hwobj;coder.checkGpuInstall (envCfg);

获得预训练SegNet DAG网络对象

net = getSegNet();
下载预训练的SegNet (107 MB)…

DAG网络包含91层,包括卷积、批量归一化、池化、解池化和像素分类输出层。要查看网络的所有层,请使用analyzeNetwork函数。

使用GPU Coder为目标板生成CUDA代码

这个例子使用了segnet_predict.m文件作为代码生成的入口点函数。若要生成可部署到NVIDIA目标上的CUDA可执行文件,请创建用于生成可执行文件的GPU代码配置对象。

cfg = code . gpuconfig (exe”);

当不同目标有多个活动连接对象时,代码生成器将在为其创建最近活动对象的目标板上执行远程构建。若要选择执行远程构建的硬件板,请使用setupCodegenContext ()各自活动硬件对象的方法。如果只创建了一个活动连接对象,则不需要调用此方法。

hwobj.setupCodegenContext;

为DRIVE平台创建一个配置对象,并将其分配给硬件代码配置对象的属性cfg,使用coder.hardware函数。

cfg。硬件= code . Hardware (“NVIDIA驱动”);

要指定在目标板上执行远程生成过程的文件夹,请使用BuildDir财产。如果指定的构建文件夹在目标板上不存在,那么该软件将创建一个具有给定名称的文件夹。如果没有赋值cfg.Hardware.BuildDir,则远程生成过程发生在最后指定的生成文件夹中。如果没有存储生成文件夹值,则生成过程将在主文件夹中进行。

cfg.Hardware.BuildDir =“~ / remoteBuildDir”

在包含多个gpu的NVIDIA平台(如DRIVE PX2)上,使用SelectCudaDevice属性,选择指定的图形处理器。

cfg. gpconfig . selectcudadevice = 0;

自定义main.cuFile是一个包装器,在生成的代码中调用预测函数。通过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函数和传递GPU代码配置和输入的大小segnet_predict.m入口点函数。在主机上生成代码后,将复制生成的文件并在目标板上构建。

codegen (“配置”cfg,“segnet_predict”“参数”{img},“报告”);

在目标板上运行可执行文件

将输入测试视频复制到目标工作区文件夹,使用workspaceDir硬件对象的属性。属性的路径codegen目标板上的文件夹。

hwobj.putFile (“CamVid.avi”, hwobj.workspaceDir);

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

hwobj.runApplication (“segnet_predict”“CamVid.avi”);

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

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

hwobj.killApplication (“segnet_predict”);

清理

要删除示例文件并返回到原始文件夹,请调用清理函数。

清理
Baidu
map