Predizione delle Azioni Umane
Repository GitHub del progetto
Dettagli
Questo progetto è stato il progetto n. 3 per la classe Human Centered Robotics (CSCI473) del Dr. Zhang alla Colorado School of Mines durante il semestre primaverile 2020. È stato progettato per fornire un’introduzione al machine learning in robotica tramite l’uso di Support Vector Machines (SVM). I deliverable/descrizione originali del progetto possono essere consultati qui.
Per questo progetto è stato utilizzato, con alcune modifiche, il Dataset MSR Daily Activity 3D (Figura 2). Questo dataset contiene 16 attività umane raccolte da un sensore Xbox Kinetic e memorizzate come scheletri. Gli scheletri sono un array di coordinate reali (x, y, z) di 20 giunti di un umano registrati in un singolo frame. Qui c’è una figura che mostra cos’è uno scheletro:
Per ottenere la previsione delle azioni umane, i dati grezzi devono essere rappresentati in una forma che possa essere elaborata da una SVM. Per questo progetto, sono state utilizzate le seguenti rappresentazioni:
- Rappresentazione Angoli Relativi e Distanze (RAD)
- Rappresentazione Istogramma delle Differenze di Posizione delle Articolazioni (HJPD)
Per la classificazione, la/le rappresentazione/i viene/no inviato/e a una SVM, alimentata da LIBSVM, per creare un modello che possa prevedere le azioni umane. Saranno creati due modelli, uno usando RAD e un altro usando HJPD. L’obiettivo è rendere questi modelli il più accurati possibile e vedere quale rappresentazione si comporta meglio.
Detto ciò, ecco una panoramica di ciò che fa il codice:
- Caricare i dati grezzi dal dataset modificato
- Rimuovere eventuali outlier e/o dati errati dal dataset caricato
- Convertire i dati grezzi finali nelle rappresentazioni RAD e HJPD
- Le rappresentazioni vengono inviate a SVM sintonizzate per generare due modelli
- I due modelli vengono quindi alimentati con dati grezzi di test e viene generata una matrice di confusione per misurare le prestazioni del/i modello/i.
Risultati
Dopo aver eseguito il codice e ottimizzato i modelli al meglio delle mie capacità, ecco le matrici di confusione finali per entrambi i modelli RAD e 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
Conclusione
Poiché entrambe le accuratezze sono superiori al 50%, questo progetto è stato un successo. Inoltre, la rappresentazione HJPD sembra essere la rappresentazione più accurata da usare per queste classificazioni. Con questo, esiste/no modello/i che predicono le azioni umane usando i dati scheletrici. I modello/i qui sono lontani dall’essere perfetti ma sono meglio del caso casuale. Questo progetto è stato ciò che ha dato origine al progetto Moving Pose successivamente.
Note aggiuntive:
- Questo progetto è stato testato con Python versione 3.8.13
- Per questo progetto viene utilizzato il dataset MDA3 completo e un dataset MDA3 modificato. Il MDA3 modificato contiene solo le attività 8, 10, 12, 13, 15 e 16. Inoltre la versione modificata ha alcuni punti dati “corrotti” mentre il dataset completo non li ha.
- Rappresentazione Spazio-Temporale delle Persone Basata su Dati Scheletrici 3D: Una Revisione
- YouTube: Come funziona il sensore di profondità Kinect in 2 minuti
- Medium: Comprendere le articolazioni Kinect V2 e il sistema di coordinate
- Pagina Wikipedia di Kinect
- Jameco Xbox Kinect
- Informazioni su SVM e LibSVM: cjlin libsvm, pagina pypi di libsvm, e github di libsvm
- Logica e documentazione di SVM e LIBSVM: documento guida di cjlin e dataset libsvmtools di cjlin
- Informazioni sul dataset utilizzato/modificato