Предсказание действий человека
Подробности
Этот проект был проектом №3 для курса доктора Чжана Human Centered Robotics (CSCI473) в Школе горного дела Колорадо в весеннем семестре 2020 года. Он был предназначен для того, чтобы дать введение в машинное обучение в робототехнике посредством использования метода опорных векторов (SVM). С исходным заданием/описанием проекта можно ознакомиться здесь.
Для этого проекта использовался MSR Daily Activity 3D Dataset (рисунок 2) с некоторыми изменениями. Этот набор данных содержит 16 человеческих действий, собранных с датчика Xbox Kinetic и сохранённых в виде скелетов. Скелеты — это массив координат реального мира (x, y, z) 20 суставов человека, записанных в одном кадре. Вот рисунок, показывающий, что такое скелет:
Для достижения предсказания действий человека сырые данные должны быть представлены в форме, которую можно обработать с помощью SVM. Для этого проекта использовались следующие представления:
- Представление относительных углов и расстояний (RAD)
- Представление гистограммы различий положений суставов (HJPD)
Для классификации представление(я) отправляется в SVM, работающий на базе LIBSVM, чтобы создать модель, которая может предсказывать действия человека. Будут созданы две модели: одна с использованием RAD, а другая — с использованием HJPD. Цель состоит в том, чтобы сделать эти модели как можно более точными и посмотреть, какое представление работает лучше.
Зная это, вот обзор того, что делает код:
- Загрузить сырые данные из изменённого набора данных
- Удалить любые выбросы и/или ошибочные данные из загруженного набора данных
- Преобразовать окончательные сырые данные в представления RAD и HJPD
- Представления отправляются в настроенные SVM для генерации двух моделей
- Затем эти две модели получают тестовые сырые данные, и генерируется матрица ошибок для измерения того, как хорошо модель(и) справилась.
Результаты
После запуска кода и настройки моделей насколько это было в моих силах, вот конечная матрица ошибок для обеих моделей RAD и 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
Заключение
Поскольку обе точности выше 50%, этот проект был успешным. Кроме того, представление HJPD, похоже, является более точным представлением для использования в этой классификации. Благодаря этому существует модель(и), которая предсказывает действия человека с использованием данных скелета. Модель(и) здесь далеки от идеала, но они лучше случайного угадывания. Именно этот проект позже дал начало проекту Moving Pose.
Дополнительные примечания:
- Этот проект был протестирован на версии Python 3.8.13
- Для этого проекта используются полный набор данных MDA3 и изменённый набор данных MDA3. Изменённый MDA3 содержит только действия 8, 10, 12, 13, 15 и 16. Кроме того, в изменённой версии есть некоторые «повреждённые» точки данных, а в полном наборе данных их нет.
- Пространственно-временное представление людей на основе 3D-скелетных данных: обзор
- YouTube: Как работает глубинный датчик Kinect за 2 минуты
- Medium: Понимание суставов Kinect V2 и системы координат
- Страница Wikipedia о Kinect
- Jameco Xbox Kinect
- Информация о SVM(ах) и LibSVM: cjlin libsvm, страница libsvm в PyPI, и libsvm github
- Логика и документация SVM и LIBSVM: статья-руководство cjlin и наборы данных cjlin libsvmtools
- Информация о использованном/изменённом наборе данных