主要内容

行人检测

这个例子展示了使用深度学习的行人检测应用程序的代码生成。行人检测是计算机视觉中的一个关键问题。行人检测在自动驾驶、监控、机器人等领域有多种应用。

先决条件

  • CUDA®启用NVIDIA®GPU。

  • NVIDIA CUDA工具包和驱动程序。

  • 英伟达cuDNN。

  • 编译器和库的环境变量。有关编译器和库的受支持版本的信息,请参见金宝app第三方硬件.有关设置环境变量,请参见设置必备产品下载188bet金宝搏

  • GPU编码器接口的深度学习库支持包。金宝app要安装此支持包,请使用金宝app扩展浏览器

检查GPU环境

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

envCfg = code . gpuenvconfig (“主机”);envCfg。DeepLibTarget =“cudnn”;envCfg。DeepCodegen = 1;envCfg。安静= 1;coder.checkGpuInstall (envCfg);

行人侦测网络

利用行人和非行人图像训练行人检测网络。该网络是在MATLAB®训练通过使用trainPedNet.m辅助脚本。滑动窗口方法从大小为[64 32]的图像中裁剪补丁。补丁尺寸从热图中获得,它代表了数据集中图像中行人的分布。它表明了图像中不同尺度和位置的行人的存在。在这个例子中,靠近相机的行人斑块被裁剪和处理。利用非最大抑制(non - maximum Suppression, NMS)对得到的patch进行合并,检测出完整的行人。

行人检测网络包含12层,包括卷积层、全连接层和分类输出层。

负载(“PedNet.mat”);PedNet。层
ans = 12×1带有图层的图层数组:1 imageinput的图像输入64×32×3图片2“zerocenter”正常化的conv_1卷积20 5×5×3旋转步[1]和填充[0 0 0 0]3‘relu_1 ReLU ReLU 4“maxpool_1”马克斯池2×2马克斯池步(2 - 2)和填充[0 0 0 0]5 crossnorm的横通道正常化横通道正常化与5频道/元素6‘conv_2卷积20 5×5×20旋转步[1]和填充[0 0 0 0]7‘relu_2 ReLU ReLU 8 maxpool_2马克斯池2×2马克斯pooling with stride [2 2] and padding [0 0 0 0] 9 'fc_1' Fully Connected 512 fully connected layer 10 'fc_2' Fully Connected 2 fully connected layer 11 'softmax' Softmax softmax 12 'classoutput' Classification Output crossentropyex with classes 'NonPed' and 'Ped'

pedDetect_predict入口点函数

pedDetect_predict.m入口点函数接受图像输入,并使用保存在的深度学习网络对图像进行预测PedNet.mat文件。方法加载网络对象PedNet.mat文件转换为持久变量pednet.然后,函数在后续调用中重用持久对象。

类型(“pedDetect_predict.m”
Copyright 2017-2019 The MathWorks, Inc. code .gpu.kernelfun;持久pednet;if isempty(pednet) pednet = code . loaddeeplearningnetwork (code .const(' pednet .mat'),'Pedestrian_Detection');end [imgHt, imgWd, ~] = size(img);VrHt = [imgHt - 30, imgHt];垂直高度的两个波段被认为是% patchHt和patchWd是从热图中获得的(这里的热图是指以不同%颜色的地图形式表示的%行人数据。不同颜色表示存在不同比例的行人)。patchHt = 300;patchWd = patchHt/3;% PatchCount用于估计每个图像的补丁数量PatchCount = ((imgWd - patchWd)/20) + 2; maxPatchCount = PatchCount * 2; Itmp = zeros(64 , 32 , 3 , maxPatchCount); ltMin = zeros(maxPatchCount); lttop = zeros(maxPatchCount); idx = 1; % To count number of image patches obtained from sliding window cnt = 1; % To count number of patches predicted as pedestrians bbox = zeros(maxPatchCount , 4); value = zeros(maxPatchCount , 1); %% Region proposal for two bands for VrStride = 1 : 2 for HrStride = 1 : 20 : (imgWd - 60) % Obtain horizontal patches with stride 20. ltMin(idx) = HrStride + 1; rtMax = min(ltMin(idx) + patchWd , imgWd); lttop(idx) = (VrHt(VrStride) - patchHt); It = img(lttop(idx): VrHt(VrStride) , ltMin(idx) : rtMax , :); Itmp(:,:,:,idx) = imresize(It,[64,32]); idx = idx + 1; end end for j = 1 : size (Itmp,4) score = pednet.predict(Itmp(:,:,:,j)); % Classify ROI % accuracy of detected box should be greater than 0.90 if (score(1,2) > 0.80) bbox(cnt,:) = [ltMin(j),lttop(j), patchWd , patchHt]; value(cnt,:) = score(1,2); cnt = cnt + 1; end end %% NMS to merge similar boxes if ~isempty(bbox) [selectedBbox,~] = selectStrongestBbox(bbox(1:cnt-1,:),... value(1:cnt-1,:),'OverlapThreshold',0.002); end

生成CUDA MEXpedDetect_predict函数

为MEX目标创建“GPU Configuration”对象,并选择目标语言为“c++”。使用编码器。DeepLearningConfig函数创建CuDNN深度学习配置对象,并将其分配给DeepLearningConfigGPU代码配置对象的属性。要生成CUDA MEX,请使用codegen命令并指定输入图像的大小。该值对应行人检测网络的输入层大小。

加载一个输入图像。Im = imread(“test.jpg”);Im = imresize(Im,[480,640]);cfg = code . gpuconfig (墨西哥人的);cfg。TargetLang =“c++”;cfg。DeepLearningConfig =编码器。DeepLearningConfig (“cudnn”);codegen配置cfgpedDetect_predictarg游戏{我}报告
要查看报告,打开('codegen/mex/pedDetect_predict/html/report.mldatx')。

运行生成的MEX

调用pednet_predict_mex在输入图像上。

imshow (im);ped_bboxes = pedDetect_predict_mex(im);

显示最终的预测。

outputImage = insertShape(im,“矩形”ped_bboxes,“线宽”3);imshow (outputImage);

视频分类

包含的帮助文件pedDetect_predict.m从视频中抓取帧,进行预测,并显示每个捕获的视频帧的分类结果。

v = videereader ('LiveData.avi');FPS = 0;im = readFrame(v);Im = imresize(Im,[480,640]);
调用MEX函数进行penet预测;ped_bboxes = pedDetect_predict_mex(im);纽特= toc;
FPS = .9* FPS + .1*(1/newt);
% display outputImage = insertShape(im,'Rectangle',ped_bboxes,'LineWidth',3);imshow(outputImage) pause(0.2)结束

清除内存中加载的静态网络对象。

清晰的墨西哥人

另请参阅

功能

对象

相关的话题