使用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工具包。
Nvidia Cudnn图书馆。
编译器和库的环境变量。有关更多信息,请参阅第三方硬件(GPU编码器)和设置先决条件下载188bet金宝搏(GPU编码器)。
验证GPU环境
使用Coder.CheckgPuinstall
(GPU编码器)函数以验证运行此示例所需的编译器和库是否正确设置。
envcfg = coder.gpuenvconfig('主持人');envcfg.deeplibtarget ='cudnn';envcfg.deepcodegen = 1;envcfg.quiet = 1;coder.checkgpuinstall(envcfg);
进行验证的dagnetwork
此示例使用yolov2Resnet50 vehiclesampame
包含验证网络的垫子文件。该文件的大小约为98MB。从Mathworks网站下载文件。
matfile = matlab.internal.examples.download金宝appsupportfile(“视觉/数据”,,,,'yolov2Resnet50 vehicleexample.mat');VERICLEDETECTOR =负载(矩阵);net = vehicledetector.detector.network
net =带有属性的dagnetwork:层:[150×1 nnet.cnn.layer.layer]连接:[162×2 table] inputNames:{'input_1'} outputnames:{'yolov2outputputlayer'}
DAG网络包含150层,包括卷积,relu和批处理标准化层以及Yolo V2变换和Yolo V2输出层。要显示深度学习网络体系结构的互动可视化,请使用分析
(深度学习工具箱)功能。
分析(NET);
这yolov2_detect
入口点功能
这yolov2_detect.m
入口点功能采用图像输入,并使用保存在图像上的检测器在图像上运行检测器yolov2Resnet50 vehicleexample.mat
文件。该功能从yolov2Resnet50 vehicleexample.mat
归档到持久变量yolov2obj并在后续检测调用中重复持久对象。
类型('yolov2_detect.m')
函数OUTIMG = YOLOV2_DETECT(IN,矩阵)%版权2018-2021 The Mathworks,Inc。持续Yolov2OBJ;如果ISEMPTY(YOLOV2OBJ)YOLOV2OBJ = CODER.LOADDEEPLEARNINGNETWORK(MATFILE);end%呼叫检测方法[bboxes,〜,labels] = yolov2obj.detect(in,''threshold',0.5);%将分类标签转换为炭矢量标签的细胞阵列= Cellstr(标签);图像中的注释检测%。OUTIMG = insertObjectAnnotation(in,'Rectangle',Bboxes,标签);
运行MEX代码生成
要为入口点函数生成CUDA代码,请为MEX目标创建GPU代码配置对象,并将目标语言设置为C ++。使用coder.deeplearningconfig
(GPU编码器)创建一个功能库丁
深度学习配置对象并将其分配给深度学习
GPU代码配置对象的属性。跑过代码根
命令指定输入大小为224 by-224-by-3。该值对应于Yolov2的输入层大小。
cfg = coder.gpuconfig('Mex');cfg.targetlang ='C ++';cfg.deeplearningconfig = coder.deeplearningconfig('cudnn');cfg.generatereport = true;inputargs = {一个(224,224,3,'uint8'),coder.constant(matfile)};代码根-configCFGyolov2_detect-args输入
代码生成成功:查看报告
运行产生的mex
设置视频文件读取器并读取输入视频。创建视频播放器以显示视频和输出检测。
视频='Highway_lanechange.mp4';videofreader = vision.videofilereader(videofile,“ videooututputdatatype”,,,,'uint8');DepVideOplayer = Vision.DeployableVideOplayer('尺寸',,,,'风俗',,,,'自定义大小',[640 480]);
阅读视频限制框架,并使用检测器检测视频中的车辆。
续= 〜ISDONE(videofreader);尽管cont i = step(videofreader);in = imresize(i,[224,224]);out = yolov2_detect_mex(in,matfile);step(DepVideOplayer,out);如果关闭视频播放器窗口,则会退出循环cont = 〜ISDONE(videOfReader)&& isopen(depVideOplayer);结尾
参考
[1] Redmon,Joseph和Ali Farhadi。“ Yolo9000:更好,更快,更强壮。”2017 IEEE计算机视觉和模式识别会议(CVPR)。IEEE,2017年。
版权2017-2021 The Mathworks,Inc。