主要内容

使用YOLO v2生成目标检测代码

此示例显示如何为you-only look once(YOLO)v2对象检测器生成CUDA®MEX。YOLO v2目标检测网络由两个子网络组成。特征提取网络后接检测网络。此示例为在中培训的网络生成代码基于YOLO v2深度学习的目标检测来自计算机视觉工具箱的示例™. 有关详细信息,请参阅基于YOLO v2深度学习的目标检测(计算机视觉工具箱)。您可以修改此示例,为导入到中的网络生成CUDA®MEX导入预训练ONNX YLO v2物体检测器来自计算机视觉工具箱的示例™. 有关详细信息,请参阅导入预训练ONNX YLO v2物体检测器(计算机视觉工具箱).

第三方先决条件

要求的

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

  • 支持CUDA®的NVIDIA®GPU和兼容驱动程序。

可选择的

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

验证GPU环境

使用coder.checkGpuInstall函数来验证运行此示例所需的编译器和库是否已正确设置。

envCfg=coder.gpuEnvConfig(“主持人”);envCfg.DeepLibTarget=“cudnn”;envCfg.DeepCodegen=1;envCfg.Quiet=1;coder.checkGpuInstall(envCfg);

提前训练

此示例使用Yolov2Resnet50车辆示例包含预训练网络的MAT文件。该文件大小约为98MB。请从MathWorks网站下载该文件。

matFile=matlab.internal.examples.downloadSu万博1manbetxpportFile(“愿景/数据”,“Yolov2Resnet50车辆示例垫”);vehicleDetector=load(matFile);net=vehicleDetector.detector.Network
net=DAG网络,属性:层:[150×1 nnet.cnn.layer.layer]连接:[162×2表]输入名称:{'input_1'}输出名称:{'yolov2OutputLayer'}

DAG网络包含150层,包括卷积、ReLU和批处理规范化层以及YLO v2转换和YLO v2输出层。要显示深度学习网络架构的交互式可视化,请使用分析网络(深度学习工具箱)作用

分析网络;

这个yolov2_检测入口点函数

这个yolov2_detect.m入口点功能接收图像输入,并使用存储在中的深度学习网络在图像上运行检测器Yolov2Resnet50车辆示例.mat函数从Yolov2Resnet50车辆示例.mat文件转换为持久变量yolov2Obj并在后续检测调用中重用持久对象。

类型(“yolov2_detect.m”)
函数outImg=yolov2_detect(in,matFile)%版权所有2018-2021 MathWorks,Inc.持久性yolov2Obj;如果isempty(yolov2Obj)yolov2Obj=coder.loadDeepLearningNetwork(matFile);结束对检测方法[bboxes,~,labels]=yolov2Obj.detect的%调用(in,'Threshold',0.5);%将分类标签转换为字符向量标签的单元格数组=cellstr(标签);%注释图像中的检测。outImg=插入对象注释(在“矩形”、“bboxes”和标签中);

运行MEX代码生成

若要生成入口点函数的CUDA代码,请为MeX目标创建GPU代码配置对象,并将目标语言设置为C++。coder.DeepLearningConfig函数创建一个CuDNN深度学习配置对象并将其分配给深度学习配置GPU代码配置对象的属性。运行编码基因指定输入大小224-x-224-x-3的命令。此值对应于输入层大小YOLOv2。

cfg=coder.gpuConfig(“墨西哥”); cfg.TargetLang=“C++”;cfg.DeepLearningConfig=coder.DeepLearningConfig(“cudnn”); cfg.GenerateReport=true;inputArgs={one(224224,3,‘uint8’),coder.Constant(matFile)};编码基因-配置cfgyolov2_检测-args输入rgs
代码生成成功:查看报告

运行生成的MEX

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

视频文件=“highway_lanechange.mp4”; videoFreader=vision.VideoFileReader(videoFile,“VideoOutputDataType”,‘uint8’); depVideoPlayer=vision.DeployableVideoPlayer(“尺寸”,“习俗”,“定制尺寸”,[640 480]);

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

cont=~isDone(视频阅读器);虽然conti=step(videoFreader);in=imresize(I[224224]);out=yolov2_detect_mex(in,matFile);step(depVideoPlayer,out);%如果视频播放器图形窗口关闭,则退出循环cont=~isDone(videoFreader)和&isOpen(depVideoPlayer);终止

工具书类

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

版权所有2017-2021MathWorks,Inc。

另见

功能

物体

相关实例

更多关于