此示例显示如何为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构建,如静态、动态库或可执行文件,此示例具有以下附加要求。
NVIDIA工具包。
NVIDIA cuDNN图书馆。
编译器和库的环境变量。有关更多信息,请参阅第三方硬件和设置必备产品s manbetx 845.
使用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”和标签中);
若要生成入口点函数的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
代码生成成功:查看报告
设置视频文件读取器并读取输入视频。创建视频播放器以显示视频和输出检测。
视频文件=“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。
coder.gpuConfig
|coder.gpuEnvConfig
|coder.CuDNNConfig
|vision.VideoFileReader
(计算机视觉工具箱)|vision.DeployableVideoPlayer
(计算机视觉工具箱)