基于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构建,如静态、动态库或可执行程序,此示例具有以下附加要求。
英伟达工具包。
NVIDIA cuDNN库。
编译器和库的环境变量。有关更多信息,请参见第三方硬件而且设置必备产品s manbetx 845.
验证GPU环境
使用coder.checkGpuInstall
函数来验证运行此示例所需的编译器和库是否已正确设置。
envCfg = code . gpuenvconfig (“主机”);envCfg。DeepLibTarget =“cudnn”;envCfg。DeepCodegen = 1;envCfg。安静= 1;coder.checkGpuInstall (envCfg);
获得DAGNetwork的预培训
此示例使用yolov2ResNet50VehicleExample
包含预训练网络的mat文件。该文件的大小约为98MB。从MathWorks网站下载该文件。
matFile = matlab.internal.examples.download万博1manbetxSupportFile(“视觉/数据”,“yolov2ResNet50VehicleExample.mat”);vehicle - detector = load(matFile);net = vehicle .检测器
net = DAGNetwork属性:Layers: [150×1 nnet.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) %版权所有if isempty(yolov2Obj) yolov2Obj = code . loaddeeplearningnetwork (matFile);end %调用检测方法[bboxes,~,labels] = yolov2Obj.detect(in,'Threshold',0.5);将分类标签转换为字符向量的单元格数组标签= cellstr(标签);注释图像中的检测。outImg = insertObjectAnnotation(in,'rectangle',bboxes,labels);
运行MEX代码生成
要为入口点函数生成CUDA代码,需要为MEX目标创建一个GPU代码配置对象,并将目标语言设置为c++。使用编码器。DeepLearningConfig
函数来创建CuDNN
的深度学习配置对象,并将其分配给DeepLearningConfig
属性的图形处理器代码配置对象。运行codegen
命令,指定输入大小为224 * 224 * 3。该值对应YOLOv2的输入层大小。
cfg = code .gpu config (墨西哥人的);cfg。TargetLang =“c++”;cfg。DeepLearningConfig =编码器。DeepLearningConfig (“cudnn”);cfg。GenerateReport = true;inputArgs = {ones(224,224,3,“uint8”), coder.Constant (matFile)};codegen配置cfgyolov2_detectarg游戏inputArgs
代码生成成功:查看报告
运行生成的MEX
设置视频文件阅读器,读取输入的视频。创建一个视频播放器来显示视频和输出检测。
videoFile =“highway_lanechange.mp4”;videoFreader =视觉。VideoFileReader(videoFile,“VideoOutputDataType”,“uint8”);depVideoPlayer = vision.DeployableVideoPlayer (“大小”,“自定义”,“CustomSize”480年[640]);
逐帧读取视频输入,使用检测器检测视频中的车辆。
cont = ~isDone(videoFreader);而cont I = step(videoFreader);in = imresize(I,[224,224]);out = yolov2_detect_mex(in,matFile);步骤(depVideoPlayer);%如果视频播放器图形窗口关闭,则退出循环cont = ~isDone(videoFreader) && isOpen(depVideoPlayer);结束
参考文献
雷德蒙,约瑟夫和阿里·法哈迪。“YOLO9000:更好、更快、更强。”2017 IEEE计算机视觉与模式识别(CVPR)会议。IEEE 2017。
the MathWorks, Inc.版权所有
另请参阅
功能
对象
coder.gpuConfig
|coder.gpuEnvConfig
|编码器。CuDNNConfig
|愿景。VideoFileReader
(计算机视觉工具箱)|愿景。DeployableVideoPlayer
(计算机视觉工具箱)
相关的例子
- 使用YOLO v2深度学习的对象检测(计算机视觉工具箱)
- 导入预先训练的ONNX YOLO v2对象检测器(计算机视觉工具箱)
- 单次多盒检测器目标检测的代码生成
- 基于YOLO v3深度学习的目标检测代码生成
更多关于
- 从YOLO v2开始(计算机视觉工具箱)
- 对象检测的锚框(计算机视觉工具箱)
- 万博1manbetx支持的网络、层和类
- 为代码生成加载预先训练的网络