主要内容

使用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

本示例使用yolov2ResNet50VehicleExample包含预先训练的网络的mat文件。该文件的大小约为98MB。从MathWorks网站下载该文件。

matFile = matlab.internal.examples.download万博1manbetxSupportFile (“视觉/数据”“yolov2ResNet50VehicleExample.mat”);vehicleDetector =负载(matFile);网= vehicleDetector.detector.Network
net = DAGNetwork with properties: Layers: [150×1 net.cnn.layer. layer] Connections: [162×2 table] InputNames: {'input_1'} OutputNames: {'yolov2OutputLayer'}

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,matFile) % Copyright 2018-2021 The MathWorks, Inc. persistent yolov2Obj;如果是空的(yolov2Obj) yolov2Obj = code . loaddeeplearningnetwork (matFile);end %调用检测方法[bboxes,~,labels] = yolov2Obj.detect(in,'Threshold',0.5);%将分类标签转换为字符向量的单元格数组%在图像中注释检测。outImg = insertObjectAnnotation(“矩形”,bboxes标签);

运行MEX代码生成

为入口点函数生成CUDA代码,需要为MEX目标创建一个GPU代码配置对象,并将目标语言设置为c++。使用编码器。DeepLearningConfig(GPU编码器)函数创建CuDNN的深度学习配置对象,并将其分配给DeepLearningConfig图形处理器代码配置对象的属性。运行codegen指定输入大小为224 × 224 × 3的命令。该值对应YOLOv2的输入层大小。

cfg = coder.gpuConfig (墨西哥人的);cfg。TargetLang =“c++”;cfg。DeepLearningConfig =编码器。DeepLearningConfig (“cudnn”);cfg。GenerateReport = true;inputArgs = {(224224 3“uint8”), coder.Constant (matFile)};codegen配置cfgyolov2_detectarg游戏inputArgs
代码生成成功:查看报告

运行生成的墨西哥人

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

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

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

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

参考文献

雷蒙德,约瑟夫和阿里·法哈迪。“YOLO9000:更好、更快、更强。”2017 IEEE计算机视觉与模式识别会议(CVPR)。IEEE 2017。

版权所有:the MathWorks, Inc.