Прогнозування людських дій
Деталі
Цей проект був проектом #3 для курсу Людської Центрованої Робототехніки (CSCI473) професора Чжана в Колорадському університеті гірничих наук під час семестру весни 2020 року. Він був розроблений для надання вступу до машинного навчання в робототехніці через використання методів опорних векторів (SVM). Оригінальні результати проекту/опис можна переглянути тут.
Для цього проекту використовувався Набір даних MSR Daily Activity 3D (Рисунок 2) з деякими модифікаціями. Цей набір даних містить 16 людських дій, зібраних з датчика Xbox Kinetic і збережених у вигляді скелетів. Скелети - це масив реальних (x, y, z) координат 20 суглобів людини, зафіксованих в одному кадрі. Ось малюнок, який показує, що таке скелет:
Щоб досягти прогнозування людських дій, сирі дані повинні бути представлені у формі, яку може обробити SVM. Для цього проекту використовувалися такі представлення:
- Представлення відносних кутів і відстаней (RAD)
- Представлення гістограми різниць положень суглобів (HJPD)
Для класифікації представлення(я) надсилаються в SVM, підтримуваний LIBSVM, щоб створити модель, яка може прогнозувати людські дії. Буде створено дві моделі: одна з використанням RAD і інша з використанням HJPD. Мета полягає в тому, щоб зробити ці моделі якомога точнішими та подивитися, яке представлення працює найкраще.
Знаючи це, ось огляд того, що робить код:
- Завантажте сирі дані з модифікованого набору даних
- Видаліть будь-які викиди та/або помилкові дані з завантаженого набору даних
- Перетворіть остаточні сирі дані в представлення RAD і HJPD
- Представлення надсилаються в налаштовані SVM(и) для генерації двох моделей
- Обидві моделі потім отримують тестові сирі дані, і генерується матриця плутанини для вимірювання того, як модель(і) працювали.
Результати
Після виконання коду та налаштування моделей на максимум моїх можливостей, ось остаточна матриця плутанини для моделей RAD і HJPD:
Представлення: RAD
Точність: 62.5%
Класифікація LIBSVM 8.0 10.0 12.0 13.0 15.0 16.0
Фактичний номер дії
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
Представлення: HJPD
Точність: 70.83%
Класифікація LIBSVM 8.0 10.0 12.0 13.0 15.0 16.0
Фактичний номер дії
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, здається, є більш точною представленням для цього класифікацій. Таким чином, є модель(і), яка прогнозує людські дії, використовуючи дані скелета. Модель(і) тут далекі від досконалості, але вони кращі, ніж випадкові. Цей проект став основою для проекту Рухома Поза пізніше.
Додаткові примітки:
- Цей проект був протестований на версії 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 та набори даних libsvmtools cjlin
- Інформація про використаний/модифікований набір даних