Przewidywanie ludzkich działań
Szczegóły
Ten projekt był projektem nr 3 na zajęciach dr. Zhanga Human Centered Robotics (CSCI473) w Colorado School of Mines podczas semestru wiosennego 2020. Został zaprojektowany, aby zapewnić wprowadzenie do uczenia maszynowego w robotyce poprzez wykorzystanie maszyn wektorów nośnych (SVM). Oryginalne materiały projektu/opis można zobaczyć tutaj.
Do tego projektu użyto MSR Daily Activity 3D Dataset (Rysunek 2), z pewnymi modyfikacjami. Zestaw danych zawiera 16 ludzkich aktywności zebranych z czujnika Xbox Kinetic i zapisanych jako szkielety. Szkielety to tablica rzeczywistych współrzędnych (x, y, z) 20 stawów człowieka zarejestrowanych w jednej klatce. Oto rysunek pokazujący, czym jest szkielet:
Aby uzyskać przewidywanie ludzkich działań, surowe dane muszą zostać przedstawione w formie, którą może przetworzyć SVM. W tym projekcie użyto następujących reprezentacji:
- Reprezentacja względnych kątów i odległości (RAD)
- Reprezentacja histogramu różnic położeń stawów (HJPD)
Do klasyfikacji reprezentacja(y) jest wysyłana do SVM, obsługiwanego przez LIBSVM, aby utworzyć model, który może przewidywać ludzkie działania. Zostaną utworzone dwa modele, jeden z użyciem RAD, a drugi z użyciem HJPD. Celem jest uczynienie tych modeli jak najdokładniejszymi i sprawdzenie, która reprezentacja działa najlepiej.
Mając to na uwadze, oto przegląd tego, co robi kod:
- Wczytuje surowe dane z zmodyfikowanego zestawu danych
- Usuwa wszelkie dane odstające i/lub błędne z wczytanego zestawu danych
- Konwertuje końcowe surowe dane do reprezentacji RAD i HJPD
- Reprezentacje są wysyłane do dostrojonych SVM-ów, aby wygenerować dwa modele
- Następnie dwa modele są zasilane testowymi surowymi danymi, a macierz pomyłek jest generowana w celu zmierzenia, jak model(e) się sprawdziły.
Wyniki
Po uruchomieniu kodu i dostrojeniu modeli najlepiej, jak potrafiłem, oto końcowe macierze pomyłek dla obu modeli RAD i 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
Wnioski
Ponieważ obie dokładności są powyżej 50%, projekt zakończył się sukcesem. Również reprezentacja HJPD wydaje się być dokładniejszą reprezentacją do użycia w tej klasyfikacji. Dzięki temu istnieje model(e), który przewiduje ludzkie działania z użyciem danych szkieletowych. Modele tutaj są dalekie od doskonałości, ale są lepsze niż losowe. To właśnie ten projekt dał początek projektowi Moving Pose później.
Dodatkowe uwagi:
- Ten projekt był testowany na wersji Pythona 3.8.13
- Do tego projektu użyto kompletnego zestawu danych MDA3 oraz zmodyfikowanego zestawu danych MDA3. Zmodyfikowany MDA3 zawiera tylko aktywności 8, 10, 12, 13, 15 i 16. Ponadto zmodyfikowana wersja zawiera kilka „uszkodzonych” punktów danych, podczas gdy kompletny zestaw danych ich nie zawiera.
- Reprezentacja czasoprzestrzenna ludzi oparta na danych szkieletowych 3D: przegląd
- YouTube: Jak działa czujnik głębi Kinect w 2 minuty
- Medium: Zrozumienie stawów Kinect V2 i układu współrzędnych
- Strona Wikipedii o Kinect
- Jameco Xbox Kinect
- Informacje o SVM-ach i LibSVM: cjlin libsvm, strona libsvm na pypi, i repozytorium libsvm na githubie
- Logika i dokumentacja SVM oraz LIBSVM: artykuł przewodnika cjlin i zbiory danych cjlin libsvmtools
- Informacje o używanym/modyfikowanym zbiorze danych