人間の行動を予測する
詳細
このプロジェクトは、2020 年春学期にコロラド鉱山大学で開講された Zhang 教授の Human Centered Robotics(CSCI473)クラスにおけるプロジェクト #3 でした。これは、サポートベクターマシン(SVM)の使用を通じて、ロボティクスにおける機械学習の入門を提供するよう設計されていました。元のプロジェクトの提出物/説明はこちらで閲覧できます。
このプロジェクトでは、いくつかの変更を加えた MSR Daily Activity 3D Dataset(図 2)を使用しました。このデータセットには、Xbox Kinetic センサーから収集され、スケルトンとして保存された 16 種類の人間の活動が含まれています。スケルトンとは、1 フレームで記録された人間の 20 個の関節の実世界座標 (x, y, z) の配列です。以下はスケルトンが何であるかを示す図です。
人間の行動予測を達成するために、元データは SVM で処理できる形式で表現される必要があります。このプロジェクトでは、次の表現が使用されました。
- 相対角度と距離(RAD)表現
- 関節位置差分ヒストグラム(HJPD)表現
分類のために、表現は LIBSVM によって動作する SVM に入力され、人間の行動を予測できるモデルを作成します。2 つのモデルが作成されます。1 つは RAD を使用し、もう 1 つは HJPD を使用します。目標は、これらのモデルをできるだけ高精度にし、どの表現が最も優れているかを確認することです。
これを踏まえて、コードが行うことの概要は次のとおりです。
- 変更済みデータセットから生データを読み込む
- 読み込んだデータセットから外れ値および/またはエラーデータを削除する
- 最終的な生データを 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 のみが含まれています。また、変更版にはいくつかの「破損した」データポイントが含まれていますが、完全版データセットにはそれらはありません。
- 3D スケルタルデータに基づく人物の時空間表現:レビュー
- YouTube: Kinect 深度センサーは 2 分でどのように動作するか
- Medium: Kinect V2 の関節と座標系を理解する
- Kinect Wikipedia ページ
- Jameco Xbox Kinect
- SVM(s) と LibSVM に関する情報: cjlin libsvm、libsvm pypi ページ、および libsvm github
- SVM と LIBSVM のロジックおよびドキュメント: cjlin ガイド論文 および cjlin libsvmtools datasets
- 使用/変更されたデータセットに関する情報