チートシート

MATLAB と Simulink を使用した組み込み AI

コンセプトから量産まで、あらゆる組み込みハードウェアに AI を展開しましょう。

MATLAB と Simulink を使用した組み込み AI の特長


システムレベルのシミュレーションと自動コード生成を用いて、リソースに制約のあるハードウェア (MCU、GPU、FPGA、NPU) に学習済みの AI モデルを展開できます。

  • システムレベル シミュレーション: 実機を使用する前に、コントローラー、センサー、プラントモデルとともに AI の動作をテストできます。
  • コード生成: 手作業による移植なしで、AI コンポーネントを含む Simulink モデルから最適化された C/C++、CUDA、または HDL を直接生成できます。
  • インポートの柔軟性: PyTorch、ONNX、または TensorFlow のモデルを導入し、同一のパイプライン経由で展開できます。
  • 全段階での検証: 形式的手法、敵対的ロバスト性テスト、およびソフトウェアインザループ (SIL)、プロセッサインザループ (PIL)、ハードウェアインザループ (HIL) テストを用いて、あらゆる段階で AI コンポーネントを検証できます。
  • 規格への準拠: DO-178C、ISO 26262、IEC 61508 認証に対応するトレーサビリティを備えた MISRA C 準拠コードを生成できます。

エンドツーエンドの組み込み AI ワークフロー


データの
準備
AI モデルの
学習/インポート
モデルの
圧縮
AI モデルの
検証
Simulink に
統合
展開と
検証

AI モデルの学習/インポート


プログラムを使用して MATLAB で学習

% Train a deep learning network
net = trainnet(data, layers, "crossentropy", options);

% Train a machine learning model
mdl = fitcsvm(features, labels);

外部フレームワークからのインポート

% Import from PyTorch (exported program format)
net = importNetworkFromPyTorch("exported_pytorch_model.pt2")

net =
  dlnetwork with properties:

         Layers: [9×1 nnet.cnn.layer.Layer]
    Connections: [11×2 table]
     Learnables: [86×3 table]
          State: [42×3 table]
     InputNames: {'InputLayer1'}
    OutputNames: {'ResidualNetSmall:fc'}
    Initialized: 1
ソース 関数
PyTorch (.pt2/.pt) importNetworkFromPyTorch
ONNX importNetworkFromONNX
TensorFlow 2 importNetworkFromTensorFlow
Keras 3 importNetworkFromKeras
XGBoost (.json) importModelFromXGBoost

モデルの圧縮


%% Step 1:Prune (e.g., remove 60% of learnables)
netPruned = compressNetworkUsingTaylorPruning(net, dsTrain, "crossentropy", ...
    options, LearnablesReductionGoal=0.6);

%% Step 2:Project (e.g., retain 80% variance)
npca = neuronPCA(netPruned, dsTrain);
netProjected = compressNetworkUsingProjection(netPruned, npca, ...
    ExplainedVarianceGoal=0.8);
netProjected = trainnet(data, netProjected, "crossentropy", optionsFT);

%% Step 3:Quantize (INT8)
quantObj = dlquantizer(netProjected, ExecutionEnvironment="CPU");
calibrate(quantObj, dsCal);
netQuantized = quantize(quantObj);
手法 削減できるモデルサイズ 使用する場合
枝刈り 50 ~ 70% 冗長なフィルターをもつ、パラメーター過多の CNN
射影 20 ~ 85% 活性化値の相関が高い全結合層主体のネットワークや再帰型ネットワーク
量子化 75% (4×) 固定小数点プロセッサの最終ステップ

AI モデルの検証


AI Verification LibraryDeep Learning Toolbox Interface for alpha-beta-CROWN Verifier を使用して、展開に安全性プロパティの証明やロバスト性の評価を行えます。サンプリングされた入力に対するテストとは異なり、形式的検証は連続的な入力領域全体に対する数学的保証を提供します。

手法 説明 主な関数
ロバスト性検証 指定された入力範囲内で、ネットワークの分類が不変であることを証明します。 verifyNetworkRobustness
形式的出力範囲 指定された入力範囲に対するネットワーク出力の保証された上限および下限を計算します。 estimateNetworkOutputBounds
敵対的ロバスト性 有界な入力領域において、誤分類を引き起こす敵対的な例を見つけます。 findAdversarialExamples
分布外検出 実行時のサイレント障害を防ぐため、学習データとは異なる入力にフラグを立てます。 networkDistributionDiscriminator

最初の引数は、dlnetwork オブジェクト (MATLAB で学習されたもの、またはインポートされたもの) またはモデルファイルパス — ONNX ファイル (.onnx) または完全な PyTorch モデル (torch.save() を使用して保存) です。関数も構文も同じです。

% Prove classification is robust to sensor noise around input X0
XLower = X0 - epsilon;
XUpper = X0 + epsilon;
[result, cex] = verifyNetworkRobustness(net, XLower, XUpper, trueLabel);

% Compute guaranteed output bounds over the input region
[YLower, YUpper] = estimateNetworkOutputBounds(net, XLower, XUpper);

% Find adversarial examples within bounded region
[adversarials, success] = findAdversarialExamples(net, XLower, XUpper, trueLabel);

Simulink での統合


コード生成前に、AI モデルをシステム シミュレーションに組み込み、コントローラー、センサー、プラントモデルとともに動作を検証します。

ブロック コード ユースケース
同時実行
PyTorch、TensorFlow、ONNX、またはカスタム Python モデルを、変換を行わずに Simulink で直接シミュレーションします。全面的な統合の前に、サードパーティの AI が大規模なシステムでどのように機能するかを評価します。
Predict
Predict ブロック
dlnetwork を、単一の推論ブロック (分類または回帰) として実行します。
PyTorch Exported Program
Co-Execution ブロック
C/C++ および CUDA コード生成を使用して、PyTorch .pt2 モデルを Simulink で直接実行します。
層ブロック exportNetworkToSimulink 層ごとの固定小数点制御および検査向けに、ネットワークを個別の Simulink ブロックとしてエクスポートします。

展開と検証


MATLAB なしで稼働するスタンドアロンのソースコードを生成し、その後ターゲット ハードウェア上で段階的に検証します。

コード生成

製品 出力 主なターゲット ターゲットライブラリ
MATLAB Coder C/C++ ARM Cortex-A、x86、任意の POSIX/RTOS スタンドアロン*、Intel oneDNN
Embedded Coder 量産向け C/C++ NXP、Infineon、STMicro、Renesas MCU など スタンドアロン*、CMSIS、CMSIS-NN
GPU Coder CUDA C++ NVIDIA Jetson Thor、Orin、Xavier、TX2 スタンドアロン*、TensorRT
Embedded Coder + HSP NPU 向けに最適化された C/C++ Qualcomm Hexagon、Infineon PPU (AURIX TC4x) ベンダーの NPU ランタイム
HDL Coder VHDL/Verilog AMD (Xilinx) FPGA、Intel FPGA Deep Learning HDL Toolbox IP

*サードパーティ製ライブラリに依存しない、任意のプロセッサ向けのスタンドアロン ANSI/ISO C/C++ を生成するには、ターゲットのディープラーニング ライブラリを 'none' に設定します。

エントリポイント関数のパターン

% Use MATLAB dlnetwork
function out = myPredict(in) %#codegen
    persistent net
    if isempty(net)
        net = coder.loadDeepLearningNetwork('myNet.mat');
   end
    out = predict(net, in);
end
% Use PyTorch model
function out = myPredict(in) %#codegen
    persistent pytorchNet
    if isempty(pytorchNet)
        pytorchNet = loadPyTorchExportedProgram('myPyTorchNet.pt2');
    end
    out = invoke(pytorchNet, in);
end

構成して生成

% Generate C++ for any processor
cfg = coder.config('lib');
cfg.TargetLang = 'C++';
cfg.DeepLearningConfig = coder.DeepLearningConfig('none');
codegen -config cfg myPredict -args {ones(224,224,3,'single')}

% Generate CUDA for NVIDIA Jetson
gpuCfg = coder.gpuConfig('lib');
gpuCfg.DeepLearningConfig = coder.DeepLearningConfig('tensorrt');
codegen -config gpuCfg myPredict -args {ones(224,224,3,'single')}
ターゲットライブラリ ハードウェア
'none' 任意 (ライブラリ非依存)
'mkldnn' x86-64 (Intel oneDNN)
'cudnn' NVIDIA GPU
'tensorrt' NVIDIA GPU/Jetson

システムレベルの検証 (MIL/SIL/PIL/HIL)

段階的に検証: モデル (MIL) → ホスト上に生成されたコード (SIL) → ターゲットプロセッサ (PIL) → 実際の I/O をもつ完全なシステム (HIL)。

段階 実行するもの 場所 検証内容
MIL (モデルインザループ) Simulink モデル (インタープリター実行) ホスト PC アルゴリズムの正確性: ゴールデン リファレンスを確立
SIL (ソフトウェアインザループ) 生成された C/C++/CUDA コード ホスト PC (コンパイル済み) 動作の正確性: ホストプロセッサ上で実行される生成済みコードの数値的等価性
PIL (プロセッサインザループ) 生成された C/C++/CUDA コード ターゲット ハードウェア ターゲット固有の影響: コンパイラ、FPU、ターゲットプロセッサ上で実行される生成コードの数値的等価性
HIL (ハードウェアインザループ) 実際の I/O をもつ完全なシステム リアルタイム ターゲット リアルタイムの影響: 統合、タイミング、I/O 動作
% Processor-in-the-Loop verification
set_param("myModel/AI_Subsystem", "SimulationMode", "Processor-in-the-loop");
out = sim("myModel");
% Compare PIL output against MIL baseline to detect numerical drift

さらに詳しく