Paghuhula ng mga Gawaing Pantao
Mga Detalye
Ang proyektong ito ay proyekto #3 para sa klase ni Dr. Zhang na Human Centered Robotics (CSCI473) sa Colorado School of Mines noong semestre ng Spring 2020. Ito ay idinisenyo upang magbigay ng panimula sa machine learning sa robotics sa pamamagitan ng paggamit ng Support Vector Machines (SVM). Ang orihinal na mga deliverable/paglalarawan ng proyekto ay maaaring tingnan dito.
Para sa proyektong ito, ginamit ang MSR Daily Activity 3D Dataset (Larawan 2), na may ilang pagbabago. Ang dataset na ito ay naglalaman ng 16 na gawaing pantao na nakalap mula sa isang Xbox Kinetic sensor at nakaimbak bilang mga kalansay. Ang mga kalansay ay isang array ng mga totoong koordinadang mundo na (x, y, z) ng 20 kasu-kasuan ng isang tao na naitala sa isang frame. Narito ang isang pigura na nagpapakita kung ano ang isang kalansay:
Upang makamit ang paghuhula ng pagkilos ng tao, ang hilaw na datos ay dapat katawanin sa isang anyo na maaaring iproseso ng isang SVM. Para sa proyektong ito, ginamit ang mga sumusunod na representasyon:
- Representasyong Relative Angles and Distances (RAD)
- Representasyong Histogram of Joint Position Differences (HJPD)
Para sa klasipikasyon, ang representasyon(s) ay ipinapadala sa isang SVM, na pinapagana ng LIBSVM, upang lumikha ng isang modelo na maaaring humula ng mga gawaing pantao. Dalawang modelo ang lilikhain, isa gamit ang RAD at isa pa gamit ang HJPD. Ang layunin ay gawing kasing-eksakto hangga’t maaari ang mga modelong ito at tingnan kung aling representasyon ang pinakamahusay na gumaganap.
Dahil dito, narito ang isang pangkalahatang-ideya ng ginagawa ng code:
- I-load ang hilaw na datos mula sa binagong dataset
- Alisin ang anumang outlier at/o error na datos mula sa na-load na dataset
- I-convert ang huling hilaw na datos tungo sa mga representasyong RAD at HJPD
- Ipinapadala ang mga representasyon sa mga naka-tune na SVM upang makabuo ng dalawang modelo
- Pagkatapos ay pinapakain sa dalawang modelo ang test raw data at isang confusion matrix ang nililikha upang sukatin kung paano gumanap ang (mga) modelo.
Mga Resulta
Pagkatapos patakbuhin ang code at i-tune ang mga modelo sa abot ng aking makakaya, narito ang huling confusion matrix para sa parehong mga modelo ng RAD at 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
Konklusyon
Dahil parehong lampas 50% ang mga accuracy, naging matagumpay ang proyektong ito. Gayundin, ang representasyong HJPD ay tila ang mas tumpak na representasyong gamitin para sa klasipikasyong ito. Dahil dito, mayroong (mga) modelo na naghuhula ng mga gawaing pantao gamit ang datos ng kalansay. Ang (mga) modelo rito ay malayo sa perpekto ngunit mas mabuti ito kaysa sa random. Ang proyektong ito ang nagbigay-daan sa proyektong Moving Pose sa bandang huli.
Mga Karagdagang Tala:
- Ang proyektong ito ay nasubukan sa Python bersyon 3.8.13
- Para sa proyektong ito, ginagamit ang kompletong MDA3 dataset at isang binagong MDA3 dataset. Ang binagong MDA3 ay naglalaman lamang ng mga aktibidad 8, 10, 12, 13, 15, at 16. Gayundin, ang binagong bersyon ay may ilang “corrupted” na mga punto ng datos samantalang ang kompletong dataset ay wala.
- Space-Time Representation of People Based on 3D Skeletal Data: A Review
- YouTube: How the Kinect Depth Sensor Works in 2 Minutes
- Medium: Pag-unawa sa Kinect V2 Joints at Coordinate System
- Pahina ng Wikipedia ng Kinect
- Jameco Xbox Kinect
- Impormasyon Tungkol sa (mga) SVM at LibSVM: cjlin libsvm, pahina ng libsvm sa pypi, at libsvm github
- Lohika at Dokumentasyon ng SVM at LIBSVM: cjlin guide paper at cjlin libsvmtools datasets
- Impormasyon Tungkol sa Dataset na Ginamit/Binago