主要内容

使用深度学习的Simulink中的车道和车辆检测万博1manbetx

这个例子展示了如何在Simulink®模型中使用深度卷积神经网络来执行车道和车辆检测。万博1manbetx本例以交通视频中的帧作为输入,输出两个车道边界,分别对应ego车辆的左右车道,并检测帧中的车辆。

本例使用预先训练的车道检测网络Lane检测用GPU编码器进行了优化GPU编码器工具箱™的示例。有关更多信息,请参见Lane检测用GPU编码器进行了优化(GPU编码器)

本例还使用了预先训练的车辆检测网络使用YOLO v2进行对象检测计算机视觉工具箱的示例™。有关更多信息,请参见使用YOLO v2进行对象检测(计算机视觉工具箱)

算法工作流程

示出了用于Simulink模型的算法工作流的框图。万博1manbetx

预先训练车道和车辆检测网络

getVehicleDetectionAndLaneDetectionNetworks功能下载训练兰尼特.matYOLOV2RESNET50VEHICEEXAMPLE.MAT.文件,如果它们不存在。

getVehicleDetectionAndLaneDetectionNetworks ()
下载预训练车道侦测网络(143mb)…下载预先训练的车辆侦测网络(98mb)…

下载示例视频

如果~ ('./caltech_washington1.avi'“文件”)URL =.'//www.tianjin-qmedu.com/万博1manbetxsupportfiles/gpucoder/media/caltech_washington1.avi';websave (“caltech_washington1.avi”,URL);结束

车道和车辆检测Simulink模型万博1manbetx

示出了用万博1manbetx于在业务视频上执行车道和车辆检测的Simulink模型。当模型运行时,视频查看器块显示与车道和车辆注释的交通视频。

Open_System(“laneAndVehicleDetectionMDL”);

车道检测

对于车道检测,对交通视频进行预处理,将视频的每帧大小调整为227 × 227 × 3,然后将其缩放为255倍。预处理后的帧被输入到训练兰尼特.mat网络加载在预测从深度学习工具箱™块。该网络将图像作为输入,输出与自助车辆的左侧和右侧相对应的车道边界。每个车道边界由抛物线方程表示:

$ y = ax ^ 2 + bx +加元

这里y是横向偏移,x是到车辆的纵向距离。网络输出每个车道的三个参数a、b和c。网络架构类似于AlexNet除了最后几层被一个更小的完全连接层和回归输出层所取代。的车道检测坐标MATLAB功能块定义函数lane_detection_coordinates从预测块中取出输出并输出三个参数;laneFoundltPts,和RTPTS..阈值化用于确定是否找到左和右车道边界。如果两个都被发现,laneFound是否设置为真,边界的轨迹被计算并存储在其中ltPtsRTPTS.分别。

typelane_detection_coordinates
函数[lanefound,ltpts,Rtpts] = lane_detection_coordinates(lanenetout)%copyright 2020 the mathworks,Inc。持久Lanecoeffmeans;如果是isempty(lanecoeffmeans)lanecoeffmeans = [-0.0002 0.0002 1.4740 -0.0002 0.0045 -1.3787];结束持久Lanecoeffstds;如果是伊斯克(Lanecoeffstds)Lanecoeffstds = [0.0030 0.0766 0.6313 0.0026 0.0736 0.9846];结束Params = Lanenetout。* Lanecoeffstds + Lanecoeffmeans;IsrightLanefound = ABS(参数(6))> 0.5;%C应该大于0.5,因为它是右侧车道isleftlanefound = abs(Params(3))> 0.5;持久的车辆xpoints;如果是isempty(舰载点)的漏斗= 3:30;%仪表,在传感器端LTPTS之前,= Coder.Nullcopy(零(28,2,'单')); rtPts = coder.nullcopy(zeros(28,2,'single')); if isRightLaneFound && isLeftLaneFound rtBoundary = params(4:6); rt_y = computeBoundaryModel(rtBoundary, vehicleXPoints); ltBoundary = params(1:3); lt_y = computeBoundaryModel(ltBoundary, vehicleXPoints); % Visualize lane boundaries of the ego vehicle tform = get_tformToImage; % map vehicle to image coordinates ltPts = tform.transformPointsInverse([vehicleXPoints', lt_y']); rtPts = tform.transformPointsInverse([vehicleXPoints', rt_y']); laneFound = true; else laneFound = false; end end

车辆检测

此示例使用基于YOLO V2的车辆检测网络。YOLO V2对象检测网络由两个子网组成:特征提取网络,后跟检测网络。这个佩带的网络使用了一个resnet-50.特征提取。与特征提取网络相比,检测子网络是一个较小的CNN,由几个卷积层和针对YOLO v2的层组成。

Simu万博1manbetxlink模型在内部执行车辆检测Matlab功能车辆检测YOLOv2.这个函数块定义了一个函数vehicle_detection_yolo_v2加载预先训练的YOLO v2检测器。该网络以一幅图像为输入,输出边界框坐标以及图像中车辆的置信度得分。

typevehicle_detection_yolo_v2
function [bboxes,scores] = vehicle_detection_yolo_v2(In) % Copyright 2020 The MathWorks, Inc. persistent yolodetector;if isempty(yolodetector) yolodetector = code . loaddeeplearningnetwork ('yolov2ResNet50VehicleExample.mat');end [bboxes,scores,~] = yolodetector.detect(In, 'threshold', .2);结束

交通视频中车辆包围盒和车道轨迹标注

行车线及车辆注释MATLAB功能块定义函数Lane_vehicle_Annotation.它标注了车辆的边界框和置信度得分。如果laneFound是真的,那么左边和右车道边界存储在ltPtsRTPTS.都覆盖在交通视频上。

typeLane_vehicle_Annotation.
函数in = lane_vehicle_annotation(lanefound,ltpts,rtpts,bboxes,sicrors,in)%2020 the mathworks,Inc。如果〜insempty(bboxes)in = InsertObjectAnnotation(in,'矩形',bboxes,sicrors);结束PTS =编码器.NULLCOPY(零(28,4,'单'));如果lanefound prevpt = [LTPTS(1,1)LTPTS(1,2)];对于k = 2:1:28 pts(k,1:4)= [Prept LTPTS(K,1)LTPTS(K,2)];prevpt = [ltpts(k,1)ltpts(k,2)];结束= instrshape(in,'行',pts,'linewidth',2);prevpt = [RTPTS(1,1)RTPTS(1,2)];对于k = 2:1:28 pts(k,1:4)= [prevpttttpts(k,1)rtpts(k,2)];prevpt = [[,1)Rtpts(k,2)];结束= instrshape(in,'行',pts,'linewidth',2); In = insertMarker(In, ltPts); In = insertMarker(In, rtPts); end end

运行仿真

为了验证车道和车辆检测算法并显示车道轨迹,车辆边界框和用于在Simulink模型中加载的交通视频的分数,运行模拟。万博1manbetx

set_param(“laneAndVehicleDetectionMDL”“SimulationMode”“正常”);sim卡(“laneAndVehicleDetectionMDL”);
警告:检测到溢出饱和。在MATLAB函数'laneAndVehicleDetectionMDL/Lane and VehicleAnnotation ': function In = LaneVehicleAnnotation(laneFound, ltPts, rtPts, bboxes, scores, In)建议的操作:——< a href = " mat万博1manbetxlab仿真软件。SuppressedDiagnostic({'laneAndVehicleDetectionMDL/Lane and Vehicle Annotation'},'Stateflow:Runtime:DataSaturateError');" >抑制< / >

代码生成

使用GPU Coder™,您可以加速模型在NVIDIA®GPU上的执行,并为模型生成CUDA®代码。看到执行车道和车辆检测的深度学习Simulink模型的代码生成万博1manbetx(GPU编码器)有关更多详细信息。

清理

关闭Simulink万博1manbetx模型。

close_system('LaneanDvehicledetectionMDL / LANE和车辆检测输出');close_system(“laneAndVehicleDetectionMDL”);