主要内容

行人检测

此示例显示了使用深度学习的行人检测应用程序的代码生成。行人检测是计算机视觉中的关键问题。行人检测在自主驾驶,监控,机器人等领域有几种应用。

先决条件

  • CUDA®已启用NVIDIA®GPU。

  • nvidia cuda工具包和司机。

  • nvidia cudnn。

  • 编译器和库的环境变量。有关受支持的编译器和库版本的信息,请参见万博1manbetx第三方硬件。有关设置环境变量,请参见设置先决产品s manbetx 845

  • GPU编码器接口深度学习库支持包。万博1manbetx要安装此支持包,请使用万博1manbetx附加资源管理器

验证GPU环境

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

envCfg = coder.gpuEnvConfig ('主持人');envCfg。DeepLibTarget ='cudnn';envcfg.deepcodegen = 1;Envcf​​g.quiet = 1;Coder.CheckGpuInstall(Envcf​​g);

行人检测网络

步行检测网络通过使用行人和非行人的图像培训。该网络通过使用Matlab®培训TrainPednet.M.辅助脚本。滑动窗口从大小[64 32]的图像中接近作物斑块。Patch的维度是通过热图得到的,热图表示了数据集中图像中行人的分布情况。它表示图像中不同尺度和位置上的行人的存在。在这个例子中,靠近相机的行人被裁剪和处理。利用非最大抑制(non - maximum Suppression, NMS)对获得的补丁进行合并,检测完整行人。

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

加载(“PedNet.mat”);Pednet.Layers.
ANS = 12×1层阵列,层数:1'ImageInput'图像输入64×32×3图像,具有“Zerocenter”归一化2'CONC_1'卷积20 5×5×3卷积,步进[1 1]和填充[0 00 0] 3'Relu_1'Relu Relu 4'MaxPool_1'MAX池2×2最大池与步幅[2]和填充[0 0 0 0] 5'交叉频道的跨通道归一化交叉通道归一化与每个元素6通道的交叉通道标准化'conv_2'卷积20 5×5×20卷绕围绕[1 1]和填充[0 0 0 0] 7'Relu_2'Relu Relu 8'MaxPool_2'Max池2×2最大池与步幅[2 2]和填充[0 0 0] 9'FC_1'完全连接的512完全连接的第10层FC_2'完全连接的2完全连接的第11层SOFTMAX'SOFTMAX SOFTMAX 12'ClassOutput'分类输出CrossentRopyex,类别“未编制”和“PED”

pedDetect_predict入口点函数

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

类型(“pedDetect_predict.m”
function selectedBbox = pedDetect_predict(img) %#codegen % Copyright 2017-2019 The MathWorks, Inc. code .gpu.kernelfun;持久pednet;如果isempty(pednet) pednet = coder.loadDeepLearningNetwork(coder.const(' pednet .mat'),'行人检测');end [imight, imgWd, ~] = size(img);VrHt = [imight - 30, imight];%考虑两个垂直高度的波段% 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配置对象,并将目标语言设置为c++。使用coder.deeplearningconfig函数创建CuDNN深度学习配置对象并将其分配给DeeplearningConfigGPU代码配置对象的属性。要生成CUDA MEX,请使用Codegen.命令并指定输入图像的大小。该值对应行人检测网络的输入层大小。

%加载输入图像。Im = imread('test.jpg');IM = IMResize(IM,[480,640]);cfg = coder.gpuconfig(墨西哥人的);cfg.targetlang ='c ++';cfg。DeepLearningConfig =编码器。DeepLearningConfig ('cudnn');Codegen.-Config.CFG.pedDetect_predict-  args.{我}报告
代码生成成功:要查看报告,请打开('codegen / mex / pedddetect_predict / html / export.mldatx')。

运行生成的墨西哥人

称呼pednet_predict_mex.在输入图像上。

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

显示最终预测。

OperalImage = insertshape(Im,'长方形'ped_bboxes,“线宽”,3);imshow(产来自Opersimage);

视频上的分类

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

v = Videoreader('livedata.avi');fps = 0;虽然来自视频IM = ReadFrame(V)的Hasfame(v)%读取帧;IM = IMResize(IM,[480,640]);
PEDNET预测TIC的%呼叫MEX函数;ped_bboxes = pedDetect_predict_mex (im);newt = toc;
%fps fps = .9 * fps + .1 *(1 / newt);
% display outputImage = insertShape(im,'矩形',ped_bboxes,'LineWidth',3);imshow (outputImage)暂停(0.2)

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

清除梅克斯;

也可以看看

职能

对象

相关话题