这个例子展示了如何为一个你只看一次(YOLO) v2对象检测器生成CUDA®MEX。一个YOLO v2目标检测网络由两个子网组成。特征提取网络,然后是检测网络。控件中训练的网络生成代码基于YOLO v2深度学习的目标检测来自计算机Vision Toolbox™的示例。有关更多信息,请参见基于YOLO v2深度学习的目标检测(计算机视觉工具箱).你可以修改这个例子来生成CUDA®MEX的网络导入导入预折叠onnx yolo v2对象探测器来自计算机Vision Toolbox™的示例。有关更多信息,请参见导入预折叠onnx yolo v2对象探测器(计算机视觉工具箱).
必需的
这个例子生成CUDA MEX,并有以下第三方要求。
CUDA®支持NVIDIA®GPU和兼容的驱动程序。
可选
对于诸如静态,动态库或可执行文件的非MEX构建,此示例具有以下附加要求。
英伟达工具包。
nvidia cudnn图书馆。
编译器和库的环境变量。有关更多信息,请参见第三方硬件(GPU编码器)和设置先决产品下载188bet金宝搏(GPU编码器).
使用Coder.CheckGPuInstall.
(GPU编码器)验证运行此示例所需的编译器和库是否已正确设置。
envCfg = coder.gpuEnvConfig ('主持人');envCfg。DeepLibTarget ='cudnn';envcfg.deepcodegen = 1;Envcfg.quiet = 1;Coder.CheckGpuInstall(Envcfg);
网= getYOLOv2 ();
DAG网络包括150层,包括卷积层、ReLU层、批归一化层以及YOLO v2变换层和YOLO v2输出层。为了显示一个交互式可视化的深度学习网络架构,使用analyzeNetwork
函数。
analyzeNetwork(净);
yolov2_detect.
入口点函数的yolov2_detect.m入口点函数拍摄图像输入并使用保存的深度学习网络运行图像上的检测器YOLOV2RESNET50VEHICEEXAMPLE.MAT.
文件。对象中加载网络对象YOLOV2RESNET50VEHICEEXAMPLE.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标签);
生成CUDA代码yolov2_detect.m入口点函数,为MEX目标创建GPU代码配置对象,并将目标语言设置为C ++。使用coder.deeplearningconfig
(GPU编码器)函数创建CuDNN
深度学习配置对象,并将其赋给DeeplearningConfig
属性。运行codegen
命令指定输入大小为[224,224,3]。这个值对应YOLOv2的输入层大小。
cfg = coder.gpuConfig (墨西哥人的);cfg。TargetLang =“c++”;cfg。DeepLearningConfig =编码器。DeepLearningConfig ('cudnn');codegen配置cfgyolov2_detect.arg游戏{(224224 3 uint8)}-报告
代码生成成功:要查看报告,打开('codegen/mex/yolov2_detect/html/report.mldatx')。
设置视频文件读取器并读取输入视频。创建视频播放器以显示视频和输出检测。
VideoFile =.“highway_lanechange.mp4”;Videofreader = Vision.videofilereader(VideoFile,“VideoOutputDataType”,“uint8”);depVideoPlayer =愿景。DeployableVideoPlayer (“大小”,'风俗',“CustomSize”480年[640]);
逐帧读取视频输入,使用检测器检测视频中的车辆。
cont =〜ISDONE(Videofreader);尽管cont I = step(videoFreader);在= imresize(我,[224224]);= yolov2_detect_mex(的);步骤(depVideoPlayer);cont = ~isDone(videoFreader) && isOpen(depVideoPlayer);%如果视频播放器图形窗口关闭,退出循环结束
[1] Redmon,Joseph和Ali Farhadi。“YOLO9000:更好,更快,更强。”2017年电脑视觉和模式识别(CVPR)会议。IEEE,2017年。