Prédire les actions humaines
Détails
Ce projet était le projet n°3 du cours de Robotique centrée sur l’humain (CSCI473) du Dr. Zhang à la Colorado School of Mines pendant le semestre de printemps 2020. Il a été conçu pour fournir une introduction à l’apprentissage automatique en robotique à travers l’utilisation des machines à vecteurs de support (SVM). Les livrables/description du projet original peuvent être consultés ici.
Pour ce projet, le jeu de données MSR Daily Activity 3D (Figure 2), avec quelques modifications, a été utilisé. Ce jeu de données contient 16 activités humaines recueillies à partir d’un capteur Xbox Kinetic et stockées sous forme de squelettes. Les squelettes sont un tableau de coordonnées du monde réel, (x, y, z), de 20 articulations d’un humain enregistrées en une seule image. Voici une figure qui montre ce qu’est un squelette :
Pour parvenir à la prédiction des actions humaines, les données brutes doivent être représentées sous une forme pouvant être traitée par une SVM. Pour ce projet, les représentations suivantes ont été utilisées :
- Représentation des angles relatifs et des distances (RAD)
- Représentation de l’histogramme des différences de position des articulations (HJPD)
Pour la classification, la ou les représentations sont envoyées dans une SVM, alimentée par LIBSVM, afin de créer un modèle capable de prédire les actions humaines. Deux modèles seront créés, l’un utilisant RAD et l’autre HJPD. L’objectif est de rendre ces modèles aussi précis que possible et de voir quelle représentation est la plus performante.
Sachant cela, voici un aperçu de ce que fait le code :
- Charger les données brutes à partir du jeu de données modifié
- Supprimer toute donnée aberrante et/ou erronée du jeu de données chargé
- Convertir les données brutes finales en représentations RAD et HJPD
- Les représentations sont envoyées à des SVM ajustées pour générer deux modèles
- Les deux modèles sont ensuite alimentés avec des données brutes de test et une matrice de confusion est générée pour mesurer les performances du ou des modèles.
Résultats
Après avoir exécuté le code et ajusté les modèles du mieux possible, voici la matrice de confusion finale pour les modèles RAD et 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
Conclusion
Comme les deux précisions sont supérieures à 50 %, ce projet a été un succès. De plus, la représentation HJPD semble être la représentation la plus précise à utiliser pour cette classification. Avec cela, il existe un ou des modèles qui prédisent les actions humaines à l’aide de données squelettiques. Le ou les modèles ici sont loin d’être parfaits, mais ils sont meilleurs que le hasard. C’est ce projet qui a donné naissance plus tard au projet Moving Pose.
Notes supplémentaires :
- Ce projet a été testé avec la version 3.8.13 de Python
- Pour ce projet, l’ensemble de données complet MDA3 et un ensemble de données MDA3 modifié sont utilisés. Le MDA3 modifié ne contient que les activités 8, 10, 12, 13, 15 et 16. De plus, la version modifiée contient certains points de données « corrompus », alors que l’ensemble de données complet n’en contient pas.
- Représentation spatio-temporelle des personnes basée sur des données squelettiques 3D : une revue
- YouTube : comment le capteur de profondeur Kinect fonctionne en 2 minutes
- Medium : comprendre les articulations Kinect V2 et le système de coordonnées
- Page Wikipedia de Kinect
- Jameco Xbox Kinect
- Informations sur les SVM et LibSVM : cjlin libsvm, page pypi libsvm, et libsvm github
- Logique et documentation SVM et LIBSVM : document guide cjlin et jeux de données libsvmtools cjlin
- Informations sur le jeu de données utilisé/modifié