このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
MobileNet-v2 ネットワークのコード生成と Raspberry Pi への展開
この例では、MobileNet-v2 事前学習済みネットワークを使用してオブジェクト予測を行う C++ コードを生成する方法を説明します。コードを生成したら、それを Raspberry Pi に展開できます。この例では、DAG ネットワーク MobileNet-v2 を使用して、ARM® Compute Library を用いたイメージ分類を実行します。MATLAB 用の事前学習済み MobileNet-v2 ネットワークは、Deep Learning Toolbox Model for MobileNet-v2 Network サポート パッケージに含まれています。
ARM Compute Library とハードウェア サポート パッケージを使用するコードを生成する場合、関数 codegen
はホスト コンピューター上でコードを生成し、生成されたファイルをターゲット ハードウェアにコピーして、ターゲット ハードウェアで実行可能ファイルをビルドします。
サードパーティの必要条件
NEON 拡張をサポートする ARM プロセッサ
ARM Compute Library (ターゲット ARM ハードウェア上)
Open Source Computer Vision Library (OpenCV) v2.4 (ターゲット ARM ハードウェア上)
コンパイラおよびライブラリの環境変数
この例で使用されている ARM Compute Library のバージョンは、コード生成でサポートされている最新バージョンではない可能性があります。サポートされるライブラリのバージョン、および環境変数の設定の詳細については、深層学習に MATLAB Coder を使用するための前提条件 (MATLAB Coder)を参照してください。
この例は MATLAB Online ではサポートされていません。
関数 mobilenet_predict
のコード生成の構成
関数 mobilenet_predict
は、入力イメージに対して MobileNet-v2 ネットワーク オブジェクトの predict メソッドを呼び出し、予測スコアの出力を返します。関数は coder.updateBuildInfo
を呼び出して、生成された makefile のリンク オプションを指定します。
type mobilenet_predict
function out = mobilenet_predict(in) persistent net; opencv_linkflags = '`pkg-config --cflags --libs opencv`'; coder.updateBuildInfo('addLinkFlags',opencv_linkflags); coder.updateBuildInfo('addCompileFlags',opencv_linkflags); if isempty(net) net = coder.loadDeepLearningNetwork('mobilenetv2', 'mobilenet'); end out = net.predict(in); end
C++ コード生成構成オブジェクトを作成します。
cfg = coder.config('exe'); cfg.TargetLang = 'C++';
ARM Compute Library は、Raspberry Pi ハードウェアに最適化された機能を提供します。ARM Compute Library を使用するコードを生成するには、coder.ARMNEONConfig
オブジェクトを作成します。Raspberry Pi にインストールされている ARM Compute Library のバージョンと Raspberry Pi のアーキテクチャを指定します。コード生成構成オブジェクトに深層学習構成オブジェクトを追加します。
dlcfg = coder.DeepLearningConfig('arm-compute'); supportedVersions = dlcfg.getARMComputeSupportedVersions; dlcfg.ArmArchitecture = 'armv7'; dlcfg.ArmComputeVersion = '20.02.1'; cfg.DeepLearningConfig = dlcfg;
Raspberry Pi への接続の作成
MATLAB Support Package for Raspberry Pi Hardware の関数 raspi
を使用して、Raspberry Pi への接続を作成します。
r = raspi;
Raspberry Pi ボードに初めて接続する場合、または別のボードに接続する場合は、コードの次の行を使用して置き換えます。
raspiname
: 自分の Raspberry Pi のホスト名username
: 自分のユーザー名password
: 自分のパスワード
r = raspi('raspiname','username','password');
Raspberry Pi 用のコード生成ハードウェア パラメーターの構成
Raspberry Pi 用の coder.Hardware
オブジェクトを作成してコード生成構成オブジェクトに追加します。
hw = coder.hardware('Raspberry Pi');
cfg.Hardware = hw;
Raspberry Pi 上のビルド フォルダーを指定します。
buildDir = '/home/pi';
cfg.Hardware.BuildDir = buildDir;
C++ メイン ファイルの指定
コード生成構成オブジェクトでメイン ファイル main_mobilenet.cpp
を指定します。このファイルは関数 mobilenet_predict
用に生成された C++ コードを呼び出します。ファイルは、入力イメージを読み取り、そのデータを生成された関数呼び出しに渡し、イメージに対する予測を取得し、予測スコアをファイルに出力します。
cfg.CustomSource = 'main_mobilenet.cpp';
Raspberry Pi での実行可能プログラムの生成
C++ コードを生成します。MATLAB Support Package for Raspberry PI Hardware で関数 codegen
を使用する場合、関数は Raspberry Pi 上に実行可能ファイルをビルドします。
コードを生成するには、Raspberry Pi で環境変数 (MATLAB Coder)ARM_COMPUTELIB
と LD_LIBRARY_PATH
を設定しなければなりません。
codegen -config cfg mobilenet_predict -args {ones(224, 224, 3,'single')} -report
Deploying code. This may take a few minutes. Code generation successful: View report
Raspberry Pi での実行可能プログラムの実行
生成コードを Raspberry Pi 上でテストするには、入力イメージを生成コードのフォルダーにコピーします。このフォルダーは手動で、または raspi.utils.getRemoteBuildDirectory
API を使用して見つけることができます。この関数は、関数 codegen
が生成するバイナリ ファイルのフォルダーをリストします。バイナリが 1 つのフォルダーのみにあると仮定して、次のように入力します。
applicationDirPaths = raspi.utils.getRemoteBuildDirectory('applicationName','mobilenet_predict'); targetDirPath = applicationDirPaths{1}.directory;
関数 putFile
を使用して、実行可能プログラムの実行に必要なファイルをコピーします。
r.putFile('peppers_raspi_mobilenet.png',targetDirPath);
MATLAB から Raspberry Pi で実行可能プログラムを実行し、出力を MATLAB に戻します。
exeName = 'mobilenet_predict.elf'; argsforexe = ' peppers_raspi_mobilenet.png '; command = ['cd ' targetDirPath ';sudo ./' exeName argsforexe]; output = system(r,command);
ネットワークの 1000 個の出力クラスについて、予測スコアを取得します。
outputfile = [targetDirPath, '/output.txt'];
r.getFile(outputfile);
ラベルへの予測スコアのマッピングおよび出力の表示
上位 5 つの予測スコアを学習済みネットワークの対応するラベルにマッピングし、出力を表示します。
mapPredictedScores_mobilenet
参考
coder.ARMNEONConfig
(MATLAB Coder) | coder.DeepLearningConfig
(MATLAB Coder) | coder.hardware
(MATLAB Coder)
関連するトピック
- ARM Compute Library を使用した、深層学習ネットワークのためのコード生成 (MATLAB Coder)
- ARM ターゲットでの深層学習用のコード生成 (MATLAB Coder)