主要内容

使用Yolo V2代码生成对象检测

此示例显示了如何仅查看一次(YOLO)V2对象检测器来生成CUDA®MEX。Yolo V2对象检测网络由两个子网组成。功能提取网络,然后是检测网络。此示例为在该网络中生成代码使用Yolo V2深学习的对象检测计算机视觉工具箱™的示例。有关更多信息,请参阅使用Yolo V2深学习的对象检测。您可以修改此示例,以生成CUDA®MEX的导入网络进口预估计的ONNX YOLO V2对象检测器计算机视觉工具箱™的示例。有关更多信息,请参阅进口预估计的ONNX YOLO V2对象检测器

第三方先决条件

必需的

此示例生成CUDA MEX,并具有以下第三方要求。

  • CUDA®启用了NVIDIA®GPU和兼容的驱动程序。

可选的

对于非MEX构建,例如静态,动态库或可执行文件,此示例具有以下其他要求。

验证GPU环境

使用Coder.CheckgPuinstall(GPU编码器)函数以验证运行此示例所需的编译器和库是否正确设置。

envcfg = coder.gpuenvconfig('主持人');envcfg.deeplibtarget ='cudnn';envcfg.deepcodegen = 1;envcfg.quiet = 1;coder.checkgpuinstall(envcfg);

进行验证的dagnetwork

此示例使用yolov2Resnet50 vehiclesampame包含验证网络的垫子文件。该文件的大小约为98MB。从Mathworks网站下载文件。

matfile = matlab.internal.examples.download金宝appsupportfile(“视觉/数据”,,,,'yolov2Resnet50 vehicleexample.mat');VERICLEDETECTOR =负载(矩阵);net = vehicledetector.detector.network
net =带有属性的dagnetwork:层:[150×1 nnet.cnn.layer.layer]连接:[162×2 table] inputNames:{'input_1'} outputnames:{'yolov2outputputlayer'}

DAG网络包含150层,包括卷积,relu和批处理标准化层以及Yolo V2变换和Yolo V2输出层。要显示深度学习网络体系结构的互动可视化,请使用分析(深度学习工具箱)功能。

分析(NET);

yolov2_detect入口点功能

yolov2_detect.m入口点功能采用图像输入,并使用保存在图像上的检测器在图像上运行检测器yolov2Resnet50 vehicleexample.mat文件。该功能从yolov2Resnet50 vehicleexample.mat归档到持久变量yolov2obj并在后续检测调用中重复持久对象。

类型('yolov2_detect.m'
函数OUTIMG = YOLOV2_DETECT(IN,矩阵)%版权2018-2021 The Mathworks,Inc。持续Yolov2OBJ;如果ISEMPTY(YOLOV2OBJ)YOLOV2OBJ = CODER.LOADDEEPLEARNINGNETWORK(MATFILE);end%呼叫检测方法[bboxes,〜,labels] = yolov2obj.detect(in,''threshold',0.5);%将分类标签转换为炭矢量标签的细胞阵列= Cellstr(标签);图像中的注释检测%。OUTIMG = insertObjectAnnotation(in,'Rectangle',Bboxes,标签);

运行MEX代码生成

要为入口点函数生成CUDA代码,请为MEX目标创建GPU代码配置对象,并将目标语言设置为C ++。使用coder.deeplearningconfig(GPU编码器)创建一个功能库丁深度学习配置对象并将其分配给深度学习GPU代码配置对象的属性。跑过代码根命令指定输入大小为224 by-224-by-3。该值对应于Yolov2的输入层大小。

cfg = coder.gpuconfig('Mex');cfg.targetlang ='C ++';cfg.deeplearningconfig = coder.deeplearningconfig('cudnn');cfg.generatereport = true;inputargs = {一个(224,224,3,'uint8'),coder.constant(matfile)};代码根-configCFGyolov2_detect-args输入
代码生成成功:查看报告

运行产生的mex

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

视频='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_detect_mex(in,matfile);step(DepVideOplayer,out);如果关闭视频播放器窗口,则会退出循环cont = 〜ISDONE(videOfReader)&& isopen(depVideOplayer);结尾

参考

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

版权2017-2021 The Mathworks,Inc。