主要内容

使用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。安静= 1;coder.checkGpuInstall (envCfg);

得到Pretrained DAGNetwork

网= getYOLOv2 ();

DAG网络包括150层,包括卷积层、ReLU层、批归一化层以及YOLO v2变换层和YOLO v2输出层。为了显示一个交互式可视化的深度学习网络架构,使用analyzeNetwork(深度学习工具箱)函数。

analyzeNetwork(净);

yolov2_detect入口点函数

yolov2_detect.m入口点函数获取图像输入,使用保存在yolov2ResNet50VehicleExample.mat文件。对象中加载网络对象yolov2ResNet50VehicleExample.mat文件转换为持久变量yolov2Obj并在随后的检测调用中重用持久化对象。

类型(“yolov2_detect.m”
function outImg = yolov2_detect(in) % Copyright 2018-2019 The MathWorks, Inc. persistent yolov2Obj;if isempty(yolov2ResNet50VehicleExample.mat) yolov2Obj = coder.loadDeepLearningNetwork('yolov2ResNet50VehicleExample.mat');end % pass in input [bboxes,~,labels] = yolov2Obj.detect(in,'Threshold',0.5);如果code .target('MATLAB') labels = cellstr(labels);在图像中标注检测结果。outImg = insertObjectAnnotation(“矩形”,bboxes标签);

运行MEX代码生成

生成CUDA代码yolov2_detect.m入口点函数,为MEX目标创建GPU代码配置对象,并将目标语言设置为c++。使用编码器。DeepLearningConfig(GPU编码器)函数创建CuDNN深度学习配置对象,并将其赋给DeepLearningConfig属性。运行codegen命令指定输入大小为[224,224,3]。这个值对应YOLOv2的输入层大小。

cfg = coder.gpuConfig (墨西哥人的);cfg。TargetLang =“c++”;cfg。DeepLearningConfig =编码器。DeepLearningConfig (“cudnn”);codegen配置cfgyolov2_detectarg游戏{(224224 3 uint8)}报告
代码生成成功:要查看报告,打开('codegen/mex/yolov2_detect/html/report.mldatx')。

运行生成的墨西哥人

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

videoFile =“highway_lanechange.mp4”;videoFreader =愿景。VideoFileReader (videoFile“VideoOutputDataType”“uint8”);depVideoPlayer =愿景。DeployableVideoPlayer (“大小”“自定义”“CustomSize”480年[640]);

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

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

参考文献

Redmon, Joseph和Ali Farhadi。“YOLO9000:更好、更快、更强。”2017 IEEE计算机视觉与模式识别(CVPR)会议。IEEE 2017。