ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

スマートフォン展開用の行動認識 Simulink モデル

この例では、スマートフォンのセンサー信号に基づいて人間の行動を分類する Simulink® モデルをコード生成およびスマートフォン展開用に準備する方法を示します。この例では、Android デバイスおよび iOS デバイスへの展開に対応している 2 つの Simulink モデルを提供します。ターゲット デバイスに必要なサポート パッケージをインストールした後で、分類モデルに学習をさせ、Simulink モデルをデバイスに展開します。

前提条件

この例の Simulink モデルには、Simulink のサポート パッケージが必要です。

標本データセットの読み込み

humanactivity データセットを読み込みます。

load humanactivity

humanactivity データセットには、座る、立つ、歩く、走る、踊る、という、人間の 5 種類の身体動作についての 24,075 個の観測値が含まれています。各観測値には、スマートフォンの加速度センサーによって測定された加速度データから抽出した 60 個の特徴量が含まれています。このデータセットには、以下の変数が含まれています。

  • actid — それぞれ座る、立つ、歩く、走る、踊る、を表す 1 ~ 5 の整数による行動 ID が格納されている応答ベクトル

  • actnames — 整数の行動 ID に対応する行動名

  • feat — 24,075 個の観測値に対する 60 個の特徴量が格納されている特徴量行列

  • featlabels — 60 個の特徴量のラベル

humanactivity データセットの作成には、センサー HAR (行動認識) アプリ[1]が使用されました。このアプリで生の加速度データを測定するときに、人間はスマートフォンを上下逆さまにして画面が人間側を向く状態でポケットに入れていました。ソフトウェアでは、測定した生データをこれに従って較正し、較正したデータから 60 個の特徴量を抽出しました。較正と特徴抽出の詳細については、[2][3]をそれぞれ参照してください。後で説明する Simulink モデルでは生の加速度データも使用しており、較正および特徴抽出用のブロックが含まれています。

データの準備

この例では、5 種類の行動を分類するモデルに学習をさせるために観測値の 90% を、学習済みモデルの検証に観測値の 10% を使用します。cvpartition を使用して、テスト セット用に 10% のホールドアウトを指定します。

rng('default') % For reproducibility
Partition = cvpartition(actid,'Holdout',0.10);
trainingInds = training(Partition); % Indices for the training set
XTrain = feat(trainingInds,:);
YTrain = actid(trainingInds);
testInds = test(Partition); % Indices for the test set
XTest = feat(testInds,:);
YTest = actid(testInds);

分類学習器アプリで学習データセットを読み込むため、特徴量行列 XTrain と応答ベクトル YTrain をテーブルに変換します。

tTrain = array2table([XTrain YTrain]);

テーブルの各列の変数名を指定します。

tTrain.Properties.VariableNames = [featlabels' 'Activities'];

分類学習器アプリの使用によるブースティング決定木のアンサンブルの学習

分類学習器アプリを使用して分類モデルに学習をさせます。分類学習器アプリを開くため、コマンドラインで classificationLearner と入力します。または、[アプリ] タブをクリックし、[アプリ] セクションの右にある矢印をクリックして、ギャラリーを開きます。次に、[機械学習][分類学習器] をクリックします。

[分類学習器] タブで、[ファイル] セクションの [新規セッション] をクリックし、[ワークスペースから] を選択します。

[新規セッション] ダイアログ ボックスで、[ワークスペース変数] の矢印をクリックしてからテーブル tTrain を選択します。分類学習器は予測子と応答をテーブルから識別します。

既定のオプションは、過適合を防ぐ 5 分割の交差検証です。[セッションの開始] をクリックします。分類学習器がデータセットを読み込み、はじめの 2 つの特徴量について散布図をプロットします。

[分類学習器] タブで [モデル タイプ] セクションの右にある矢印をクリックしてギャラリーを開きます。次に、[アンサンブル分類器][ブースティング決定木] をクリックします。

データ ブラウザーの [現在のモデル] ペインにブースティング決定木のアンサンブル モデルの既定設定が表示されます。

[分類学習器] タブの [学習] セクションで、[学習] をクリックします。学習が完了すると、5 分割で交差検証された分類精度がデータ ブラウザーの [履歴] ペインに表示されます。

[分類学習器] タブの [エクスポート] セクションで、[モデルのエクスポート] をクリックしてから [コンパクト モデルのエクスポート] を選択します。ダイアログ ボックスの [OK] をクリックします。構造体 trainedModel が MATLAB のワークスペースに現れます。trainedModelClassificationEnsemble フィールドにコンパクト モデルが含まれています。学習済みのモデルを構造体から抽出します。

classificationEnsemble = trainedModel.ClassificationEnsemble;

コマンドラインにおけるブースティング決定木のアンサンブルの学習

もう一つの方法として、コマンドラインで同じ分類モデルに学習をさせることができます。

template = templateTree('MaxNumSplits',20);
classificationEnsemble = fitcensemble(XTrain,YTrain, ...
    'Method','AdaBoostM2', ...
    'NumLearningCycles',30, ...
    'Learners',template, ...
    'LearnRate',0.1, ...
    'ClassNames',[1; 2; 3; 4; 5]);

classificationEnsemble について 5 分割の交差検証を実行し、検証精度を計算します。

partitionedModel = crossval(classificationEnsemble,'KFold',5);
validationAccuracy = 1-kfoldLoss(partitionedModel)
validationAccuracy = 0.9831

テスト データに対するパフォーマンスの評価

テスト データセットに対するパフォーマンスを評価します。

testAccuracy = 1-loss(classificationEnsemble,XTest,YTest)
testAccuracy = 0.9763

学習済みモデルは、テスト データセットについて行動の 97.63% を正しく分類します。この結果は、学習済みモデルが学習データセットに対して過適合にはなっていないことを示します。

正確な値はオペレーティング システムによってわずかに変化する可能性があることに注意してください。

学習済みモデルの保存

分類モデル オブジェクトが含まれている場合のコード生成には、saveCompactModelloadCompactModelを使用します。

saveCompactModelを使用して、学習済みモデルを保存します。

saveCompactModel(classificationEnsemble,'EnsembleModel.mat');

Simulink モデルの関数ブロック predictActivityloadCompactModel を使用して学習済みモデルを読み込み、学習済みモデルを使用して新しいデータを分類します。

デバイスへの Simulink モデルの展開

分類モデルを準備したので、スマートフォンのタイプに応じて Simulink モデルを開き、モデルをデバイスに展開できるようになりました。Simulink モデルには EnsembleModel.mat ファイルと較正行列ファイル slexHARAndroidCalibrationMatrix.mat または slexHARiOSCalibrationMatrix.mat が必要であることに注意してください。このページの右上にあるボタンをクリックしてこの例を MATLAB® で開くと、これらの較正行列ファイルが含まれている例のフォルダーが開きます。

Android に展開する Simulink モデルを開くには、slexHARAndroidExample と入力します。

iOS に展開する Simulink モデルを開くには、slexHARiOSExample と入力します。

この 2 つの Simulink モデルは、スマートフォンのセンサーで測定した加速度データに基づいて人間の行動を分類します。モデルには以下のブロックが含まれています。

  • Accelerometer ブロックは、生の加速度データをデバイスの加速度センサーから受け取ります。

  • calibrate ブロックは、生の加速度データを較正する MATLAB Function ブロックです。このブロックでは slexHARAndroidCalibrationMatrix.mat ファイルまたは slexHARiOSCalibrationMatrix.mat ファイルの較正行列を使用します。このページの右上にあるボタンをクリックしてこの例を MATLAB® で開くと、これらのファイルが含まれている例のフォルダーが開きます。

  • 表示ブロック Acc XAcc Y および Acc Z は、calibrate ブロックに接続されており、デバイスの各軸について較正されたデータ点を表示します。

  • X BufferY Buffer および Z Buffer の各 Buffer ブロックは、バッファリングしたフレーム間のオーバーラップが 12 サンプル分含まれている、32 個の加速度計軸のサンプルをバッファリングします。20 個のサンプルを収集した後で、各 Buffer ブロックは 20 個のサンプルを前のフレームの 12 サンプルと結合し、合計で 32 個のサンプルを extractFeatures ブロックに渡します。各 Buffer ブロックは、入力サンプルを 0.1 秒ごとに受け取り、32 個のサンプルが含まれているバッファリングしたフレームを 2 秒ごとに出力します。

  • extractFeatures ブロックは、バッファリングした 32 個の加速度サンプルが含まれているフレームから 60 個の特徴量を抽出する MATLAB Function ブロックです。この関数ブロックでは DSP System Toolbox™ と Signal Processing Toolbox™ を使用します。

  • predictActivity ブロックは、loadCompactModel を使用して学習済みモデルを EnsembleModel.mat ファイルから読み込み、抽出された特徴量を使用して行動を分類する、MATLAB Function ブロックです。出力は、座る、立つ、歩く、走る、踊る、にそれぞれ対応する 1 ~ 5 の整数です。

  • Predicted Activity ブロックは、分類した行動の値をデバイスに表示します。

  • Video Output サブシステムは、複数端子のスイッチ ブロックを使用して対応する行動のイメージ データを選択し、デバイスに表示します。Convert to RGB ブロックは、選択されたイメージを別々の RGB ベクトルに分解し、このイメージを Activity Display ブロックに渡します。

Simulink モデルをデバイスに展開するには、Run Model on Android Devices または Run Model on iOS Devices の手順に従います。設定プロセスの完了後に [ハードウェアに展開] をクリックすると、モデルと同じ名前のアプリが作成されます。アプリを実行し、前に説明したものと同じ方法でデバイスを配置して学習データを収集し、5 つの行動を試します。それに従って、分類された行動がアプリで表示されます。

アプリの精度を確保するには、前に説明したものと同じ方法でデバイスを配置して学習データを収集する必要があります。異なる場所または方向でデバイスを配置する場合は、各自の方法でデータを収集し、そのデータを使用して分類モデルに学習をさせます。

デバイスによって、アプリの精度がテスト データセット (testaccuracy) の精度と異なる可能性があります。追加センサーの使用と較正行列の更新によるアプリの改善を検討できます。また、Audio System Toolbox™ を使用して、音声フィードバック用に別の出力ブロックを出力サブシステムに追加することもできます。分類された行動と加速度データをデバイスから "モノのインターネット" にパブリッシュするには、ThingSpeak™ の書き込みブロックを使用します。詳細については、https://thingspeak.com/ を参照してください。

参照

[1] El Helou, A. Sensor HAR recognition App. MathWorks File Exchange https://www.mathworks.com/matlabcentral/fileexchange/54138-sensor-har-recognition-app

[2] STMicroelectronics, AN4508 Application note. “Parameters and calibration of a low-g 3-axis accelerometer.” 2014.

参考

| | |

関連するトピック