语义分割NVIDIA驱动
这个例子展示了如何生成和部署CUDA®执行图像分割应用程序,使用深度学习。它使用MATLAB®编码器™支持包NVIDIA杰森和N万博1manbetxVIDIA驱动平台部署NVIDIA驱动™平台上的可执行文件。这个例子在主机上执行代码生成和建立在目标平台上生成的代码通过使用远程构建支持包的能力。万博1manbetx有关更多信息,请参见代码生成的语义分割网络(GPU编码器)。
先决条件
目标板需求
NVIDIA驱动PX2嵌入式平台。
以太网交叉电缆来连接目标板和主机PC(如果你本地网络不能连接目标板)。
NVIDIA CUDA工具包安装在董事会。
英伟达cuDNN库(v5和上图)在目标。
OpenCV库读取和显示在目标图像。
环境变量的目标编译器和库。有关更多信息,请参见安装和设置先决条件NVIDIA董事会。
开发主机需求
对CUDA GPU编码器代码生成。教程,看看开始使用GPU编码器(GPU编码器)。
深度学习工具箱™使用DAG网络对象。
为深度学习GPU编码器接口库支持包。万博1manbetx安装这个包的支持,使用MATLA万博1manbetxB®
扩展浏览器
。NVIDIA CUDA工具包在主机。
环境变量的编译器和库。有关更多信息,请参见第三方硬件(GPU编码器)和设置必备产品s manbetx 845(GPU编码器)。
创建一个文件夹,复制有关文件
下面的代码创建了一个文件夹在您当前的工作目录主机和所有相关文件复制到这个文件夹。如果你不能生成文件在这个文件夹中,在运行此命令之前,改变当前工作目录。
nvidiademo_setup (“segnet_deploy”);
连接到NVIDIA硬件
支持包使万博1manbetx用SSH连接的TCP / IP来构建和运行时执行命令生成的CUDA驱动平台代码。将目标平台连接到同一网络主机或者使用以太网交叉电缆董事会直接连接到主机。信息如何设置和配置你的董事会,看到英伟达文档。
与NVIDIA硬件进行通信,通过创建一个生活硬件连接对象开车
函数。你必须知道主机名或IP地址,用户名和密码的目标板创建一个生活硬件连接对象。例如,当连接到目标板第一次创建一个活动对象为驱动硬件使用命令:
hwobj =驱动(“drive-px2-name”,ubuntu的,ubuntu的);
在硬件生活对象创建,支持包执行硬件和软件检查,IO服务器安装,收集周边信息的目标。万博1manbetx这些信息显示在命令窗口。
在连接失败的情况下,诊断错误消息报道在MATLAB命令行。如果连接失败,最可能的原因是不正确的IP地址或主机名。
验证GPU环境目标板上
验证所需的编译器和库运行这个示例设置正确,使用coder.checkGpuInstall
(GPU编码器)函数。
envCfg = coder.gpuEnvConfig (“开车”);envCfg。BasicCodegen = 1;envCfg。安静= 1;envCfg。HardwareObject = hwobj;coder.checkGpuInstall (envCfg);
得到Pretrained SegNet DAG网络对象
网= getSegNet ();
下载pre-trained SegNet (107 MB)…
DAG网络包含91层包括卷积,批处理规范化,池、unpooling,像素分类输出层。看到所有的层网络,使用analyzeNetwork
函数。
生成目标板的CUDA代码使用GPU编码器
这个示例使用segnet_predict.m
文件的入口点函数代码生成。生成CUDA可执行,您可以部署一个NVIDIA的目标,创建一个GPU用于生成可执行代码的配置对象。
cfg = coder.gpuConfig (exe”);
当有多个活连接为不同的目标对象,代码生成器执行远程为最近的生活建立在目标板上创建对象。选择硬件板执行远程构建、使用setupCodegenContext ()
各自的生活硬件对象的方法。如果只有一个生活创建连接对象,您不需要调用这个方法。
hwobj.setupCodegenContext;
创建一个配置对象的驱动平台,并将其分配给硬件
代码配置对象的属性cfg
,可以使用coder.hardware
函数。
cfg。硬件= coder.hardware (“NVIDIA驱动”);
指定的文件夹执行远程构建过程在目标板上,使用BuildDir
财产。如果指定的目标董事会建立文件夹不存在,那么该软件创建一个文件夹的名字。如果没有指定值cfg.Hardware.BuildDir
指定远程构建过程发生在过去建立的文件夹。如果没有建立文件夹存储值,构建过程发生在主文件夹中。
cfg.Hardware.BuildDir=“~ / remoteBuildDir”;
在NVIDIA平台驱动PX2等包含多个gpu,使用SelectCudaDevice
属性在GPU配置对象来选择特定的GPU。
cfg.GpuConfig。SelectCudaDevice = 0;
自定义main.cu
文件是一个调用预测函数的包装器生成的代码。后处理步骤添加在主文件通过使用OpenCV接口。SegNet预测的输出是一个11-channel形象。十一个渠道代表十一个不同类别的预测成绩。在后处理中,每个像素分配一个类标签之间的最高得分11频道。每个类与一个独特的颜色可视化。最终的输出显示通过使用OpenCVimshow
函数。
cfg。CustomSource = fullfile (“main.cu”);
在本例中,代码生成使用一个图像作为网络的输入。然而,自定义主文件编码的视频作为输入并执行SegNet预测视频序列的每一帧。所需的编译器和链接器旗帜与OpenCV建立可执行库中更新buildinfo
部分的| segnet_predict.m |文件。
生成样本图像输入代码生成。
img = imread (“peppers.png”);img = imresize (img, 480年[360]);
生成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”);
清理
删除示例文件并返回到原来的文件夹中,调用清理
函数。
清理