Main Content

ARM Mali GPU での深層学習の予測

この例では、関数 cnncodegen を使用して、ARM® Mali GPU での深層学習を使用するイメージ分類アプリケーションのコードを生成する方法を説明します。この例では、MobileNet-v2 DAG ネットワークを使用してイメージ分類を実行します。生成コードはコンピューター ビジョンおよび機械学習用の ARM Compute Library を利用します。

必要条件

  • ARM Mali GPU ベースのハードウェア。たとえば、HiKey960 は Mali GPU を含むターゲット プラットフォームの 1 つです。

  • Mali GPU 向けにビルドされたターゲット ARM ハードウェアの ARM Compute Library。

  • ターゲット ARM ハードウェア上の Open Source Computer Vision Library (OpenCV v2.4.9)。

  • コンパイラおよびライブラリの環境変数。ARM_COMPUTE 変数および LD_LIBRARY_PATH 変数がターゲット プラットフォーム上で設定されていることを確認します。サポートされているコンパイラおよびライブラリのバージョンの詳細は、サードパーティ ハードウェア (GPU Coder)を参照してください。環境変数の設定は、前提条件となる製品の設定 (GPU Coder)を参照してください。

事前学習済みの DAGNetwork の取得

Deep Learning Toolbox Model for MobileNet-v2 Network で入手できる事前学習済みの MobileNet-v2 ネットワークを読み込みます。

net = mobilenetv2
net = 
  DAGNetwork with properties:

         Layers: [154×1 nnet.cnn.layer.Layer]
    Connections: [163×2 table]
     InputNames: {'input_1'}
    OutputNames: {'ClassificationLayer_Logits'}

このネットワークには、畳み込み層、バッチ正規化層、ソフトマックス層、分類出力層など、155 個の層が含まれています。関数 analyzeNetwork() は、ネットワーク アーキテクチャの対話型プロット、およびネットワーク層についての情報が含まれる table を表示します。

analyzeNetwork(net);

コードの生成

ARM ターゲットでの深層学習のため、ホスト開発コンピューターでコードを生成します。実行可能プログラムをビルドして実行するには、生成されたコードを ARM ターゲット プラットフォームに移動します。ターゲット プラットフォームには ARM Mali GPU がなければなりません。たとえば、HiKey960 はこの例で生成されたコードを実行できるターゲット プラットフォームの 1 つです。

ターゲット ライブラリを arm-compute-mali として指定して関数 cnncodegen を呼び出します。

cnncodegen(net,'targetlib','arm-compute-mali');

生成されたファイルのターゲットへのコピー

推奨される SCP (Secure Copy Protocol) クライアントまたは Secure Shell File Transfer Protocol (SSH) クライアントを使用して、生成された codegen フォルダーとその他の必要なファイルをホスト開発コンピューターからターゲット プラットフォームに移動します。

たとえば、Linux® プラットフォームでは、HiKey960 にファイルを転送するには、次の形式の scp コマンドを使用します。

system('sshpass -p [password] scp (sourcefile) [username]@[targetname]:~/');

system('sshpass -p password scp main_mobilenet_arm_generic.cpp username@targetname:~/');
system('sshpass -p password scp peppers_mobilenet.png username@targetname:~/');
system('sshpass -p password scp makefile_mobilenet_arm_generic.mk username@targetname:~/');
system('sshpass -p password scp synsetWords.txt username@targetname:~/');
system('sshpass -p password scp -r codegen username@targetname:~/');

Windows® プラットフォームでは、PuTTY インストールに付属する pscp ツールを使用できます。次に例を示します。

system('pscp -pw password-r codegen username@targetname:/home/username');

PSCP ユーティリティは PATH 上、または現在のフォルダーになければなりません。

実行可能ファイルのビルド

ターゲット プラットフォームでライブラリをビルドするには、生成された makefile cnnbuild_rtw.mk を使用します。

たとえば、HiKey960 でライブラリをビルドするには次のようにします。

system('sshpass -p password ssh username@targetname' ...
' "make -C /home/username/codegen -f cnnbuild_rtw.mk"');

Windows プラットフォームでは、引数 -ssh を指定した putty コマンドを使用して、ログインして make コマンドを実行できます。次に例を示します。

system('putty -ssh username@targetname -pw password');

ターゲット プラットフォームで実行可能ファイルをビルドして実行するには、次の形式でコマンドを使用します。make -C /home/$(username) および ./execfile -f makefile_mobilenet_arm_generic.mk

たとえば、HiKey960 では次のようになります。

make -C /home/usrname arm_mobilenet -f makefile_mobilenet_arm_generic.mk

入力イメージ ファイルを指定して ARM プラットフォームで実行可能ファイルを実行します。

./mobilenet_exe peppers_mobilenet.png

入力イメージ ファイルに対する上位 5 つの予測は次のようになります。