预测人类行为

细节
该项目是张博士的以人为本的机器人学(CSCI473)课程在科罗拉多矿业学院2020年春季学期的第3个项目。它旨在通过使用支持向量机(SVM)为机器人学提供机器学习的入门。原始项目交付物/描述可在此处查看。

对于本项目,使用了MSR Daily Activity 3D 数据集(图 2),并进行了一些修改。该数据集包含从 Xbox Kinect 传感器收集的 16 种人类活动,并以骨架形式存储。骨架是一个数组,包含在单帧中记录的人体 20 个关节的真实世界 (x, y, z) 坐标。以下图示展示了骨架的样子:

为了实现人类动作预测,原始数据必须以可由 SVM 处理的形式表示。对于本项目,使用了以下表示方法:
- 相对角度和距离(RAD)表示
- 关节位置差异直方图(HJPD)表示
在分类时,将表示(们)输入由LIBSVM提供支持的 SVM,以创建能够预测人类动作的模型。将创建两个模型,一个使用 RAD,另一个使用 HJPD。目标是使这些模型尽可能准确,并查看哪种表示方法表现最佳。
了解上述内容后,以下是代码的概览:
- 从修改后的数据集加载原始数据
- 从加载的数据集中移除任何异常值和/或错误数据
- 将最终的原始数据转换为 RAD 和 HJPD 表示
- 将这些表示输入调优后的 SVM 以生成两个模型
- 然后将测试原始数据输入这两个模型,并生成混淆矩阵以衡量模型的表现。
结果
在运行代码并尽我所能调优模型后,以下是 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 维基百科页面
- Jameco Xbox Kinect
- 关于 SVM 与 LibSVM 的信息: cjlin libsvm, libsvm pypi 页面, & libsvm github
- SVM 与 LIBSVM 的逻辑与文档: cjlin 指南论文 & cjlin libsvmtools 数据集
- 关于所使用/修改的数据集的信息