Simulink での車線検出用 GPU コードの生成
この例では、イメージの車線マーカー境界を検出して出力する Simulink® モデルの CUDA® コードを生成する方法を説明します。この例では、RGB イメージを入力として受け取り、Image Processing Toolbox™ に用意されている関数imresize
、rgb2gray
、ordfilt2
(Image Processing Toolbox)、hough
(Image Processing Toolbox)、houghpeaks
(Image Processing Toolbox)、およびhoughlines
(Image Processing Toolbox)を使用して、車線区分線を検出します。この例は関数 houghlines を使用した GPU での車線検出とほぼ同じです。
この例では、次の概念を説明します。
イメージ処理関数を使用した、Simulink での車線検出アプリケーションのモデル化。
GPU コード生成用のモデルの構成。
Simulink モデルの CUDA 実行可能ファイルの生成。
サードパーティの必要条件
必須
この例では、CUDA MEX を生成します。以下のサードパーティ要件が適用されます。
CUDA 対応 NVIDIA® GPU および互換性のあるドライバー。
オプション
スタティック ライブラリ、ダイナミック ライブラリ、または実行可能ファイルなどの MEX 以外のビルドについて、この例では以下の要件も適用されます。
NVIDIA Toolkit。
コンパイラおよびライブラリの環境変数。詳細については、サードパーティ ハードウェアと前提条件となる製品の設定を参照してください。
GPU 環境の検証
この例を実行するのに必要なコンパイラおよびライブラリが正しく設定されていることを検証するために、関数coder.checkGpuInstall
を使用します。
envCfg = coder.gpuEnvConfig('host');
envCfg.BasicCodegen = 1;
envCfg.Quiet = 1;
coder.checkGpuInstall(envCfg);
houghlines
Simulink モデルを使用した車線検出
車線検出用 Simulink モデルを以下に示します。
open_system('lane_detection');
Lane Detection
サブシステムには、強度イメージを入力として受け取り、検出された車線を出力として生成する MATLAB Function
ブロックが含まれています。この関数は、関数 houghlines を使用した GPU での車線検出の例で説明する houghlines
を使用した車線検出アルゴリズム実装に基づいています。このモデルを実行すると、Visualization
ブロックにより車線検出の出力イメージが表示されます。
シミュレーションの実行
[コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。
[シミュレーション ターゲット] ペインで [GPU による高速化] を選択します。
ノーマル モードでシミュレーションを実行します。
set_param('lane_detection', 'SimulationMode', 'Normal'); sim('lane_detection');
Simulink モデルの生成とビルド
[コード生成] ペインで [言語] として [C++] を選択し、[GPU コードの生成] を有効にします。
[シミュレーション ターゲット] ペインを開きます。[詳細設定パラメーター] で [MATLAB 関数での動的メモリ割り当てしきい値] を有効にします。詳細については、Dynamic memory allocation in MATLAB functions (Simulink)を参照してください。
[コード生成]、[GPU コード] ペインを開きます。サブカテゴリ [ライブラリ] で、[cuBLAS]、[cuSOLVER]、および [cuFFT] を有効にします。
slbuild
コマンドを使用して、ホスト GPU で Simulink モデルを生成してビルドします。コード ジェネレーターは実行可能ファイルを "ビルド フォルダー" (現在の作業フォルダーの中の lane_detection_ert_rtw
という名前のサブフォルダー) に配置します。
status = evalc("slbuild('lane_detection')");
クリーンアップ
Simulink モデルを閉じます。
close_system('lane_detection');
参考
関数
open_system
(Simulink) |load_system
(Simulink) |save_system
(Simulink) |close_system
(Simulink) |bdclose
(Simulink) |get_param
(Simulink) |set_param
(Simulink) |sim
(Simulink) |slbuild
(Simulink)