Создание HMM для распознавания жестов на основе Kinect

У меня концептуальная проблема. Я создаю программу, которая использует Kinect для распознавания жестов. У меня есть некоторые данные о жестах, разделенные на категории (круги, свайпы и т. д.). Пока анализирую только одну руку. Записываю все кадры (30fps).

(*) Чтобы сделать мои данные дискретными и независимыми от положения, я вычисляю углы между последовательными точками.

Теперь я хочу создать hidden Markov models для каждого типа жестов.

Теперь мне нужно определить количество состояний для моего HMM. Как это сделать? Думал найти самый длинный жест (по времени). Например. У меня 3 жеста, первый 1,2s, второй 1,4s и третий 1,5s. Так что 1,5s самый длинный. Теперь я хочу применять (*) для каждого кадра каждые 250 миллисекунд (4 выборки в секунду). Потому что мой самый длинный жест - 1,5s, поэтому NumberOfStatesForHMM = 1500ms / 250ms = 6 states - и это должно быть довольно оптимально?

Я не уверен, как мне определить состояния для HMM:/ Если моя идея выше верна, как подсчитать вероятности перехода, когда есть (например) 6 состояний и один жест заканчивается после 1s, поэтому я анализирую 4 состояния (вероятности переходов из состояний с 4 по 5 и с 5 по 6 равны 0?).

Я прочитал ЭТУ статью, но не совсем как решить мою проблему...


person Nickon    schedule 14.04.2013    source источник


Ответы (1)


Я работал над аналогичным проектом динамического распознавания жестов рук (хотя использовал более простую веб-камеру, а не Kinect). В моем случае я разделил свои жесты на классы, скажем, влево, вправо, по кругу по часовой стрелке, по кругу против часовой стрелки... и т. д. Поскольку вы будете учитывать углы между последовательными точками, это будет ваша последовательность наблюдений. Что касается состояний, то не всегда может быть логическая связь между вашими состояниями и наблюдением. Я работал с 8 жестами. Теперь у меня было около 12 символов наблюдения для каждого входного шаблона, но нет. состояний для каждого класса было разным. Например: Слева: 2 состояния Справа: 3 состояния Обведите по часовой стрелке: 4 состояния и т. д.

Преимущество заключалось в том, что из вывода последовательности состояний, которое я получил от алгоритма Витерби, я мог напрямую получить максимальный номер состояния и, следовательно, свой класс. Кроме того, на этапе обучения моя реализация Баума-Уэлча автоматически изучала классы в зависимости от номера. государств. Вы можете обратиться к моему сообщению в блоге [в котором есть описание моего подхода к распознаванию жестов с использованием HMM, как я делал в своем проекте] для получения дополнительной информации. Я надеюсь, что это поможет вам.

Вот ссылка

person Darth Coder    schedule 22.04.2013
comment
Спасибо за Ваш ответ. Я думал об изменении количества состояний независимо для каждого HMM, потому что, например. У меня есть около 15-20 наблюдений для моих волновых жестов, но только 5-8 для моих свайпов. Итак, если бы мне пришлось выбрать максимум 4 состояния, потому что, когда я хочу инициализировать свою A (матрицу переходов) для модели LR, я подсчитываю вероятности, используя формулу a_ii = 1 - N/T, где N — количество состояний, а T — длина жеста (поэтому, когда я выберите большое значение N, я получаю вероятность меньше 0 для диагоналей и больше 1 для диагоналей + 1. - person Nickon; 22.04.2013
comment
Я реализовал Forward-Backward Baum-Welch Learning для оценки матриц и начального вектора. Вроде плохо работает. Я получаю 0 вероятности для совершенно плохих случаев для указанного HMM (так и должно быть), но когда я изучаю свой HMM с 3 образцами, а затем использую один образец для оценки вероятности, я получаю вероятность, например, 3e-5. И это должно быть около ~ 1. Я что-то делаю не так, может где-то ошибка или мне нужно больше данных для обучения. Мне нужно проверить это опытным путем. - person Nickon; 22.04.2013
comment
Кстати. Я сейчас на работе, так что вашу статью я посмотрю позже, а пока вижу, что она действительно четко описана :) Ппл в своих статьях пишут такие вещи, что над этим нужно подумать полдня. Распознавание жестов должно быть приятным, а не войной с математикой... - person Nickon; 22.04.2013
comment
Я полностью согласен с вами, Никон, что исследовательские работы громоздки для понимания (даже классические статьи Рабинера ;)). Если у вас меньше символов для ваших свайпов, могу ли я предложить повторить каждый символ по крайней мере дважды, доведя общее количество до 10-16. В моем случае это сработало [у моих линейных жестов было гораздо меньше наблюдений, чем у изогнутых]. Что касается ваших тестовых данных, я рекомендую получить как можно больше образцов. Попробуйте выполнить каждый жест десятки раз и изучить этот набор данных. HMM чудесным образом работает с большими наборами данных. - person Darth Coder; 22.04.2013
comment
У меня есть вопрос, не могли бы вы написать мне в личку на [email protected]? - person Nickon; 25.04.2013
comment
Меня интересует идея, как реализовать ЖИВОЕ распознавание жестов. Не могли бы вы помочь мне? - person Nickon; 26.04.2013
comment
я уверен, что я могу попробовать из любых знаний, которые у меня есть. В чем именно вам нужна помощь? - person Darth Coder; 27.04.2013