此示例显示了如何为SSD网络(SSDobjectDetector对象)生成CUDA®代码,并利用Nvidia®Cudnn和Tensorrt库。SSD网络基于馈送前向卷积神经网络,该网络在单个镜头中检测图像中的多个对象。可以将SSD网络视为具有两个子网络。功能提取网络,然后是检测网络。
此示例为在该网络中生成代码使用SSD深度学习的对象检测计算机视觉工具箱™的示例。有关更多信息,请参阅使用SSD深度学习的对象检测(计算机视觉工具箱)。这使用SSD深度学习的对象检测示例使用Resnet-50进行功能提取。与特征提取网络相比,检测子网络是一个小的CNN,由少数卷积层和特定于SSD的层组成。
必需的
此示例生成CUDA MEX,并具有以下第三方要求。
CUDA启用了NVIDIA GPU和兼容驱动程序。
可选的
对于非MEX构建,例如静态,动态库或可执行文件,此示例具有以下其他要求。
NVIDIA工具包。
Nvidia Cudnn图书馆。
编译器和库的环境变量。有关更多信息,请参阅第三方硬件和设置先决条件下载188bet金宝搏。
使用Coder.CheckgPuinstall
函数以验证运行此示例所需的编译器和库是否正确设置。
envcfg = coder.gpuenvconfig('主持人');envcfg.deeplibtarget ='cudnn';envcfg.deepcodegen = 1;envcfg.quiet = 1;coder.checkgpuinstall(envcfg);
net = getssdnw();
DAG网络包含180层,包括卷积,relu和批处理标准化层,锚盒,SSD合并,焦点损耗和其他层。要显示深度学习网络体系结构的互动可视化,请使用分析
(深度学习工具箱)功能。
分析(NET);
ssdobj_detect
入口点功能这ssdobj_detect.m入口点功能采用图像输入,并使用保存在该图像上的检测器运行检测器SSDRESNET50VEHICLEEXAMPLE_20A.MAT
文件。该功能从SSDRESNET50VEHICLEEXAMPLE_20A.MAT
归档到持久变量SSDOBJ并在后续检测调用中重复持久对象。
类型('ssdobj_detect.m')
函数OUTIMG = SSDOBJ_DETECT(in)%版权所有2019-2021 Mathworks,Inc。持续SSDOBJ;如果ISEMPTY(SSDOBJ)SSDOBJ = CODER.LOADDEEPLEARNINGNETWORK('SSDRESNET50VEHICELEXAMPLE_20A.MAT');end%传递输入[bboxes,〜,labels] = ssdobj.detect(in,''threshold',0.7);%将分类标签转换为charactor矢量的细胞阵列,用于%执行标签= CellsTR(标签);图像中的注释检测%。如果〜ISEMPTY(labels)Outimg = insertObjectAnnotation(in,'Rectangle',bboxes,labels);否则OUTIMG = in;结尾
为生成CUDA代码ssdobj_detect.m入口点功能,为MEX目标创建GPU代码配置对象,并将目标语言设置为C ++。使用coder.deeplearningconfig
创建一个功能库丁
深度学习配置对象并将其分配给深度学习
GPU代码配置对象的属性。跑过代码根
命令指定输入大小为[300,300,3]。该值对应于SSD网络的输入层大小。
cfg = coder.gpuconfig('Mex');cfg.targetlang ='C ++';cfg.deeplearningconfig = coder.deeplearningconfig('cudnn');代码根-configCFGssdobj_detect-args{一个(300,300,3,'uint8')}-报告
代码生成成功:查看报告
设置视频文件读取器并读取输入视频。创建视频播放器以显示视频和输出检测。
视频='Highway_lanechange.mp4';videofreader = vision.videofilereader(videofile,“ videooututputdatatype”,,,,'uint8');DepVideOplayer = Vision.DeployableVideOplayer('尺寸',,,,'风俗',,,,'自定义大小',[640 480]);
阅读视频限制框架,并使用检测器检测视频中的车辆。
续= 〜ISDONE(videofreader);尽管cont i = step(videofreader);in = imresize(i,[300,300]);out = ssdobj_detect_mex(in);step(DepVideOplayer,out);如果关闭视频播放器窗口,则会退出循环cont = 〜ISDONE(videOfReader)&& isopen(depVideOplayer);结尾
[1] Liu,Wei,Dragomir Anguelov,Dumitru Erhan,Christian Szegedy,Scott Reed,Cheng Yang Fu和Alexander C. Berg。“ SSD:单枪Multibox检测器。”在第14届欧洲计算机视觉会议上,ECCV2016。SpringerVerlag,2016年。
coder.gpuconfig
|coder.gpuenvconfig
|Coder.CudnnConfig
|Vision.VideFilereDer
(计算机视觉工具箱)|Vision.Deployable VideOplayer
(计算机视觉工具箱)