Predicción de acciones humanas
Repositorio de GitHub del proyecto
Detalles
Este proyecto fue el proyecto #3 para la clase Human Centered Robotics (CSCI473) del Dr. Zhang en la Colorado School of Mines durante el semestre de primavera de 2020. Fue diseñado para proporcionar una introducción al aprendizaje automático en robótica mediante el uso de Máquinas de Vectores de Soporte (SVM). Los entregables/descripción originales del proyecto pueden verse aquí.
Para este proyecto se utilizó el MSR Daily Activity 3D Dataset (Figura 2), con algunas modificaciones. Este conjunto de datos contiene 16 actividades humanas recopiladas desde un sensor Xbox Kinetic y almacenadas como esqueletos. Los esqueletos son un arreglo de coordenadas del mundo real, (x, y, z), de 20 articulaciones de un humano registradas en un fotograma. Aquí hay una figura que muestra qué es un esqueleto:
Para lograr la predicción de acciones humanas, los datos brutos deben representarse en una forma que pueda ser procesada por una SVM. Para este proyecto, se utilizaron las siguientes representaciones:
- Representación de Ángulos y Distancias Relativas (RAD)
- Representación del Histograma de Diferencias de Posición de las Articulaciones (HJPD)
Para la clasificación, la(s) representación(es) se envía(n) a una SVM, impulsada por LIBSVM, para crear un modelo que pueda predecir acciones humanas. Se crearán dos modelos, uno usando RAD y otro usando HJPD. El objetivo es hacer que estos modelos sean lo más precisos posible y ver qué representación funciona mejor.
Sabiendo esto, aquí hay una visión general de lo que hace el código:
- Cargar los datos brutos del conjunto de datos modificado
- Eliminar cualquier dato atípico y/o erróneo del conjunto de datos cargado
- Convertir los datos brutos finales en representaciones RAD y HJPD
- Las representaciones se envían a SVM(s) ajustadas para generar dos modelos
- Luego, los dos modelos reciben datos brutos de prueba y se genera una matriz de confusión para medir cómo funcionó(n) el/los modelo(s).
Resultados
Después de ejecutar el código y ajustar los modelos lo mejor que pude, aquí está la matriz de confusión final para ambos modelos RAD y 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
Conclusión
Dado que ambas precisiones están por encima del 50%, este proyecto fue un éxito. Además, la representación HJPD parece ser la representación más precisa para usar en esta clasificación. Con esto, hay un/unos modelo(s) que predicen acciones humanas usando datos esqueléticos. Los modelos aquí están lejos de ser perfectos, pero son mejores que el azar. Este proyecto fue lo que dio origen más tarde al proyecto Moving Pose.
Notas adicionales:
- Este proyecto fue probado en la versión 3.8.13 de Python
- Para este proyecto, se utiliza el conjunto de datos completo MDA3 y un conjunto de datos MDA3 modificado. El MDA3 modificado solo contiene las actividades 8, 10, 12, 13, 15 y 16. Además, la versión modificada tiene algunos puntos de datos “corruptos” mientras que el conjunto de datos completo no los tiene.
- Representación espaciotemporal de personas basada en datos esqueléticos 3D: una revisión
- YouTube: Cómo funciona el sensor de profundidad Kinect en 2 minutos
- Medium: Comprender las articulaciones y el sistema de coordenadas de Kinect V2
- Página de Wikipedia de Kinect
- Jameco Xbox Kinect
- Información sobre SVM(s) y LibSVM: cjlin libsvm, página de libsvm en pypi, y libsvm github
- Lógica y documentación de SVM y LIBSVM: paper de guía de cjlin y conjuntos de datos de cjlin libsvmtools
- Información sobre el conjunto de datos utilizado/modificado