主要内容

生成C ++代码,用于使用Yolo V2和Intel MKL-DNN进行对象检测

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

有关更多信息,请参阅使用Yolo V2深学习的对象检测(计算机视觉工具箱)

先决条件

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

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

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

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

  • 深度学习工具箱™用于使用dagnetwork目的

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

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

该示例在Linux®,Windo金宝appws®和MacOS平台上得到支持,并且在线不支持MATLAB。

预算dagnetwork目的

DAG网络包含150层,包括卷积,relu和批处理标准化层以及Yolo V2变换和Yolo V2输出层。

net = getyolov2();
下载预审预测器(98 MB)...

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

net.layers

代码生成yolov2_detection功能

yolov2_detection该示例附加的函数获取图像输入并使用保存在图像上的检测器运行检测器yolov2Resnet50 vehicleexample.mat。该功能从yolov2Resnet50 vehicleexample.mat变成持久变量yolov2obj。随后调用该函数的呼叫重复使用持续对象进行检测。

类型('yolov2_detection.m'
函数OUTIMG = YOLOV2_DETECTION(IN)%版权2018-2019 Mathworks,Inc。%持续的对象Yolov2Obj用于加载Yolov2ObjectDetector对象。%在第一个调用此功能时,构建了持久对象并设置%。随后对该函数的调用重复使用相同的对象来调用输入上的检测%,从而避免了必须重建和重新加载%网络对象。持续的yolov2obj;如果ISEMPTY(YOLOV2OBJ)YOLOV2OBJ = CODER.LOADDEEPLEARNINGNETWORK('YOLOV2RESNET50 verhicleExample.mat');end%通过输入[Bboxes,〜,标签] = yolov2obj.detect(in,''阈值',0.5);OUTIMG = in;%将分类标签转换为字符矢量标签的细胞阵列= celltr(标签);如果〜(isempty(bboxes)&& isempty(labels))%注释图像中的检测。OUTIMG = insertObjectAnnotation(in,'Rectangle',Bboxes,标签); end

要生成代码,请为MEX目标创建代码配置对象,然后将目标语言设置为C ++。使用coder.deeplearningconfig创建MKL-DNN深度学习配置对象的功能。将此对象分配给深度学习代码配置对象的属性。将输入大小指定为参数代码根命令。在此示例中,Yolo V2网络的输入层大小为[224,224,3]

cfg = coder.config('Mex');cfg.targetlang ='C ++';cfg.deeplearningconfig = coder.deeplearningconfig('mkldnn');代码根-configCFGyolov2_detection-args{一个(224,224,3,'uint8')}-报告
代码生成成功:要查看报告,打开('Codegen/Mex/Yolov2_detection/html/report.mldatx')。

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

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

视频='Highway_lanechange.mp4';videofreader = vision.videofilereader(videofile,“ videooututputdatatype”,,,,'uint8');DepVideOplayer = Vision.DeployableVideOplayer('尺寸',,,,'风俗',,,,'自定义大小',[640 480]);

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

续= 〜ISDONE(videofreader);尽管cont i = step(videofreader);in = imresize(i,[224,224]);out = yolov2_detection_mex(in);DepVideOplayer(OUT);cont = 〜ISDONE(videOfReader)&& isopen(depVideOplayer);如果关闭视频播放器窗口,则会退出循环结尾

参考

[1] Redmon,Joseph和Ali Farhadi。“ Yolo9000:更好,更快,更强壮。”在2017 IEEE计算机视觉和模式识别会议(CVPR),6517–25。檀香山,嗨:IEEE,2017年。

也可以看看

(MATLAB编码器)|(MATLAB编码器)

相关话题