Pagtataya ng Mga Aksyon ng Tao
Detalye
Ang proyektong ito ay proyekto #3 para sa Human Centered Robotics (CSCI473) na klase ni Dr. Zhang sa Colorado School of Mines noong Spring 2020 na semestre. Ito ay idinisenyo upang magbigay ng isang panimula sa machine learning sa robotics sa pamamagitan ng paggamit ng Support Vector Machines (SVM). Ang orihinal na mga deliverable/deskripsyon ng proyekto ay makikita dito.
Para sa proyektong ito ginamit ang MSR Pang-araw-araw na Aktibidad 3D Dataset (Figure 2), na may ilang mga pagbabago. Ang dataset na ito ay naglalaman ng 16 na gawain ng tao na nakalap mula sa isang Xbox Kinetic sensor at nakaimbak bilang mga balangkas. Ang mga balangkas ay isang array ng totoong mundo, (x, y, z), mga koordinato ng 20 kasukasuan ng isang tao na naitala sa isang frame. Narito ang isang larawan na nagpapakita kung ano ang isang balangkas:
Upang makamit ang prediksyon ng aksyon ng tao, ang raw na datos ay dapat irepresenta sa isang anyo na maaaring iproseso ng isang SVM. Para sa proyektong ito, ginamit ang mga sumusunod na representasyon:
- Relatibong Mga Anggulo at Distansya (RAD) na representasyon
- Histogram ng Mga Pagkakaiba sa Posisyon ng Kasukasuan (HJPD) na representasyon
Para sa klasipikasyon, ang mga representasyon ay ipinapadala sa isang SVM, na pinapagana ng LIBSVM, upang lumikha ng isang modelo na maaaring humula ng mga aksyon ng tao. Dalawang mga modelo ang gagawin, isa gamit ang RAD at isa pa gamit ang HJPD. Ang layunin ay gawing kasing tumpak ng maaari ang mga modelong ito at tingnan kung alin sa mga representasyon ang pinakamabisa.
Batay dito, narito ang isang pangkalahatang-ideya ng ginagawa ng code:
- I-load ang raw na datos mula sa binagong dataset
- Alisin ang anumang outlier at/o error na datos mula sa na-load na dataset
- I-convert ang pinal na raw na datos sa mga representasyon ng RAD at HJPD
- Ang mga representasyon ay ipinapadala sa na-tune na SVM(s) upang makabuo ng dalawang modelo
- Ang dalawang modelo ay saka pinapakain ng test raw na datos at isang confusion matrix ang nabubuo upang sukatin kung paano nag-perform ang mga modelo
Resulta
Matapos patakbuhin ang code at i-tune ang mga modelo ayon sa aking makakaya, narito ang panghuling confusion matrix para sa parehong RAD at HJPD na mga modelo:
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 ang parehong mga accuracy ay higit sa 50%, matagumpay ang proyektong ito. Mukhang ang HJPD na representasyon ang mas tumpak na representasyon na gamitin para sa mga klasipikasyong ito. Sa pamamagitan nito, mayroong modelo/mga modelo na humuhula ng mga aksyon ng tao gamit ang datos ng balangkas. Ang mga modelong ito ay malayo pa sa perpekto ngunit mas maganda kaysa sa random. Ang proyektong ito ang naging dahilan ng pagsilang ng proyektong Moving Pose mamaya.
Karagdagang Tala:
- Ang proyektong ito ay sinubukan sa Python bersyon 3.8.13
- Para sa proyektong ito, ginamit ang kumpletong 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 na wala naman sa kumpletong dataset.
- Representasyon ng Panahon-Lugar ng Mga Tao Batay sa 3D Skeletal Data: Isang Review
- YouTube: Paano Gumagana ang Kinect Depth Sensor sa 2 Minuto
- Medium: Pag-unawa sa Kinect V2 Joints at Coordinate System
- Kinect - Pahina sa Wikipedia
- Jameco Xbox Kinect
- Impormasyon Tungkol sa SVM(s) at LibSVM: cjlin libsvm, libsvm pypi page, at libsvm github
- Lohetika at Dokumentasyon ng SVM & LIBSVM: cjlin guide paper at cjlin libsvmtools datasets
- Impormasyon Tungkol sa Dataset na Ginamit/Binago