車線検出と車両検出を実行する深層学習S金宝appimulinkモデルのコ,ド生成
この例では,車線検出と車両検出を実行する仿金宝app真软件®モデルから,畳み込みニューラルネットワーク(CNN)を使用してCUDA®アプリケーションを開発する方法を説明します。この例では,交通量ビデオのフレームを入力として受け取り,自車の左右の車線に対応する2つの車線境界線を出力し,フレーム内の車両を検出します。この例では,GPU Coder工具箱™の“GPU编码器により最適化された車線検出“の例の事前学習済み車線検出ネットワークを使用します。詳細は,GPU编码器により最適化された車線検出を参照してください。この例では,计算机视觉工具箱™ の“YOLO v2意思深層学習を使用したオブジェクト検出“の例の事前学習済み車線検出ネットワークも使用します。詳細にいては,YOLO v2深層学習を使用したオブジェクトの検出(计算机视觉工具箱)を参照してください。
この例では以下の概念を説明します。
金宝appSimulinkで車線検出アプリケ,ションをモデル化。最初に,交通量ビデオが,227 x 227 x 3にサイズ変更され,定数係数の255が乗算されることによって前処理されます。次に,深度学习工具箱™の
预测
ブロックに読み込まれた事前学習済みのネットワ,クによって処理されます。最後に,左右の車線境界線が検出されると,車線境界線の軌跡をモデル化するための放物線係数が取得されます。金宝appSimulinkで車両検出アプリケ,ションをモデル化。交通量ビデオは,事前学習済みのYOLO v2検出器で処理されます。このネットワ,クは,ビデオ内の車両を検出し,その車両の境界ボックスの座標と信頼スコアを出力します。
コ,ド生成用にモデルを構成。
金宝appSimulinkモデルのCUDA実行可能ファルの生成。
サ,ドパ,ティの必要条件
Cuda対応nvidia gpu。
NVIDIA CUDA Toolkitおよびドラaapl .バ。
NVIDIA cuDNNラaaplブラリ。
コンパ▪▪ラおよびラ▪▪ブラリの環境変数。詳細は,サ,ドパ,ティハ,ドウェアと前提条件となる製品の設定を参照してください。
Gpu環境の検証
この例を実行するのに必要なコンパイラおよびライブラリが正しく設定されていることを検証するために,関数coder.checkGpuInstall
を使用します。
envCfg = code . gpuenvconfig (“主机”);envCfg。DeepLibTarget =“cudnn”;envCfg。DeepCodegen = 1;envCfg。安静= 1;coder.checkGpuInstall (envCfg);
アルゴリズムワクフロ
このS金宝appimulinkモデルのアルゴリズムワ,クフロ,のブロック線図を以下に示します。
事前学習済みの車線検出ネットワ,クおよび車両検出ネットワ,クの取得
この例では,trainedLaneNet
と,事前学習済みのネットワ,クを含むyolov2ResNet50VehicleExample
のmatファescルを使用します。ファaapl . exeファaapl . exeズはそれぞれ,約143 MBと約98 MBです。MathWorksの Web サイトからファイルをダウンロードします。
lanenetFile = matlab.internal.examples.download金宝appSupportFile(“gpucoder / cnn_models / lane_detection”,“trainedLaneNet.mat”);vehiclenetFile = matlab.internal.examples.download金宝appSupportFile(“视觉/数据”,“yolov2ResNet50VehicleExample.mat”);
テスト用の交通量ビデオのダウンロ,ド
モデルをテストするために,この例では加州理工学院车道数据集を使用しています。ファaapl . exeファaapl . exeズは約16 MBです。MathWorksの Web サイトからファイルをダウンロードします。
mediaFile = matlab.internal.examples.download金宝appSupportFile(“gpucoder /媒体”,“caltech_washington1.avi”);
車線検出と車両検出のS金宝appimulinkモデル
交通量ビデオで車線検出と車両検出を実行するためのS金宝appimulinkモデルを示します。このモデルを実行すると,视频查看器
ブロックが,車線と車両に注釈を付けた状態で交通量ビデオを表示します。
open_system (“laneAndVehicleDetection”);
金宝app仿真软件モデルの予測と検出器のブロックで,ダウンロードしたネットワークモデルのファイルパスを設定します。金宝appSimulinkモデルによって読み込まれるテストビデオの場所を設定します。
set_param (“laneAndVehicleDetection /车道检测”,“NetworkFilePath”lanenetFile) set_param (“laneAndVehicleDetection /车辆检测器”,“DetectorFilePath”vehiclenetFile) set_param (“laneAndVehicleDetection /交通视频”,“inputFileName”mediaFile)
車線検出
预测
ブロックは,trainedLaneNet.mat
ファ▪▪ルから事前学習済みの車線検出ネットワ▪▪クを読み込みます。このネットワークは入力としてイメージを取り,自車の左右の車線に対応する2つの車線境界線を出力します。各車線境界線は,次の放物線方程式によって表されます。
ここでyは横方向オフセットxは車両からの縦方向の距離です。このネットワ,クは,車線ごとに3のパラメ,タ,a, b, cを出力します。ネットワ,クア,キテクチャはAlexNet
に似ていますが,最後の数層は,規模の小さい全結合層と回帰出力層に置き換えられています。MATLAB函数ブロックLaneDetectionCoordinates
は,関数lane_detection_coordinates
を定義します。この関数は,予測ブロックからの出力を受け取り,laneFound
、ltPts
、rtPts
という3のパラメタを出力します。しきい値処理は,左右の車線境界線が両方とも検出できるかどうかを判断するために使用されます。両方とも検出できれば,laneFound
は真に設定され,境界線の軌跡が計算されて,ltPts
とrtPts
にそれぞれ格納されます。
类型lane_detection_coordinates
function [laneFound,ltPts,rtPts] = lane_detection_coordinates(laneNetOut) %版权所有if isempty(laneCoeffMeans) laneCoeffMeans = [-0.0002,0.0002,1.4740,-0.0002,0.0045,-1.3787];结束持久化laneCoeffStds;if isempty(laneCoeffStds) laneCoeffStds = [0.0030,0.0766,0.6313,0.0026,0.0736,0.9846];end params = laneNetOut .* laneCoeffStds + laneCoeffMeans;isRightLaneFound = abs(params(6)) > 0.5;isLeftLaneFound = abs(params(3)) > 0.5;持久vehicleXPoints;if isempty(vehicleXPoints) = 3:30;%meters, ahead of sensor end ltPts = code .nullcopy(zero (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意思オブジェクトの検出ネットワークは,特徴抽出ネットワークと,その後に続く検出ネットワークという,2つのサブネットワークで構成されます。事前学習済みのネットワ,クは,特徴抽出にResNet-50
を使用します。検出サブネットワークは特徴抽出ネットワークと比べて小さいCNNであり,少数の畳み込み層とYOLO v2意思に固有の層で構成されます。金宝appSimulinkモデルは,计算机视觉工具箱™の对象探测器
ブロックを使用して車両検出を実行します。このブロックは,イメージを入力として受け取り,境界ボックス座標をイメージ内の車両の信頼度スコアと共に出力します。
車両境界ボックスの注釈と交通量ビデオの車線軌跡
LaneVehicleAnnotation
MATLAB函数ブロックは,関数lane_vehicle_annotation
を定義します。この関数は,車両境界ボックスに対して信頼度スコアとともに注釈を付けます。また,laneFound
が真实の場合は,ltPts
とrtPts
に格納された左右の車線境界線に交通量ビデオ内で注釈が付けられます。
类型lane_vehicle_annotation
function In = lane_vehicle_annotation(laneFound,ltPts,rtPts,bboxes,scores,In) % Copyright 2020-2021 The MathWorks, Inc. if ~isempty(bboxes) In = insertObjectAnnotation(In, 'rectangle',bboxes,scores);结束PTS =编码器。Nullcopy (0 (28,4, 'single'));if laneFound prevpt = [ltPts(1,1) ltPts(1,2)];for k = 2:1:28 pts(k,1:4) = [prevpt ltPts(k,1) ltPts(k,2)];prevpt = [ltPts(k,1) ltPts(k,2)];end In = insertShape(In, 'Line', pts, 'LineWidth', 2);prevpt = [rtPts(1,1) rtPts(1,2)];for k = 2:1:28 pts(k,1:4) = [prevpt rtPts(k,1) rtPts(k,2)];prevpt = [rtPts(k,1) rtPts(k,2)]; end In = insertShape(In, 'Line', pts, 'LineWidth', 2); In = insertMarker(In, ltPts); In = insertMarker(In, rtPts); end end
シミュレ,ションの実行
[コンフィギュレションパラメタ]ダアログボックスを開きます。
[シミュレ,ションタ,ゲット]ペereplicationンで[gpuによる高速化]を選択します。[深層学習]グルプで,タゲットラブラリとして(cuDNN)を選択します。
set_param (bdroot“GPUAcceleration”,“上”);set_param (bdroot“SimDLTargetLibrary”,“cudnn”);set_param (bdroot“DLTargetLibrary”,“cudnn”);
車線検出アルゴリズムおよび車両検出アルゴリズムを検証し,金宝app仿真软件モデルに読み込まれた交通量ビデオに関する車線軌跡,車両境界ボックス,スコアを表示するため,シミュレーションを実行します。
set_param (“laneAndVehicleDetection”,“SimulationMode”,“正常”);sim卡(“laneAndVehicleDetection”);
金宝appSimulinkモデルの生成とビルド
[コ,ド生成]ペereplicationンで[言語]として(c++)を選択し,[gpuコ.ドの生成]を有効にします。
set_param (bdroot“TargetLang”,“c++”);set_param (bdroot“GenerateGPUCode”,CUDA的);
[コ,ド生成],[gpu,コ,ド]ペ@ @ンのサブカテゴリ[ラ电子邮箱ブラリ]で,(cuBLAS)、(cuSOLVER),および(cuFFT)を有効にします。
set_param (bdroot“GPUcuBLAS”,“上”);set_param (bdroot“GPUcuSOLVER”,“上”);set_param (bdroot“GPUcuFFT”,“上”);
slbuild
コマンドを使用して,ホストGPUでSim金宝appulinkモデルを生成してビルドします。コドジェネレタは実行可能ファルを“ビルドフォルダ”(現在の作業フォルダ,の中のlaneAndVehicleDetection_ert_rtw
という名前のサブフォルダ)に配置します。
状态= evalc(“slbuild (laneAndVehicleDetection)”);
生成されたcudaコ,ド
laneAndVehicleDetection_ert_rtw
という名前のサブフォルダーには,金宝app仿真软件モデルの各種ブロックに対応して生成されたc++コードと,これらのブロックで実行される特定の演算が含まれています。たとえばtrainedLaneNet0_laneAndVehicleDetection0.h
ファイルには,事前学習済みの車線検出ネットワークを表す,属性とメンバー関数を含むc++クラスが含まれています。
同様に,yolov2ResNet50VehicleExample0_laneAndVehicleDetection0.h
ファイルには,事前学習済みのYOLO v2意思検出ネットワークを表すc++クラスが含まれています。
参考
関数
open_system
(金宝app模型)|load_system
(金宝app模型)|save_system
(金宝app模型)|close_system
(金宝app模型)|bdclose
(金宝app模型)|get_param
(金宝app模型)|set_param
(金宝app模型)|sim卡
(金宝app模型)|slbuild
(金宝app模型)