这个例子展示了如何生成和部署CUDA®执行图像分割应用程序,使用深度学习。它使用GPU编码器™支持包的NVIDIA GP金宝appU NVIDIA驱动™平台上部署可执行。这个例子在主机上执行代码生成和建立在目标平台上生成的代码通过使用远程构建支持包的能力。金宝app更多信息在语义分割,明白了代码生成的语义分割网络。
目标板需求
NVIDIA驱动PX2嵌入式平台。
以太网交叉电缆来连接目标板和主机PC(如果目标不能被连接到一个本地网络)。
NVIDIA CUDA工具包安装在董事会。
英伟达cuDNN库(v5和上图)在目标。
OpenCV 3.0或更高版本库在目标/ videoo用于读取和显示图像
环境变量的目标编译器和库。信息支持版本的编译器和库及其设置,明白了金宝app安装和设置先决条件NVIDIA董事会。
开发主机需求
GPU编码器(TM)代码生成。概述和教程,参观GPU编码器产品页面。
深度学习工具箱™使用DAG网络对象。
为深度学习GPU编码器接口库支持包。金宝app要安装这个支持包,可以使用金宝app扩展浏览器。
NVIDIA CUDA工具包在主机。
环境变量在主机的编译器和库。信息的支持版本的编译器和库,明白了金宝app第三方产品下载188bet金宝搏。设置环境变量,看到环境变量。
以下代码在当前工作目录中创建一个文件夹(主机),和所有相关文件复制到这个文件夹中。如果你不能生成文件在这个文件夹,运行这个commnad之前改变您的当前工作目录。
gpucoderdemo_setup (“segnet_deploy”);
GPU编码器支持NVIDIA金宝app GPU包使用SSH连接在TCP / IP来构建和运行时执行命令生成的CUDA驱动平台代码。你必须将目标平台连接到同一网络主机或者使用以太网交叉电缆董事会直接连接到主机。请参阅NVIDIA文档如何设置和配置你的董事会。
与NVIDIA硬件进行通信,您必须创建一个生活硬件连接对象使用开车函数。你必须知道主机名或IP地址,用户名和密码的目标板创建一个生活硬件连接对象。例如,
hwobj =驱动(“drive-px2-name”,ubuntu的,ubuntu的);
注意:
在连接失败的情况下,诊断错误消息报道在MATLAB命令行。如果连接失败,最可能的原因是不正确的IP地址或主机名。
使用coder.checkGpuInstall功能和验证所需的编译器和库运行这个例子是正确设置。
envCfg = coder.gpuEnvConfig (“开车”);envCfg。BasicCodegen = 1;envCfg。安静= 1;envCfg。HardwareObject = hwobj;coder.checkGpuInstall (envCfg);
网= getSegNet ();
DAG网络包含91层包括卷积,批处理规范化,池、unpooling和像素分类输出层。查看所有网络的层,输入net.Layers
在MATLAB®命令窗口。
这个示例使用segnet_predict.m代码生成的入口点函数。生成NVIDIA的CUDA可执行文件,可以部署在目标,创建一个GPU用于生成可执行代码的配置对象。
cfg = coder.gpuConfig (exe”);
当有多个活连接为不同的目标对象,代码生成器执行远程为最近的生活建立在目标对象被创建。选择硬件板执行远程构建、使用setupCodegenContext ()
各自的生活硬件对象的方法。如果只有一个连接对象被创建时,它没有必要调用这个方法。
hwobj.setupCodegenContext;
使用coder.hardware函数创建一个配置对象的驱动平台,并将其分配给硬件
代码配置对象的属性cfg
。
cfg。硬件= coder.hardware (“NVIDIA驱动”);
使用BuildDir
属性指定的目录在目标系统上执行远程构建过程。如果指定的目标然后构建目录不存在软件创建一个目录的名字。如果没有指定值cfg.Hardware.BuildDir
,远程构建过程发生在最后一个指定的构建目录。如果没有存储构建目录值,构建过程发生在用户的主目录与生活相关的连接对象。
cfg.Hardware.BuildDir=的~ /;
某些NVIDIA平台如驱动PX2包含多个gpu。在这样的平台上,使用SelectCudaDevice
属性在GPU配置对象来选择特定的GPU。
cfg.GpuConfig。选择CudaDevice = 0;
自定义主要文件是一个调用预测函数的包装器生成的代码。后加工步骤添加在主文件使用OpenCV接口。segnet预测的输出是一个11-channel形象。十一个渠道代表十一个不同类别的预测成绩。在后期处理中,每个像素分配一个类标签之间的最高得分11频道。每个类与独特的颜色可视化。最终的输出显示了使用OpenCVimshow
函数。
cfg。CustomSource = fullfile (“main.cu”);
在本例中,代码生成使用图像作为网络的输入。然而,自定义主文件编码的视频作为输入,并做segnet预测视频序列的每一帧。构建所需的编译器和链接器旗帜在buildinfo OpenCV库更新segnet_predict.m文件。
生成样本图像输入代码生成。
img = imread (“peppers.png”);img = imresize (img, 480年[360]);
生成CUDA代码,使用codegen功能和通过GPU代码配置对象。代码生成发生在主机后,生成的文件复制,建立在目标。
codegen (“配置”cfg,“segnet_predict”,“参数”{img},“报告”);
输入测试视频复制到目标工作区目录,使用workspaceDir
硬件对象的属性。这个属性包含的路径codegen
在目标文件夹。
hwobj.putFile (“CamVid.avi”,hwobj.workspaceDir);
使用runApplication ()
方法的硬件对象启动exectuable在目标硬件。
hwobj.runApplication (“segnet_predict”,“CamVid.avi”);
分割图像的输出显示在一个窗口监视器连接到目标板上。
你可以杀死从MATLAB环境上运行可执行目标主机上使用killApplication ()
方法的硬件对象。这种方法使用的应用程序的名称,而不是可执行文件。
hwobj.killApplication (“segnet_predict”);
删除并返回到原始文件夹的文件。
清理