主要内容

使用YOLO V2和Intel MKL-DNN生成用于对象检测的C ++代码

此示例显示如何在英特尔®处理器上生成Yolo V2对象检测网络的C ++代码。生成的代码使用Intel Math Kernel库进行深神经网络(MKL-DNN)。

有关更多信息,请参阅对象检测使用YOLO V2深度学习(电脑视觉工具箱)

先决条件

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

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

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

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

  • 深度学习工具箱™Dagnetwork.目的

  • 用于视频I / O操作的计算机Vision Tool™

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

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

得到PretrainedDagnetwork.目的

DAG网络包含150层,包括卷积,Relu和批量归一化层和YOLO V2变换和YOLO V2输出层。

net = getyolov2();
下载预训练检测器(98mb)…

使用命令网。层要查看网络的所有层。

网。层

代码生成Yolov2_Detection.函数

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

类型(“yolov2_detection.m”的)
函数outimg = yolov2_detection(in)%copyright 2018-2019 Mathworks,Inc.%持久对象yolov2obj用于加载Yolov2ObjectDetector对象。%在第一次调用此函数时,构建持久对象并为%设置。随后对函数的调用重用相同的对象在输入上调用检测%,从而避免重建和重新加载%网络对象。持久的yolov2obj;如果是isempty(yolov2obj)yolov2obj = coder.loaddeeplearningnetwork('yolov2resnet50vehiceexample.mat');输入%输入[bboxes,〜,标签] = yolov2obj.detect(in,'threshold',0.5);Outimg = In;%将分类标签转换为字符向量标签= CellStr(标签)的单元格数组;if〜(isempty(bboxes)&& isempty(标签))%注释图像中的检测。Outimg = InsertObjectAnnotation(IN,'矩形',Bboxes,标签); end

要生成代码,为MEX目标创建代码配置对象,并将目标语言设置为C ++。使用编码器。DeepLearningConfig功能创建MKL-DNN Deep Learing配置对象。将此对象分配给DeepLearningConfig代码配置对象的属性。将输入大小指定为参数Codegen.命令。在此示例中,YOLO V2网络的输入层大小是[224,224,3]

cfg = coder.config('mex');cfg.targetlang ='c ++';cfg.deeplearningconfig = coder.deeplearningconfig('mkldnn');Codegen.-Config.CFG.Yolov2_Detection.-  args.{ONE(224,224,3,'UINT8')}报告
代码生成成功:要查看报告,请打开('codegen / mex / yolov2_detection / html / export.mldatx')。

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

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

videoFile ='highway_lanechange.mp4';videoFreader =愿景。VideoFileReader (videoFile'VideoOutputDatatype''uint8');depvideoplayer = Vision.DeployapleableDoplayer('尺寸'“自定义”'自定义大小',[640 480]);

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

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

参考文献

[1] Redmon,Joseph和Ali Farhadi。“YOLO9000:更好,更快,更强。”在2017年电脑视觉和模式识别(CVPR)的IEEE会议,6517-25。檀香山,嗨:IEEE,2017年。

也可以看看

|

相关的话题