人間の行動を予測する

詳細
このプロジェクトは、2020 年春学期にコロラド・スクール・オブ・マインズで Dr. Zhang の Human Centered Robotics (CSCI473) クラスのプロジェクト #3 として実施されました。サポートベクターマシン (SVM) を使用したロボティクスにおける機械学習の入門を提供することを目的としています。元のプロジェクトの成果物/説明は ここ で確認できます。

このプロジェクトでは、MSR Daily Activity 3D Dataset(図 2)をいくつか修正したものが使用されました。このデータセットは Xbox Kinetic センサーから取得された 16 種類の人間の活動を含み、スケルトンとして保存されています。スケルトンは、1 フレームで記録された人間の 20 関節の実世界座標 (x, y, z) の配列です。以下の図はスケルトンが何であるかを示しています。

人間の行動予測を実現するために、生データは SVM が処理できる形に表現されなければなりません。このプロジェクトでは、以下の表現が使用されました。
- Relative Angles and Distances (RAD) 表現
- Histogram of Joint Position Differences (HJPD) 表現
分類のために、表現は LIBSVM によって駆動される SVM に入力され、人体の行動を予測できるモデルが作成されます。RAD を使用したモデルと HJPD を使用したモデルの 2 つが作成されます。目標は、これらのモデルをできるだけ高精度にし、どの表現が最も優れているかを確認することです。
このことを踏まえて、コードの概要は次のとおりです。
- 修正されたデータセットから生データをロードする
- ロードされたデータセットから外れ値やエラー データを除去する
- 最終的な生データを RAD と HJPD の表現に変換する
- 表現をチューニングされた SVM に入力し、2 つのモデルを生成する
- 2 つのモデルにテスト用生データを入力し、混同行列を生成してモデルの性能を測定する
結果
コードを実行し、可能な限りモデルをチューニングした結果、RAD と HJPD の両モデルの最終的な混同行列は以下の通りです。
Representation: RAD
Accuracy: 62.5%
LIBSVM Classification 8.0 10.0 12.0 13.0 15.0 16.0
Actual Activity Number
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
Representation: HJPD
Accuracy: 70.83%
LIBSVM Classification 8.0 10.0 12.0 13.0 15.0 16.0
Actual Activity Number
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 のみが含まれ、完全版には含まれない「破損」データポイントがいくつかあります
- Space-Time Representation of People Based on 3D Skeletal Data: A Review
- YouTube: How the Kinect Depth Sensor Works in 2 Minutes
- Medium: Understanding Kinect V2 Joints & Coordinate System
- Kinect Wikipedia Page
- Jameco Xbox Kinect
- SVM と LibSVM に関する情報: cjlin libsvm, libsvm pypi page, & libsvm github
- SVM と LIBSVM のロジックとドキュメント: cjlin guide paper & cjlin libsvmtools datasets
- 使用/修正されたデータセットに関する情報