主要内容

simulinkでで万博1manbetxででで车线と车両出出出

この例では、Simulink® モデル内で深層畳み込みニューラル ネットワークを使用して、車線検出と車両検出を実行する方法を示します。この例では、交通量ビデオのフレームを入力として受け取り、自車の左右の車線に対応する 2 つの車線境界線を出力し、フレーム内の車両を検出します。

GPU编码器工具箱™“ GPU编码器”により例例でによりによりによりによりによりによりにより化れたの例の事前学習済み車線検出ネットワークを使用します。詳細は、GPU Coder により最適化された車線検出(GPU编码器)を参照してください。

この例例,,计算机视觉工具箱™の“ yolo v2深层を使用た”ののの学习済み済み検出ネットワークも使用します。详细详细详细についてYOLO v2 深層学習を使用したオブジェクトの検出(计算机矢量绘图软件n Toolbox)を参照してください。

アルゴリズム ワークフロー

このs万博1manbetximulinkモデルモデルアルゴリズムワークのブロック线図をに示し。。。

事前学習済みの車線検出ネットワークおよび車両検出ネットワークの取得

この例では、trainedLaneNetと、事前学習済みのネットワークを含むyolov2Resnet50 vehiclesampameの MAT ファイルを使用します。ファイルのサイズはそれぞれ、約 143 MB と約 98 MB です。MathWorks の Web サイトからファイルをダウンロードします。

lanenetFile = matlab.internal.examples.downloadSupportFile('gpucoder/cnn_models/lane_detection','trainedLaneNet.mat');vehiclenetFile = matlab.internal.examples.downloadSupportFile('vision/data','yolov2Resnet50 vehicleexample.mat');

テスト用交通量ビデオダウンロードダウンロード

モデルをテストするために、この例では Caltech Lanes Dataset を使用しています。ファイルのサイズは約 16 MB です。MathWorks の Web サイトからファイルをダウンロードします。

mediaFile = matlab.internal.examples.downloadSupportFile(“ GPUCODER/MEDIA”,'caltech_washington1.avi');

simulinkモデル万博1manbetxモデルモデルモデルモデルモデルモデル

simulinkモデルためためためののののモデルモ万博1manbetxデルモデルモデルモデルモデル示します。このこのVideo Viewerブロックがとに注釈をた状态交通ビデオを表示表示ます。

open_system('laneAndVehicleDetectionMDL');

Simulink モデルの予測と検出器のブロックで、ダウンロードしたネットワーク モデルのファイル パスを設定します。Simulink モデルによって読み込まれるテスト ビデオの場所を設定します。

set_param('laneAndVehicleDetectionMDL/Lane Detection',“ NetworkFilePath”,lanenetFile) set_param('laneAndVehicleDetectionMDL/Vehicle Detector','DetectorFilePath',vehiclenetFile) set_param('laneAndVehicleDetectionMDL/Traffic Video','inputFileName',mediaFile)

車線検出

227 x 227 x 227 x3 xの​​の,はビデオ量交通量ビデオはは,,ビデオのののの各各各各各フレームをををサイズをををサイズをサイズサイズサイズサイズサイズサイズサイズサイズサイズサイズサイズサイズサイズサイズサイズサイズサイズサイズサイズサイズサイズサイズサイズサイズサイズサイズサイズサイズサイズサイズサイズサイズサイズサイズサイズののののにににに255で255で255ででででででででででででででででででででででででででででで,Predictブロックに読み込まれた训练Lanenet.matに入力ますこのネットワークは入力としてイメージを取り,の左右左右左右のの车线车线车线车线车线にににに対応対応対応対応つつつつの车线车线车线境界境界线をを出力出力ししししますます各。各各车线境界线

$y = ax^2+bx+c$

y y,,,,,,,,车両からのの方向の距离ですです。。このこのこのこのネットワークネットワークネットワークネットワークネットワークネットワークはははははは,,,车线车线车线ごとにににににににににににににににパラメーターAlexNetに似ていますが、最後の数層は、規模の小さい全結合層と回帰出力層に置き換えられています。Lane Detection CoordinatesMATLAB函数ブロックブロック,关数lane_detection_coordinatesを定義します。この関数は、予測ブロックからの出力を受け取り、laneFoundltPtsrtPts3つつをします。しきいは,,境界境界线线がが両方両方ともも検出できるかかどうかを判断するためためlaneFoundは true に設定され、境界線の軌跡が計算されて、ltPtsrtPtsにそれぞれ格納されます。

typelane_detection_coordinates
function [laneFound,ltPts,rtPts] = lane_detection_coordinates(laneNetOut) % Copyright 2020-2021 The MathWorks, Inc. persistent laneCoeffMeans; if isempty(laneCoeffMeans) laneCoeffMeans = [-0.0002,0.0002,1.4740,-0.0002,0.0045,-1.3787]; end persistent laneCoeffStds; if isempty(laneCoeffStds) laneCoeffStds = [0.0030,0.0766,0.6313,0.0026,0.0736,0.9846]; end params = laneNetOut .* laneCoeffStds + laneCoeffMeans; % 'c' should be more than 0.5 for it to be a right lane isRightLaneFound = abs(params(6)) > 0.5; isLeftLaneFound = abs(params(3)) > 0.5; persistent vehicleXPoints; if isempty(vehicleXPoints) vehicleXPoints = 3:30; %meters, ahead of the sensor end ltPts = coder.nullcopy(zeros(28,2,'single')); 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にに,,车両のににベースベースベース使用。。。。。。。。。。。。。。。。。。。。。。。オブジェクトオブジェクトオブジェクトオブジェクトオブジェクトオブジェクトオブジェクトオブジェクトオブジェクトの検出検出ネットワークネットワークはは,特徴特徴抽出抽出ネットワークネットワークとと済みのは,特徴ににResnet-50を使用します。検出サブネットワークは特徴抽出ネットワークと比べて小さい CNN であり、少数の畳み込み層と YOLO v2 に固有の層で構成されます。

Simulink モデルは、Computer Vision Toolbox の对象探测器ブロックを使用して車両検出を実行します。このブロックは、イメージを入力として受け取り、境界ボックス座標をイメージ内の車両の信頼度スコアと共に出力します。

車両境界ボックスの注釈と交通量ビデオの車線軌跡

Lane and Vehicle AnnotationMATLAB函数ブロックブロック,关数Lane_Vehicle_annotationを定義します。この関数は、車両境界ボックスに対して信頼度スコアとともに注釈を付けます。laneFoundがtrueのの,,ltPtsrtPtsに格納された左右の車線境界線は交通量ビデオにオーバーレイされます。

typeLane_Vehicle_annotation
功能in = lane_vehicle_annotation(lanefound,ltpts,rtpts,rtpts,bboxes,cores,in)%版权2020-2021 The Mathworks,Inc。如果〜Isempty(bboxes)In = insertobjectnaintation in = insertObjectnantAnnotation(in,'rectangele',bboxes,boxes,scores);end pts = coder.nullcopy(zeros(28,4,'single'));如果车道prevpt = [ltpts(1,1)ltpts(1,2)];对于k = 2:1:28 pts(k,1:4)= [prevpt ltpts(k,1)ltpts(k,2)];prevpt = [ltpts(k,1)ltpts(k,2)];end in in in = insertshape(in,'line',pts,'lineWidth',2);prevpt = [rtpts(1,1)rtpts(1,2)];对于k = 2:1:28 pts(k,1:4)= [prevpt rtpts(k,1)rtpts(k,2)];prevpt = [rtpts(k,1)rtpts(k,2)];end in in in = insertshape(in,'line',pts,'lineWidth',2); In = insertMarker(In, ltPts); In = insertMarker(In, rtPts); end end

シミュレーションの実行

simulink simulinkモデルモデル検出検出検万博1manbetx出検出モデルモデルにた交通交通量量ビデオビデオビデオに关する关する车线轨迹轨迹,车车両境界ボックス,,スコアスコアスコア

set_param('laneAndVehicleDetectionMDL',“SimulationMode”,'Normal');sim('laneAndVehicleDetectionMDL');

windows®では,の最大がががががが文字文字,シミュレーションを実行にににに“文件未找到”エラーが発生する可能性があります。そのような場合は、例のフォルダーを別の場所に移動するか、Windows で長いパスを有効にしてください。詳細については、Maximum Path Length Limitation (Microsoft)を参照してください。

深層学習アクセラレータ ライブラリの使用

AVX2 命令をサポートする Intel® CPU がある場合は、“深度学习库的MATLAB编码器界面”Intel mkl-dnnののライブラリ使用使用して,,シミュレーションシミュレーションを高速高速化化できできます。。C++に[ターゲットライブラリ]をMKL-DNNに設定します。

コード生成

GPU Coder を使用すれば、NVIDIA® GPU でのモデルの実行を高速化し、モデルについての CUDA® コードを生成できます。詳細については、車線検出と車両検出を実行する深層学習 Simulink モデルのコード生成(GPU编码器)を参照してください。