主要内容

使用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.目的

  • 电脑Vision Toolbox™用于视频I / O操作

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

此示例是Linux®,Windo金宝appws®和麦斯科斯平台的支持,不支持Matlab在线支持。

获得净化Dagnetwork.目的

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

net = getyolov2();
下载掠夺探测器(98 MB)......

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

net.layers.

代码生成yolov2_detection.功能

yolov2_detection.附加的功能随图拍摄了图像输入,并使用保存的网络在图像上运行检测器YOLOV2RESNET50VEHICEEXAMPLE.MAT.。该功能加载网络对象YOLOV2RESNET50VEHICEEXAMPLE.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;%将分类标签转换为matlab%执行的字符向量的小区数组,如果编码器。('matlab')标签= cellstr(标签);结束if〜(isempty(bboxes)&& isempty(标签))%注释图像中的检测。Outimg = InsertObjectAnnotation(IN,'矩形',Bboxes,标签); end

要生成代码,请为MEX目标创建代码配置对象,并将目标语言设置为C ++。使用coder.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 \ eport.mldatx')。

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

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

VideoFile =.'highway_lanechange.mp4';Videofreader = Vision.videofilereader(VideoFile,'VideoOutputDatatype''uint8');depvideoplayer = Vision.DeployapleDapeplayAlyer('尺寸''风俗''自定义大小',[640 480]);

通过帧读取视频输入框架并通过使用探测器检测视频中的车辆。

cont =〜ISDONE(Videofreader);尽管cont i = step(videofreader);In = Imresize(I,[224,224]);out = yolov2_detection_mex(in);depvideoplayer(出);cont =〜ISDONE(VideoFreader)&& Inopen(depvideoplayer);如果关闭视频播放器图形窗口,则%退出循环结尾

参考

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

也可以看看

|

相关话题