主要内容

生成c++代码的对象检测使用YOLO v2和英特尔MKL-DNN

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

有关更多信息,请参见使用YOLO v2进行对象检测(计算机视觉工具箱)

先决条件

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

  • 请参考MKLDNN CPU支金宝app持了解支持MKL-DNN库的处理器列表金宝app

  • MATLAB®Coder™用于c++代码生成

  • MATLAB编码器接口的深度学习支持包金宝app

  • 深度学习工具箱™DAGNetwork对象

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

有关编译器和库支持的版本的更多信息,请参见金宝app第三方软硬件

这个例子是支持Linux®,Wi金宝appndows®和macOS平台,不支持MATLAB Online。

得到PretrainedDAGNetwork对象

DAG网络包含150层,包括卷积层、ReLU层、批处理正常化层、YOLO v2转换层和YOLO v2输出层。

网= getYOLOv2 ();
下载预训练检测器(98mb)…

使用命令网。层才能看到网络的所有层面。

网。层

代码生成的yolov2_detection函数

yolov2_detection附加在示例中的函数接受图像输入,并使用保存在其中的网络在图像上运行检测器yolov2ResNet50VehicleExample.mat.函数从yolov2ResNet50VehicleExample.mat变成一个持久变量yolov2Obj.后续对该函数的调用将重用持久对象进行检测。

类型(“yolov2_detection.m”
一个持久化对象yolov2Obj被用来加载YOLOv2ObjectDetector对象。在第一次调用这个函数时,将构造持久对象并设置。对该函数的后续调用将重用相同的对象来对输入调用检测%,从而避免了不得不重新构造和重载%网络对象。持久yolov2Obj;if isempty(yolov2Obj) yolov2Obj = code . loaddeeplearningnetwork ('yolov2ResNet50VehicleExample.mat');end % pass in input [bboxes,~,labels] = yolov2Obj.detect(in,'Threshold',0.5);outImg =;%将分类标签转换为字符向量的单元格数组如果~(isempty(bboxes) && isempty(labels)) %在图像中标注检测。outImg = insertObjectAnnotation(“矩形”,bboxes标签); end

要生成代码,为MEX目标创建一个代码配置对象,并将目标语言设置为c++。使用编码器。DeepLearningConfig函数,创建MKL-DNN深度学习配置对象。将此对象赋给DeepLearningConfig属性。属性的参数指定输入大小codegen命令。在本例中,YOLO v2网络的输入层大小为(224224 3)

cfg = coder.config (墨西哥人的);cfg。TargetLang =“c++”;cfg。DeepLearningConfig =编码器。DeepLearningConfig (“mkldnn”);codegen配置cfgyolov2_detectionarg游戏{(224224 3 uint8)}报告
代码生成成功:要查看报告,打开('codegen/mex/yolov2_detection/html/report.mldatx')。

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

设置一个视频文件阅读器并读取示例输入视频highway_lanechange.mp4.创建一个视频播放器来显示视频和输出检测。

videoFile =“highway_lanechange.mp4”;videoFreader =愿景。VideoFileReader (videoFile“VideoOutputDataType”“uint8”);depVideoPlayer =愿景。DeployableVideoPlayer (“大小”“自定义”“CustomSize”480年[640]);

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

续= ~结束(videoFreader);cont I = step(videoFreader);在= imresize(我,[224224]);= yolov2_detection_mex(的);depVideoPlayer(出);= ~isDone(videoFreader) && isOpen(depVideoPlayer);%如果视频播放器图形窗口关闭,退出循环结束

参考文献

雷蒙德,约瑟夫和阿里·法哈迪。“YOLO9000:更好、更快、更强。”在2017 IEEE计算机视觉与模式识别大会(CVPR), 6517 - 25所示。火奴鲁鲁,HI: IEEE, 2017。

另请参阅

|

相关的话题