预测人类动作
详细信息
该项目是梅特矿业学院张博士的以人为本的机器人(CSCI473)课程在2020年春季学期的项目#3。它旨在通过使用支持向量机(SVM)提供机器人领域机器学习的介绍。原始项目交付物/描述可以在这里查看。
在这个项目中,使用了经过一些修改的MSR每日活动3D数据集(图2)。该数据集包含从Xbox Kinetic传感器收集的16个人类活动,并以骨架形式存储。骨架是一个包含20个关节在一个帧中记录的真实世界(x,y,z)坐标的数组。这里有一张显示骨架是什么的图:
为了实现人类动作预测,原始数据必须以可以被SVM处理的形式表示。对于这个项目,使用了以下表示:
- 相对角度和距离(RAD)表示
- 关节位置差异直方图(HJPD)表示
对于分类,表示被送入由LIBSVM提供支持的SVM,以创建一个可以预测人类动作的模型。将创建两个模型,一个使用RAD,另一个使用HJPD。目标是使这些模型尽可能准确,并查看哪个表示效果最佳。
了解这一点后,以下是代码的概述:
- 从修改后的数据集中加载原始数据
- 从加载的数据集中删除任何异常值和/或错误数据
- 将最终原始数据转换为RAD和HJPD表示
- 将表示送入调优后的SVM,以生成两个模型
- 然后将这两个模型输入测试原始数据,并生成混淆矩阵以测量模型的表现。
结果
在运行代码并尽我所能调优模型后,以下是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表示似乎是用于此分类的更准确表示。由此,存在一个使用骨架数据预测人类动作的模型。这里的模型远非完美,但比随机更好。这个项目催生了后来的移动姿势项目。
附加说明:
- 该项目在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数据集
- 关于使用/修改的数据集的信息