Main Content

このページ最新ではありませ。をクリックし,英语のの最新版版を参照参照し。

simulinkモデル学习学习学习学习金宝appモデルモデルモデルモデルモデルモデルコード生成生成

この例では、車線検出と車両検出を実行する Simulink® モデルから、畳み込みニューラル ネットワーク (CNN) を使用して CUDA® アプリケーションを開発する方法を説明します。この例では、交通量ビデオのフレームを入力として受け取り、自車の左右の車線に対応する 2 つの車線境界線を出力し、フレーム内の車両を検出します。この例では、GPU Coder Toolbox™ の“ gpu编码器により化さ车线”ののの学习済み済み検出ネットワークを使用しし。详细はは,GPU编码器によりによりされた検出検出を参照しください。この例ははは,,计算机视觉工具箱™の"YOLO v2 深層学習を使用したオブジェクト検出" の例の事前学習済み車線検出ネットワークも使用します。詳細については、Yolo V2深层学习使用たオブジェクト検出検出(计算机视觉工具箱)を参照しください。

この例では以下の概念を説明します。

  • Simulink で車線検出アプリケーションをモデル化。最初に、交通量ビデオが、227 x 227 x 3 にサイズ変更され、定数係数の 255 が乗算されることによって前処理されます。次に、Deep Learning Toolbox™ の预测ブロックに読み込まれた事前学習済みのネットワークによって処理されます。最後に、左右の車線境界線が検出されると、車線境界線の軌跡をモデル化するための放物線係数が取得されます。

  • Simulink で車両検出アプリケーションをモデル化。交通量ビデオは、事前学習済みの YOLO v2 検出器で処理されます。このネットワークは、ビデオ内の車両を検出し、その車両の境界ボックスの座標と信頼スコアを出力します。

  • コード生成用にモデルを構成。

  • 金宝appsimulinkモデルのの実行実行ファイルの。。

サードパーティの必要条件

GPU 環境の検証

この例するに必要なおよびが正しく设定れれていることをを検证検证,,,coder.checkGpuInstallを使用します。

envCfg = coder.gpuEnvConfig('host');envcfg.deeplibtarget ='cudnn';envCfg.DeepCodegen = 1; envCfg.Quiet = 1; coder.checkGpuInstall(envCfg);

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

この Simulink モデルのアルゴリズム ワークフローのブロック線図を以下に示します。

サンプルビデオのダウンロード

if〜存在('./caltech_washington1.avi',,,,'文件') url =“//www.tatmou.com/金宝appsupportfiles/gpucoder/media/caltech_washington1.avi';WebSave('caltech_washington1.avi',,,,url);结尾

车线検出と車両検出の Simulink モデル

交通量ビデオで車線検出と車両検出を実行するための Simulink モデルを示します。このモデルを実行すると、视频查看器ブロックが、車線と車両に注釈を付けた状態で交通量ビデオを表示します。

Open_System(“ laneandvehicledetection”);

车线検出

预测ブロックは,trainedLaneNet.matファイルから事前学習済みの車線検出ネットワークを読み込みます。このネットワークは入力としてイメージを取り、自車の左右の車線に対応する 2 つの車線境界線を出力します。各車線境界線は、次の放物線方程式によって表されます。

$ y = ax^2+bx+c $

ここで、y は横方向オフセット、x は車両からの縦方向の距離です。このネットワークは、車線ごとに 3 つのパラメーター a、b、c を出力します。ネットワーク アーキテクチャはAlexnetに似ていますが、最後の数層は、規模の小さい全結合層と回帰出力層に置き換えられています。MATLAB Function ブロックlanedetection坐标は、関数lane_detection_coordinatesを定义。このは,予测から出力出力受け取り受け取り,车道LTPTSrtPtsという 3 つのパラメーターを出力します。しきい値処理は、左右の車線境界線が両方とも検出できるかどうかを判断するために使用されます。両方とも検出できれば、车道は true に設定され、境界線の軌跡が計算されて、LTPTSrtPtsにそれぞれされます。

类型lane_detection_coordinates
函数[LANEFOUND,LTPTS,RTPTS] = LANE_DETECTION_COORDINATES(LANENETOUT)%版权2020 The Mathworks,Inc。持续lanecoeffmeans;如果ISEMPTY(LANECOEFFMEANS)LANECOEFFMEANS = [-0.0002 0.0002 1.4740 -0.0002 0.0045 -1.3787];结束持续的lanecoeffstds;如果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;%c应大于0.5,它是右车道iSleftlanefound = abs(params(3))> 0.5;持续的VehiclexPoints;如果Isempty(VehiclexPoints)车辆= 3:30;%米,在传感器端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を使用ます検出サブネットワークは特徴特徴抽出比べ比べててててててててでありでありでありでありでありでありであり,少数少数ののの层ととととととYolo v2にととににににににVERICLEDETECTIONYOLOV2は,学习ののYolo V2オブジェクトオブジェクトを关数关数关数车辆_detection_yolo_v2を定义。ネットワークは,イメージとしてとして,ボックスボックス座标をを后続后続ののの注釈注釈关する关するイメージ内内内ののの车両车両车両の

类型车辆_detection_yolo_v2
函数[bboxes,cores] = warter_detection_yolo_v2(in)%版权2020 The Mathworks,Inc。持续Yolodetector;如果Isempty(Yolodetector)Yolodetector = Coder.LoadDeepLearningNetwork('Yolov2Resnet50 vehicle example.mat');end [bboxes,分数,〜] = yolodetector.detect(in,'threshold',.2);结尾

车両ボックス注釈と量ビデオの轨迹轨迹

LaneVehicleAnnotationMATLABFunction ブロックは、関数lane_vehicle_annotationを定义。关数は车境界ボックスに対して度スコアとともに注釈注釈を付け付けます。车道true trueののは,,LTPTSrtPtsに格纳たの车线线に量ビデオで注釈が付けられます。

类型lane_vehicle_annotation
function In = lane_vehicle_annotation(laneFound, ltPts, rtPts, bboxes, scores, In) % Copyright 2020 The MathWorks, Inc. if ~isempty(bboxes) In = insertObjectAnnotation(In, 'rectangle', bboxes, scores); end pts = coder.nullcopy(zeros(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

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

关数は、trainedLaneNet.matファイルおよびyolov2ResNet50VehicleExample.matファイルがし场合,をダウンロードし。。

getVehicleDetectionAndLanedEtectionNetworks()
下载预告片的车道检测网络(143 MB)...下载审慎的车辆检测网络(98 MB)...

シミュレーションの実行

[コンフィギュレーション]ダイアログダイアログを开き。

[シミュレーション]ペインで[GPU による高速化]を选択し。[深层]グループでターゲットライブラリとして[cudnn]を选択し。

set_param(bdroot,“ gpuaCceleration',,,,'上');set_param(bdroot,'SimDLTargetLibrary',,,,'cudnn');set_param(bdroot,'dltargetLibrary',,,,'cudnn');

车线検出アルゴリズムおよび車両検出アルゴリズムを検証し、Simulink モデルに読み込まれた交通量ビデオに関する車線軌跡、車両境界ボックス、スコアを表示するため、シミュレーションを実行します。

set_param(“ laneandvehicledetection”,,,,'simulationmode',,,,'普通的');SIM(“ laneandvehicledetection”);

金宝appsimulinkモデルの生成ビルドビルド

[コード]ペインで言语として[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 で Simulink モデルを生成してビルドします。コード ジェネレーターは実行可能ファイルを "ビルド フォルダー"(现在のフォルダーの中のlaneAndVehicleDetection_ert_rtwという名前のサブフォルダー) に配置します。

status = evalc("slbuild('laneAndVehicleDetection')");

生成されたた

laneAndVehicleDetection_ert_rtwという名前のサブフォルダーには、Simulink モデルの各種ブロックに対応して生成された C++ コードと、これらのブロックで実行される特定の演算が含まれています。たとえばtrainedLaneNet0_laneAndVehicleDetection0.hファイルには、事前学習済みの車線検出ネットワークを表す、属性とメンバー関数を含む C++ クラスが含まれています。

同様に,yolov2Resnet50VehicleExample0_laneanDvehicleDetection0.hファイルには、事前学習済みの YOLO v2 検出ネットワークを表す C++ クラスが含まれています。

クリーンアップ

金宝appsimulinkモデルを闭じ。。

close_system(“ LaneanDvehicleDetection/Lane和车辆检测输出”);close_system(“ laneandvehicledetection”);

参考

关数

関連するトピック