Prédire les actions humaines

Détails
Ce projet était le projet n°3 pour le cours Human Centered Robotics (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 grâce à l’utilisation de machines à vecteurs de support (SVM). Les livrables / la description du projet original peuvent être consultés ici.

Pour ce projet, le MSR Daily Activity 3D Dataset (Figure 2), avec quelques modifications, a été utilisé. Ce jeu de données contient 16 activités humaines recueillies à partir d’un capteur Xbox Kinect 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 dans une seule image. Voici une figure qui montre ce qu’est un squelette :

Pour réaliser la prédiction d’actions humaines, les données brutes doivent être représentées sous une forme pouvant être traitée par un SVM. Pour ce projet, les représentations suivantes ont été utilisées :
- Représentation des angles et distances relatifs (RAD)
- Histogramme des différences de position des articulations (HJPD)
Pour la classification, la/les représentation(s) est/sont envoyée(s) dans un SVM, alimenté 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 le RAD et l’autre le HJPD. L’objectif est de rendre ces modèles aussi précis que possible et de voir quelle représentation donne les meilleurs résultats.
En sachant cela, voici un aperçu de ce que fait le code :
- Charger les données brutes 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 dans des SVM ajustés 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 la performance du/des modèle(s).
Résultats
Après avoir exécuté le code et ajusté les modèles au mieux de mes capacités, voici les matrices de confusion finales 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
Étant donné que les deux précisions dépassent 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 ces classifications. Ainsi, il existe un ou des modèles qui prédisent les actions humaines à partir de données de squelette. Les modèles présentés ici sont loin d’être parfaits mais ils sont meilleurs que le hasard. Ce projet est à l’origine du projet Moving Pose qui a suivi.
Notes supplémentaires :
- Ce projet a été testé avec Python version 3.8.13
- Pour ce projet, le jeu de données complet MDA3 et un jeu 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 comporte certains points de données « corrompus » alors que le jeu de données complet n’en possède pas.
- Représentation spatio‑temporelle des personnes basée sur des données squelettiques 3D : un examen
- 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 Wikipédia de Kinect
- Jameco Xbox Kinect
- Informations sur les SVM et LibSVM : cjlin libsvm, page pypi libsvm, et libsvm github
- Logique et documentation SVM & LIBSVM : cjlin guide paper et cjlin libsvmtools datasets
- Informations sur le jeu de données utilisé/modifié