人間の行動予測
詳細
このプロジェクトは、2020年春学期にコロラド鉱山学校の張博士の人間中心ロボティクス(CSCI473)クラスのプロジェクト#3でした。これは、サポートベクターマシン(SVM)を使用したロボティクスにおける機械学習の入門を提供するために設計されました。元のプロジェクトの成果物/説明はこちらで見ることができます。
このプロジェクトでは、MSR Daily Activity 3D Dataset(図2)をいくつかの修正を加えて使用しました。このデータセットには、Xbox Kinectセンサーから収集された16の人間の活動がスケルトンとして保存されています。スケルトンは、1フレームで記録された人間の20の関節の実世界の(x, y, z)座標の配列です。スケルトンが何であるかを示す図は以下の通りです:
人間の行動予測を達成するためには、生データをSVMが処理できる形式で表現する必要があります。このプロジェクトでは、以下の表現が使用されました:
- 相対角度と距離(RAD)表現
- 関節位置差のヒストグラム(HJPD)表現
分類のために、表現はLIBSVMによって動かされるSVMに送信され、人間の行動を予測できるモデルが作成されます。RADを使用したモデルとHJPDを使用したモデルの2つが作成されます。目標は、これらのモデルをできるだけ正確にし、どの表現が最も良いパフォーマンスを発揮するかを見ることです。
これを踏まえて、コードが何をするかの概要は以下の通りです:
- 修正されたデータセットから生データをロードします
- ロードされたデータセットから外れ値やエラーデータを削除します
- 最終的な生データをRADおよびHJPD表現に変換します
- 表現は調整されたSVMに送信され、2つのモデルが生成されます
- 2つのモデルにテスト生データが供給され、モデルのパフォーマンスを測定するために混同行列が生成されます。
結果
コードを実行し、モデルを最善の能力で調整した後、RADおよびHJPDモデルの最終的な混同行列は以下の通りです:
表現: RAD
精度: 62.5%
LIBSVM分類 8.0 10.0 12.0 13.0 15.0 16.0
実際の活動番号
8.0 8 0 0 0 0 0
10.0 1 5 0 0 1 1
12.0 0 1 1 0 3 3
13.0 0 0 0 6 1 1
15.0 0 0 0 1 5 2
16.0 0 0 0 0 3 5
表現: HJPD
精度: 70.83%
LIBSVM分類 8.0 10.0 12.0 13.0 15.0 16.0
実際の活動番号
8.0 7 1 0 0 0 0
10.0 1 5 0 0 0 2
12.0 0 0 7 0 1 0
13.0 2 0 1 5 0 0
15.0 0 0 0 0 7 1
16.0 0 2 0 0 3 3
結論
両方の精度が50%を超えているため、このプロジェクトは成功でした。また、HJPD表現はこの分類に使用するのにより正確な表現のようです。これにより、スケルトンデータを使用して人間の行動を予測するモデルがあります。ここにあるモデルは完璧からは程遠いですが、ランダムよりは良いです。このプロジェクトは後にMoving Poseプロジェクトを生み出しました。
追加の注意事項:
- このプロジェクトはPythonバージョン3.8.13でテストされました
- このプロジェクトでは、完全なMDA3データセットと修正されたMDA3データセットが使用されています。修正されたMDA3には、活動8、10、12、13、15、および16のみが含まれています。また、修正されたバージョンには「破損した」データポイントが含まれていますが、完全なデータセットには含まれていません。
- 3Dスケルトンデータに基づく人々の時空間表現:レビュー
- YouTube: Kinect深度センサーの動作を2分で説明
- Medium: Kinect V2の関節と座標系の理解
- Kinect Wikipediaページ
- Jameco Xbox Kinect
- SVMおよびLibSVMに関する情報: cjlin libsvm、libsvm pypiページ、およびlibsvm github
- SVMおよびLIBSVMのロジックおよびドキュメント: cjlinガイドペーパーおよびcjlin libsvmtoolsデータセット
- 使用/修正されたデータセットに関する情報