主要内容

使用单镜头多伯克斯检测器,用于对象检测的代码生成

此示例显示了如何为SSD网络(SSDobjectDetector对象)生成CUDA®代码,并利用Nvidia®Cudnn和Tensorrt库。SSD网络基于馈送前向卷积神经网络,该网络在单个镜头中检测图像中的多个对象。可以将SSD网络视为具有两个子网络。功能提取网络,然后是检测网络。

此示例为在该网络中生成代码使用SSD深度学习的对象检测计算机视觉工具箱™的示例。有关更多信息,请参阅使用SSD深度学习的对象检测(计算机视觉工具箱)。这使用SSD深度学习的对象检测示例使用Resnet-50进行功能提取。与特征提取网络相比,检测子网络是一个小的CNN,由少数卷积层和特定于SSD的层组成。

第三方先决条件

必需的

此示例生成CUDA MEX,并具有以下第三方要求。

  • CUDA启用了NVIDIA GPU和兼容驱动程序。

可选的

对于非MEX构建,例如静态,动态库或可执行文件,此示例具有以下其他要求。

验证GPU环境

使用Coder.CheckgPuinstall函数以验证运行此示例所需的编译器和库是否正确设置。

envcfg = coder.gpuenvconfig('主持人');envcfg.deeplibtarget ='cudnn';envcfg.deepcodegen = 1;envcfg.quiet = 1;coder.checkgpuinstall(envcfg);

进行验证的dagnetwork

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;结尾

运行MEX代码生成

为生成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')}-报告
代码生成成功:查看报告

运行产生的mex

设置视频文件读取器并读取输入视频。创建视频播放器以显示视频和输出检测。

视频='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年。

也可以看看

功能

对象

相关示例

更多关于