Predecir Acciones Humanas
Repositorio 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 de un sensor Xbox Kinect y almacenadas como esqueletos. Los esqueletos son una matriz 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 de Histograma de Diferencias de Posición de Articulaciones (HJPD)
Para la clasificación, la(s) representación(es) se envían 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 cuál 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
- Los dos modelos luego reciben datos brutos de prueba y se genera una matriz de confusión para medir cómo los modelos funcionaron.
Resultados
Después de ejecutar el código y ajustar los modelos al máximo de mi capacidad, aquí están las matrices de confusión finales para los 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 superan el 50%, este proyecto fue un éxito. Además, la representación HJPD parece ser la representación más precisa para usar en estas clasificaciones. Con esto, hay un modelo(s) que predice acciones humanas usando datos de esqueleto. Los modelos aquí están lejos de ser perfectos, pero son mejores que aleatorios. Este proyecto fue el que dio origen al proyecto Moving Pose más adelante.
Notas Adicionales:
- Este proyecto se probó con Python versión 3.8.13
- Para este proyecto, se utiliza el conjunto de datos MDA3 completo 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” que el conjunto de datos completo no tiene.
- Representación Espacio-Temporal de Personas Basada en Datos Esqueléticos 3D: Una Revisión
- YouTube: Cómo Funciona el Sensor de Profundidad Kinect en 2 Minutos
- Medium: Entendiendo 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 pypi de libsvm, y github de libsvm
- Lógica y Documentación de SVM y LIBSVM: artículo guía de cjlin y conjuntos de datos libsvmtools de cjlin
- Información Sobre el Conjunto de Datos Usado/Modificado