主要内容

用YOLO V2和英特尔MKL DNN生成C++对象检测代码

这个例子展示了如何在英特尔®处理器上生成YOLO V2对象检测网络的C++代码。生成的代码使用英特尔数学内核库,用于深度神经网络(MKL DNN)。

有关详细信息,请参阅基于YOLO v2深度学习的目标检测(计算机视觉工具箱).

先决条件

  • 英特尔深度神经网络数学内核库(MKL-DNN)

  • 参考MKLDNN CPU支万博1manbetx持了解支持MKL-DNN库的处理器列表万博1manbetx

  • MATLAB®编码器™ C++代码生成

  • 用于深度学习支持包的MATLAB编码器接口万博1manbetx

  • 深度学习工具箱™ 使用达格网络对象

  • 计算机视觉工具箱™ 用于视频I/O操作

有关受支持版本的编译器和库的详细信息,请参阅万博1manbetx第三方硬件和软件.

此示例在Linux®、Windo万博1manbetxws®和macOS平台上受支持,而MATLAB Online不支持此示例。

预先训练达格网络对象

DAG网络包含150个层,包括卷积层、ReLU层和批量标准化层以及YLO v2变换层和YLO v2输出层。

net=getYOLOv2();
正在下载预训练检测器(98 MB)。。。

使用命令net.Layers查看网络的所有层。

net.Layers

代码生成yolov2_检测作用

这个yolov2_检测示例附带的函数获取图像输入,并使用中保存的网络在图像上运行检测器Yolov2Resnet50车辆示例.mat。该函数从加载网络对象Yolov2Resnet50车辆示例.mat变成一个持久变量yolov2Obj。对函数的后续调用将重用持久对象进行检测。

类型(“yolov2_检测.m”)
函数outImg=yolov2_检测(in)%Copyright 2018-2019 MathWorks,Inc.%永久对象yolov2Obj用于加载Yolov2oObjectDetector对象。%n首次调用此函数时,将构造并设置永久对象%。随后对该函数的调用将重复使用同一对象,以在输入时调用检测%,从而避免重新构建和重新加载该对象%network object.persistent yolov2Obj;if isempty(yolov2Obj)yolov2Obj=coder.loadDeepLearningNetwork('yolov2ResNet50VehicleExample.mat');end%pass-in输入[bboxes,~,labels]=yolov2Obj.detect(in,'Threshold',0.5);outImg=in;%将分类标签转换为字符向量的单元格数组,以便在coder.target('MATLAB')执行labels=cellstr(labels);如果(~(isempty(bboxes)&&isempty(labels))%注释图像中的检测,则结束。outImg=insertObjectAnnotation(在“矩形”中,bboxes,labels);结束

若要生成代码,请为MEX目标创建代码配置对象,并将目标语言设置为C++。coder.DeepLearningConfig函数创建MKL-DNN深度学习配置对象。将此对象指定给深度学习配置代码配置对象的属性。将输入大小指定为编码基因命令在本例中,YOLO v2网络的输入层大小为[224,224,3].

cfg=coder.config(“墨西哥”); cfg.TargetLang=“C++”;cfg.DeepLearningConfig=coder.DeepLearningConfig(“mkldnn”); 编码基因-配置cfgyolov2_检测-args{one(224224,3,'uint8')}-报告
代码生成成功:要查看报告,请打开('codegen\mex\yolov2\u detection\html\report.mldatx')。

在示例输入上运行生成的MEX函数

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

视频文件=“highway_lanechange.mp4”; videoFreader=vision.VideoFileReader(videoFile,“VideoOutputDataType”,‘uint8’); depVideoPlayer=vision.DeployableVideoPlayer(“尺寸”,“习俗”,“定制尺寸”,[640 480]);

逐帧读取视频输入,并使用检测器检测视频中的车辆。

cont=~isDone(视频阅读器);虽然conti=step(videoFreader);in=imresize(I[224224]);out=yolov2_-mex(in);depVideoPlayer(out);cont=~isDone(videoFreader)和&isOpen(depVideoPlayer);%如果视频播放器图形窗口关闭,则退出循环终止

工具书类

[1] 雷蒙、约瑟夫和阿里·法哈迪。YOLO9000:更好、更快、更强2017年IEEE计算机视觉和模式识别会议(CVPR),6517–25。檀香山,HI:IEEE,2017。

另见

|

相关话题