使用YOLO v2和Intel mml - dnn生成目标检测的c++代码
这个例子展示了如何在Intel®处理器上为YOLO v2对象检测网络生成c++代码。生成的代码使用英特尔深度神经网络数学内核库(MKL-DNN)。
有关更多信息,请参见使用YOLO v2深度学习的目标检测(计算机视觉工具箱).
先决条件
Intel深度神经网络数学内核库(MKL-DNN)
请参考MKLDNN CPU支金宝app持了解支持mml - dnn库的处理器列表金宝app
MATLAB®Coder™用于c++代码生成
MATLAB编码接口的深度学习支持包金宝app
深度学习工具箱™用于使用
DAGNetwork
对象计算机视觉工具箱™视频I/O操作
有关编译器和库的支持版本的更多信息,请参见金宝app第三方软硬件.
此示例支持Linux®、Wind金宝appows®和macOS平台,不支持MATLAB Online。
接受预培训DAGNetwork
对象
DAG网络包含150层,包括卷积层、ReLU层和批处理归一化层以及YOLO v2转换层和YOLO v2输出层。
net = getYOLOv2();
下载预训练的检测器(98 MB)…
使用命令网层
才能看到网络的各个层面。
网层
代码生成yolov2_detection
函数
的yolov2_detection
示例附带的函数接受图像输入,并使用保存的网络在图像上运行检测器yolov2ResNet50VehicleExample.mat
.该函数从加载网络对象yolov2ResNet50VehicleExample.mat
变成一个持久变量yolov2Obj
.对该函数的后续调用重用持久对象进行检测。
类型(“yolov2_detection.m”)
function outImg = yolov2_detection(in) %版权所有2018-2019 The MathWorks, Inc. %持久对象yolov2Obj用于加载YOLOv2ObjectDetector对象。在第一次调用此函数时,将构造持久对象并设置。对该函数的后续调用重用相同的对象来对输入调用检测%,从而避免必须重新构造和重新加载% network对象。持久yolov2Obj;if isempty(yolov2Obj) yolov2Obj = code . loaddeeplearningnetwork ('yolov2ResNet50VehicleExample.mat');end % pass in input [bboxes,~,labels] = yolov2Obj.detect(in,'Threshold',0.5);outImg = in;%转换类别标签到单元格数组的字符向量标签= cellstr(标签);if ~(isempty(bboxes) && isempty(labels)) %注释图像中的检测。outImg = insertObjectAnnotation(在,'矩形',盒子,标签); end
要生成代码,请为MEX目标创建一个代码配置对象,并将目标语言设置为c++。使用编码器。DeepLearningConfig
函数,创建mml - dnn深度学习配置对象。将此对象分配给DeepLearningConfig
代码配置对象的属性。属性的参数指定输入大小codegen
命令。在此例中,YOLO v2网络的输入层大小为(224224 3)
.
CFG = code .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]);
逐帧读取视频输入,使用检测器检测视频中的车辆。
cont = ~isDone(videoFreader);而cont I = step(video ofreader);in = imresize(I,[224,224]);Out = yolov2_detection_mex(in);depVideoPlayer(出);cont = ~isDone(videoFreader) && isOpen(depVideoPlayer);%如果视频播放器图形窗口关闭,则退出循环结束
参考文献
雷蒙,约瑟夫和阿里·法哈蒂。“YOLO9000:更好、更快、更强。”在2017 IEEE计算机视觉与模式识别大会, 6517 - 25所示。檀香山,HI: IEEE, 2017。
另请参阅
编码器。DeepLearningConfig
|coder.hardware