从Simulink在NVIDIA Jetson TX2平台上部署和分类网络摄像头图像金宝app
这个例子展示了如何在NVIDIA®Jetson TX2板上部署Simu金宝applink®模型来对网络摄像头图像进行分类。这个例子通过使用预先训练好的深度卷积神经网络对网络摄像头中的图像进行实时分类,ResNet-50
.本例中的金宝appSimulink模型使用MATLAB®Coder™NVIDIA Jetson和NVIDIA DRIVE平台支持包中的摄像机和显示块,从网络摄像头捕获实时视频流,并在连接金宝app到Jetson平台的监视器上显示预测结果。
先决条件
目标板要求
NVIDIA Jetson嵌入式平台。
以太网交叉网线用于连接目标板和主机PC。(如果无法将目标板连接到本地网络)
USB摄像头连接到目标器的USB主机端口。
连接到目标器显示端口的监视器。
目标上的V4L2和SDL (v1.2)库。
目标上的GStreamer库。
NVIDIA CUDA®工具包和驱动程序。
目标上的NVIDIA cuDNN库。
目标上用于编译器和库的环境变量。有关更多信息,请参见NVIDIA板的安装和设置先决条件.
开发主机要求
GPU Coder™用于CUDA代码生成。有关教程,请参见开始使用GPU编码器(GPU编码器).
金宝app仿真软件编码器™
嵌入式编码器™
深度学习工具箱™
计算机视觉工具箱
图像处理工具箱™
GPU编码器接口的深度学习库支持包。金宝app
ResNet-50网络支持包的深度学习工具箱模型。金宝app要安装这些支持包,请使用MATLA金宝appB
扩展浏览器
.编译器和库的环境变量。有关更多信息,请参见第三方硬件(GPU编码器)而且设置必备产品下载188bet金宝搏(GPU编码器).
创建一个文件夹并复制相关文件
下面这行代码在主机上的当前工作文件夹中创建了一个文件夹,并将所有相关文件复制到该文件夹中。如果无法在此文件夹中生成文件,请先更改当前工作文件夹再执行此命令。
nvidiademo_setup (“resnet50_deploy_金宝appsimulink”);
连接到NVIDIA硬件
支持包使金宝app用TCP/IP上的SSH连接来执行命令,同时在Jetson平台上构建和运行生成的CUDA代码。将目标平台连接到与主机相同的网络中,或者使用以太网交叉电缆将单板直接连接到主机。有关如何设置和配置您的电路板的信息,请参阅NVIDIA文档。
属性来创建活动硬件连接对象,以与NVIDIA硬件通信杰森
函数。创建硬件活连接对象时,需要知道目标板的主机名或IP地址、用户名和密码。例如,当第一次连接到目标板时,使用命令为Jetson硬件创建一个活动对象:
Hwobj = jetson(“jetson-tx2-name”,ubuntu的,ubuntu的);
在硬件活动对象创建期间,支持包执行硬件和软件检查、IO服务器安装并收集目标的外围设备信息。金宝app该信息显示在“命令窗口”中。
当不同目标有多个活动连接对象时,代码生成器将在为其创建最近活动对象的目标板上执行远程构建。若要选择执行远程构建的硬件板,请使用setupCodegenContext ()
各自活动硬件对象的方法。如果只创建了一个活动连接对象,则不需要调用此方法。
setupCodegenContext (hwobj);
检查目标板GPU环境
要验证运行此示例所需的编译器和库是否已正确设置,请使用coder.checkGpuInstall
(GPU编码器)函数。
envCfg = code . gpuenvconfig (“杰森”);envCfg。DeepLibTarget =“cudnn”;envCfg。DeepCodegen = 1;envCfg。安静= 1;envCfg。HardwareObject = hwobj;coder.checkGpuInstall (envCfg);
识别连接到目标板的摄像机
要查找连接到目标的摄像机列表,请使用getCameraList
函数。要查看相机支持的分辨率,请金宝搏官方网站使用金宝app可用的决议金宝搏官方网站
列。
getCameraList (hwobj)
金宝app深度学习分类的Simulink模型
用于网络金宝app摄像头图像分类的Simulink模型包含一个预测
块预测分数和标签为每个类,一个NVIDIA的相机
块捕获实时视频流,以及英伟达显示
块显示分类的结果。使用实现附加处理操作MATLAB函数
块。
open_system (“ex_DLModel”);
的相机
Block为算法的每个时间步捕获一个快照。若要选择网络摄像头并设置每个快照的分辨率,请双击相机
块,并设置的名字
而且图像大小
如图所示。的价值图像大小
必须是网络摄像头支持的分辨率。金宝app
的rgb2Img
函数块转换R
,G
,B
组件的输出。相机
块到RGB平面图像。然后将生成的图像作为输入提供给resizeImg
函数块,将图像大小调整为Resnet-50网络的输入图像大小。Resnet-50网络的输入图像大小为224 × 224 × 3。
的预测
块从深度学习工具箱获取一个单一的输入图像帧,并通过使用预训练的图像上运行预测resnet50
卷积神经网络。ResNet-50是一个经过100多万张图片训练的DAG网络ImageNet
数据库。输出包含图像所属的每个类的分类分数。双击预测
块打开块参数,并设置深度网络为resnet50
如图所示。
的calcFPS
函数块计算预测
块,并计算在目标上显示的平均每秒输出帧数(FPS)。
输出分数、输出的平均每秒帧数(FPS)和输入图像提供给ainsertResult
函数块,用前5个预测标签、对应的分数和平均每秒帧数标注输入图像。
函数[outR,outG,outB] = insertResult(inpImg, scores, fps)
[scores,index] = sort(scores, index)“下”);
在图像中插入有分数的预测
%垫形象outImg = padarray(inpImg,[0,200],0,“以前”);
载入分数Index5 =索引(1:5);synsetData = code .load(“synsetWords.mat”);synsetData = synsetData. synsetarray;
平均帧数outImg = insertText(outImg, [10 80],[' fps: 'sprintf (' % 0.2 f ', fps)),“AnchorPoint”,“LeftBottom”);
插入排名前5的预测和相应的分数为i=1:5 str = strtrim(synsetData(index5(i),:));outImg = insertText(outImg, [10 50+30*(i+1)],[str .“:”sprintf (' % 0.2 f '分数(我)* 100)“%”),“AnchorPoint”,“LeftBottom”);结束
将图像分成R,G,B个分量outR = outImg(:,:,1)';outG = outImg(:,:,2)';outB = outImg(:,:,3)';
生成的输出图像提供给英伟达显示
块,在运行应用程序时打开显示窗口,显示目标上的输出图像。
为仿真和部署配置模型
要生成CUDA代码,模型必须通过以下设置启用:
set_param (“ex_DLModel”,“TargetLang”,“c++”);set_param (“ex_DLModel”,“GenerateGPUCode”,CUDA的);
本例中的模型被预先配置为生成CUDA代码。
有关在Simulink中生成GPU代码的更多信息,请参见金宝app代码生成从Simulink模型与GPU编码金宝app器(GPU编码器).
深度学习目标库必须设置为“CuDNN”
在代码生成过程中,
set_param (“ex_DLModel”,“DLTargetLibrary”,“cudnn”);
有关更多信息,请参见基于MATLAB函数块的深度学习网络GPU代码生成(GPU编码器)而且GPU代码生成块从深度神经网络库(GPU编码器).
模型配置参数为构建过程和部署提供选项。
1.打开配置参数对话框,硬件实现窗格。选择硬件板作为英伟达杰森(或NVIDIA驱动).
2.在目标硬件资源部分,输入设备地址,用户名,密码你的NVIDIA Jetson目标板。
3.设置建立行动,建立目录,显示如图所示。的显示表示显示环境,并允许将输出显示到与环境对应的设备。
4.点击应用而且好吧.
在目标板上生成和部署模型
1.为模型生成CUDA代码,将代码部署到目标,并运行可执行文件,打开硬件选项卡中的Simuli金宝appnk编辑器。
2.选择构建、部署和启动在硬件上生成和部署代码。
Jetson TX2上的ResNet-50分类
当应用程序在目标上启动时,会打开一个SDL窗口,显示网络摄像头捕获的每一帧视频流的分类结果。
停止应用程序
要停止目标上的应用程序,请使用stopModel
硬件对象的方法。
stopModel (hwobj“ex_DLModel”);
值得尝试的事情
1.本例使用cuDNN作为深度学习代码目标库。可以通过运行以下命令将其更改为NVIDIA TensorRT。这就要求在Jetson平台上必须安装NVIDIA TensorRT -高性能深度学习推理优化器和运行时库。
set_param (“ex_DLModel”,“DLTargetLibrary”,“tensorrt”);
2.此示例设置硬件实现为英伟达杰森.用户可以使用NVIDIA驱动作为目标硬件。
3.摄像块的图像分辨率可根据需要进行调整。
关闭模式
运行close_system
关闭模型。
close_system (“ex_DLModel”, 0);
清理
要删除示例文件并返回到原始文件夹,请调用清理
函数。
清理