センサ情報を利用した行動識別の概要

ここでは、行動識別手法の概要を説明します。センサ情報を利用した行動識別は、学習フェーズと識別フェーズに分けることができます。


tutorial_overview


学習フェーズでは、対象とする行動(図の場合は、歩く,ジョギング,自転車に乗る,ソファーに座る,デスクワーク)に対して、行動毎の特徴量を機械学習します。 具体的には、まず、各々の行動に対して、センサ情報を取得し、センサ情報の平均,分散等の特徴量を取得するといったことを行います。 次に、様々な特徴量(平均,分散,標準偏差,パワースペクトルなど)で構成される特徴ベクトルを機械学習させます。 上記手順を他の行動に対しても実行します。

tutorial_overview2



識別フェーズでは、特定の行動(歩く,ジョギング,自転車に乗る,ソファーに座る,デスクワーク のいずれか)に対して、行動の識別を行います。 具体的には、まず、特定の行動に対して、センサ情報を取得し、センサ情報から、学習フェーズ時に抽出したものと同じ特徴量で構成される特徴ベクトルの取得を行います。 次に、取得した特徴ベクトルと学習フェーズで収集した学習データと比較し、特定の行動が、歩く,ジョギング,自転車に乗る,ソファーに座る,デスクワークのいずれかであるかを識別します。

HASC Tool を使ったラベリング (対象データ:シーケンスデータ)

行動識別を行う際には、加速度波形に対して、ラベリング(正解情報付け)を行う必要があります。ここでは、加速度波形に対するラベル付けをHASCTOOLを用いて行う手順を紹介します。

各種データの準備

tutorial_sequencedata

上図のように、加速度データ(*.csv),ラベルデータ(*.label),メタデータ(*.meta)を準備してください。 サンプルデータは、ダウンロードページの、HASCサンプルデータから取得できます。 ご自身のデータを準備する際には、お手数ですがデータ形式のページで確認しながらデータの作成を行ってください。 データが準備できたら、HASC Tool内にimportしてください。importの手順が分からない方は、お手数ですがHASC Toolページを参照してください。

センサデータの波形表示

tutorial_wave

  • csvファイル(*.csv)を開き、Waveタブをクリックすると、センサデータの波形が表示されます
  • センサX軸:青色,センサY軸:赤色,センサZ軸:緑色
  • 波形ビューの +t, -t, +v, -v ボタンを押すと、表示する範囲を変更します
  • 波形ビューの rt ボタンを押すと、時刻の左端が0になります
  • 波形ビューの ?t ボタンを押すと、選択した時間範囲に含まれるデータをテキストエディタ上に表示します
  • プロジェクトエクスプローラのcsvファイルのコンテキストメニューから、「ラベルファイルの新規作成」を選ぶと、csvファイルに関連づけられた新規ラベルファイルを作成できます

センサデータへのラベル付け

tutorial_wave&label

  • ラベルファイル(*.label)を開き、Wave&Labelsタブをクリックすると、ラベルが付与されたセンサデータの波形が表示されます
  • センサX軸:青色,センサY軸:赤色,センサZ軸:緑色
  • 波形ビューの +t, -t, +v, -v ボタンを押すと、表示する範囲を変更します
  • 波形ビューの rt ボタンを押すと、時刻の左端が0になります
  • 波形ビューの ?t ボタンを押すと、選択した時間範囲に含まれるデータをテキストエディタ上に表示します
  • 波形ビューの ?L ボタンを押すと、選択した時間範囲をテキストエディタに挿入します

HASC Tool を使った特徴量抽出(対象データ:学習データ,シーケンスデータ)

ここでは、HASCToolを利用した、センサデータからの特徴量の抽出を行う手順を紹介します。まずダウンロードページの、Sample HASC XBD Filesを取得し、HASC Tool内にimportしてください。 importの手順が分からない方、*.hascxbd ファイルの実行の仕方が分からない方は、HASC Toolページを参照してください。

HASCToolを利用した特徴量抽出手順

feature1

  • CSVtoFeature.hascxbd を開くとブロック図エディタが開き、GraphEditタブをクリックすると、ブロック図がグラフで表示されます
    • +B ボタンを押すと、ブロックを新規作成できます。新規作成するブロックのクラス名を入力して下さい。
    • Ctrl(control)キーを押しながら、出力側ブロック(送信元)と入力側ブロック(受信先)を順に選び、+Cボタンを押すと、コネクションを新規作成できます。プロパティビューで、inputPort / outputPort の名前を適宜指定して下さい。
    • Del ボタンを押すと、選択したブロック(それに接続されたコネクションを含む)またはコネクションを削除します。
    • ブロックを選択すると、プロパティビューで、ブロックのプロパティ(プリミティブ型または文字列型のもののみ)を設定できます。
    • ブロック図を変更した場合は、Ctrl+Sでファイルを保存してから、実行して下さい。
    • Undo/Redoをしたい場合は、テキストエディタ(HascXBDタブ)に切り替えて行って下さい
  • 時刻の単位は、microsecondsです。(1,000,000で1秒)
  • ブロックの出力ポートには、通常、複数のコネクションを接続することができます。
  • ブロックの入力ポートには、通常、単一のコネクションしか接続できません。複数入力のブロック(VectorConcatinatorなど)の場合は、 入力ポートの数をinputPortCountプロパティで設定し、各コネクションを、それぞれ inputPort[0],inputPort[1],… という名前の、別々のポートへと接続して下さい。
  • ブロックの設定値(例:サンプルデータ数,出力先ファイルの場所)を設定・変更する場合は,Property項目で編集を行ってください(下図参照)。

property



上図は、指定されたファイルに文字列系列を出力するフィルタについてのプロパティ設定画面です。
出力先ファイルのデフォルトは$(projectRoot)/temp/feature_Output.csvとなっていますので、Projectのroot直下にtempという名前のフォルダを新規作成してください。 出力先,出力ファイル名を変更する場合は,プロパティのfilePathで変更してください。

CSVtoFeature.hascxbd で使用している特徴量

取得したセンサ情報は、窓幅 5.12秒,ずらし幅50%のスライディング・ウィンドウを用いて部分系列に分割し、各々の窓内データについて以下の5要素を求め、特徴量としています。

  • 平均
  • 分散
  • 最大
  • 最小
  • エネルギー

CSVtoFeature.hascxbd の構成

feature2

  • reader:ファイルから1行づつ読み取り、文字列系列として出力します
  • csvToVector:CSVの文字列系列をパースして、HASC Tool内で処理できるデータとして出力するフィルタ
  • vectorNorm:ベクトルのノルムを求めるフィルタ
  • max:最大値を求めるフィルタ(窓幅:5.12秒)
  • min:最小値を求めるフィルタ(窓幅:5.12秒)
  • mean:平均値を求めるフィルタ(窓幅:5.12秒)
  • variance:分散値を求めるフィルタ(窓幅:5.12秒)
  • IIRFilter:IIRフィルタ(フィルタ係数:0.0010)(直流成分を取得)
  • ScalarMultiplier:ベクトルの各成分をスカラ倍するフィルタ(スカラ値:-1)
  • VectorAdder:ベクトルの加算を行うフィルタ(直流成分を除去)
  • HanningWindow:ハニング窓関数を乗算するフィルタ(窓幅:5.12秒)
  • FFT:フーリエ変換を行うフィルタ
  • ComplexToVector:複素数をその絶対値に変換するフィルタ(パワースペクトルを取得)
  • VectorNorm2:ベクトルのノルムを求めるフィルタ(エネルギーを取得)
  • concat:各々の特徴量(最大,最小,平均,分散,エネルギー)
  • downsample:サンプリングレートの変更(変更後のサンプリング間隔:2.56秒)
  • waveView:波形を時系列で表示
  • vectorTocsv:HASC Tool内で処理できるデータをパースして、CSVの文字列系列として出力するフィルタ
  • writer:指定されたファイルに文字列系列を出力します。
    出力先ファイルPathのデフォルトは$(projectRoot)/temp/feature_Output.csvとなっていますので、root直下にtempという名前のフォルダを新規作成してください。 出力先,出力ファイル名を変更する場合は,プロパティで変更してください。

HASC Tool を使った機械学習(対象データ:学習データ)

ここでは、HASCToolを利用した機械学習を行う手順を紹介します。機械学習には、*.hascxbd ファイルを使用します。ダウンロードページの、Sample HASC XBD Filesを取得し、HASC Tool内にimportしてください。 importの手順が分からない方、*.hascxbd ファイルの実行の仕方が分からない方は、HASC Toolページを参照してください。

HASCToolを利用した機械学習手順

machineLearning.hascxbd を開くとブロック図エディタが開き、GraphEditタブをクリックすると、ブロック図がグラフで表示されます
ブロック図の編集の仕方に関しては、HASC Tool を使った特徴量抽出を参考にしてください。

learning



上図は、特徴量の学習を行うフィルタについてのプロパティ設定画面です。 まず、学習させる行動データの種類を、stay, walk, jog, skip, stUp, stDownの中から選択から選択し、activity項目に入力してください。 学習データファイルのデフォルトは“C:\works\HASCTool\ML_OutPut.csv”となっていますので、デフォルトのまま実行する場合は、 Cドライブ直下にworksフォルダ,その下にHASCToolフォルダを新規作成し、その下にML_OutPut.csvという名前のファイルを作成してください。(下図参照) 出力ファイルPathを変更する場合は,プロパティのfileSystemPathで変更してください。

learning2

machineLearning.hascxbd で学習している特徴量

取得したセンサ情報は、窓幅 5.12秒,ずらし幅50%のスライディング・ウィンドウを用いて部分系列に分割し、各々の窓内データについて以下の5要素を求め、特徴量としています。

  • 平均
  • 分散
  • 最大
  • 最小
  • エネルギー

machineLearning.hascxbd での学習手法

デフォルトでは、HASCTool内の、jp.hasc.hasctool.core.runtime.filter.classifier.MeanLearningFilterを使用しております。 このフィルタは、各行動毎に、全データから取得できる特徴ベクトルの平均値を記録します。 今回紹介したフィルタは、処理内容が非常に単純であり、まだまだ機械学習と呼べる状態ではありません。 今後は、HASCToolの利用者全体で、このHASCToolに新たな機械学習フィルタを作成していきたいと思っております。 自ら新規学習フィルタを追加していただいてももちろん結構ですし、アルゴリズムをHASC事務局に教えていただければ、こちらで実装することも考えております。 よろしくお願いします。

学習データファイルの内容

<ファイルの例>

learning3

  • csv形式
  • [Activity],[学習データ数],[プロトタイプベクトルの要素1],[プロトタイプベクトルの要素2],・・・・・・

HASC Tool を使った行動識別(対象データ:シーケンスデータ)

ここでは、HASCToolを利用した行動識別を行う手順を紹介します。行動識別には、*.hascxbd ファイルを使用します。ダウンロードページの、Sample HASC XBD Filesを取得し、 HASC Tool内にimportしてください。importの手順が分からない方、*.hascxbd ファイルの実行の仕方が分からない方は、HASC Toolページを参照してください。

HASCToolを利用した行動識別手順

activityIdentification.hascxbd を開くとブロック図エディタが開き、GraphEditタブをクリックすると、ブロック図がグラフで表示されます
ブロック図の編集の仕方に関しては、HASC Tool を使った特徴量抽出を参考にしてください。

identification



上図は、行動識別を行うフィルタについてのプロパティ設定画面です。 まず、fileSystemPath項目に、HASC Toolを使った機械学習で作成した学習データファイルのPathを指定してください (デフォルト:“C:\works\HASCTool\ML_OutPut.csv”)。 出力先ファイルPathのデフォルトは$(projectRoot)/temp/activityIdentification.labelとなっていますので、Projectのroot直下にtempという名前のフォルダを新規作成してください。 出力先,出力ファイル名を変更する場合は,writerのfilePath項目で変更してください。

activityIdentification.hascxbd での識別手法

デフォルトでは、HASCTool内の、jp.hasc.hasctool.core.runtime.filter.classifier.NearestNeighborsFilterを使用しております。 このフィルタは、識別対象とする特徴ベクトルに対して、ベクトル間距離が一番小さくなる特徴ベクトルを選択することにより、行動識別を行います。 今回紹介したフィルタは、処理内容が非常に単純です。 今後は、HASCToolの利用者全体で、このHASCToolに新たな識別フィルタを作成していきたいと思っております。 自ら新規学習フィルタを追加していただいてももちろん結構ですし、アルゴリズムをHASC事務局に教えていただければ、こちらで実装することも考えております。 よろしくお願いします。

識別結果ファイルの内容

識別結果ファイルのデータの構成は以下のとおりです。

  • 拡張子は“.label”
  • csv形式
  • [開始時刻(sec)],[終了時刻(sec)],[Activity]
  • (例:下図参照)

identification2

上図は、サンプルデータのname_2のATR(WAA001)で計測した学習データを学習に使用し、 name_2のATR(WAA001)で計測したシーケンスデータに対して識別を行った結果です。

HASC Toolを使った識別精度の評価

ここでは、HASCToolを利用した行動識別精度の評価を行う手順を紹介します。評価には、*.hascxbd ファイルを使用します。ダウンロードページの、Sample HASC XBD Filesを取得し、 HASC Tool内にimportしてください。importの手順が分からない方、*.hascxbd ファイルの実行の仕方が分からない方は、HASC Toolページを参照してください。

HASCToolを利用した識別精度の評価

evaluation.hascxbd を開くとブロック図エディタが開き、GraphEditタブをクリックすると、ブロック図がグラフで表示されます
ブロック図の編集の仕方に関しては、HASC Tool を使った特徴量抽出を参考にしてください。

identification



上図は、識別精度の評価を行うフィルタについてのプロパティ設定画面です。 出力先ファイルPathのデフォルトは$(projectRoot)/temp/evaluation.csvとなっていますので、Projectのroot直下にtempという名前のフォルダを新規作成してください。 出力先,出力ファイル名を変更する場合は,writerのfilePath項目で変更してください。

評価結果ファイルの内容

評価結果ファイルの構成は以下のとおりです。

  • 拡張子は“.csv”
  • csv形式
  • (例:下図参照)

上記ファイルに対して下記の操作を実行した際の表示例
“右クリック>OpenWith>Other>External programs>Microsoft Excel ワークシートを選択”

identification2

上の評価結果は、サンプルデータのname_2のATR(WAA001)で計測した学習データを学習に使用し、 name_2のATR(WAA001)で計測したシーケンスデータに対して識別を行った結果です。 評価結果から、識別精度がかなり悪いことが読み取れます。(例:stayのうち63.2%がstDownとして誤認識) 主な原因として、学習結果の表から、特徴量として採用したエネルギーが他の特徴量と比較して、 数値が大きくなっていることと、スライディングウィンドウの窓幅の問題があると考えられるので、 単純にエネルギーを0.001倍し、窓幅を2.56秒(ずらし幅50%)に変更して再度学習&識別を行った結果を以下に示します。

identification2

上図のように、識別精度は多少向上しました。 尚、各々の正解情報に関して、数値をすべて加算しても100%にならない場合がありますが、これはラベル付けを行う際に、 手動で行うために発生する誤差であり。ラベル作成時に時間情報を直接入力することで問題は解消されます。

HASC Tool を使ったデータの分類

ここでは、HASCToolを利用した、データの分類について紹介します。 xbdExe_CSVFileSelectByMetaInf.hascxbdを開くとブロック図エディタが開き、GraphEditタブをクリックすると、ブロック図がグラフで表示されます
ブロック図の編集の仕方に関しては、HASC Tool を使った特徴量抽出を参考にしてください。 また、*.hascxbd ファイルの実行の仕方が分からない方は、HASC Toolページを参照してください。

HASC Tool を使ったデータ分類手順

以下のhascxbdファイルは、メタファイル(*.meta)に含まれる情報を使って、条件にあうファイルを選択します。

  • xbdExe_CSVFileSelectByMetaInf.hascxbd :csvファイルを選択
  • xbdExe_METAFileSelectByMetaInf.hascxbd :metaファイルを選択

上図は、メタファイル(*.meta)に含まれる情報を使ったフィルタについてのプロパティ設定画面です。
metaElement:TerminalType,身長(cm),路面状態,センサデバイス取り付け位置などの要素を設定
metaInformation:ATR,アスファルト,スニーカーなどの要素の内容を設定
not:trueの場合、指定した条件以外のファイルを選択。(デフォルトは"false")

xbdExe_CSVFileSelectByMetaInf.hascxbd の構成

  • find_files:読み込むフォルダを選択
  • filter_META_files:メタファイル(*.meta)のみを通すフィルタ
  • MetaFilter:メタファイル(*.meta)に含まれる情報によるフィルタリングを実行
  • METAtoCSV:拡張子を(.meta)から(.csv)に変換
  • create_out_path:出力先のpathを文字列置換により設定するフィルタ
  • set_writer_filePath:xbdExecuterで起動するhascxbdファイルのreaderに入力Pathを渡す
  • set_reader_filePath:xbdExecuterで起動するhascxbdファイルのwriterに出力先Pathを渡す
  • XERequestMerger:複数の入力ポートから入力されたリクエストを統合する
  • XbdExecutor:指定したhascxbdファイルを起動する

xbdExe_METAFileSelectByMetaInf.hascxbd の構成

基本的な構成はxbdExe_CSVFileSelectByMetaInf.hascxbd と同じです。 METAtoCSVが抜いてあります。

ページのトップへ戻る