Прогнозування дій людини

Подробиці
Цей проєкт був проєктом №3 для курсу Human Centered Robotics (CSCI473) доктора Чжана в Colorado School of Mines під час весняного семестру 2020 року. Він був розроблений, щоб надати вступ до машинного навчання в робототехніці за допомогою використання методів опорних векторних машин (SVM). Оригінальні результати/опис проєкту можна переглянути тут.

Для цього проєкту був використаний MSR Daily Activity 3D Dataset (Рисунок 2) з деякими модифікаціями. Цей набір даних містить 16 людських дій, зібраних за допомогою датчика Xbox Kinect і збережених у вигляді скелетів. Скелети — це масив реальних (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 та системи координат
- Сторінка Kinect у Wikipedia
- Jameco Xbox Kinect
- Інформація про SVM та LibSVM: cjlin libsvm, libsvm pypi page, & libsvm github
- Логіка та документація SVM та LIBSVM: cjlin guide paper & cjlin libsvmtools datasets
- Інформація про використаний/модифікований набір даних