1

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

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

Теперь я хочу создать 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?).

Я читал THIS бумагу, но я не совсем уверен, как решить мою проблему ...

ответ

1

Я работал над аналогичным проектом динамического распознавания жест рукой (хотя с помощью простой веб-камера, а не Kinect) , В моем случае я классифицировал свои жесты в классы, скажем: «Влево», «Вправо», «Циркуляр-По часовой стрелке», «Циркуляр-Анти-По часовой стрелке» и т. Д. Поскольку вы будете учитывать углы между последовательными точками, это будет ваша последовательность наблюдений. Что касается состояний, то не всегда может быть логическая связь между вашими государствами и наблюдением. Я работал с 8 жестами. Теперь у меня было около 12 символов наблюдения для каждого шаблона ввода, но нет. состояний для каждого класса были разными. Например: Left: 2 Государства Справа: 3 Штаты круга по часовой стрелка:. 4 Государства и т.д.

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

Here is the Link

+0

Спасибо за ваш ответ. Я думал об изменении количества состояний независимо для каждого HMM, потому что, например, У меня примерно 15-20 наблюдений за моими волнами, но только 5-8 для моих Swipes. Поэтому, если мне нужно было выбрать max 4 состояния, потому что когда я хочу инициализировать мою матрицу A (матрица переходов) для модели LR, я рассчитываю вероятности с помощью формулы 'a_ii = 1 - N/T', где' N' - число состояний и 'T' - длина жестов (поэтому, когда я выбираю большое значение« N », я получаю вероятность меньше 0 для диагоналей и более 1 для диагоналей + 1. – Nickon

+0

Я внедрил« Forward-Backward Baum-Welch » Изучение' для оценки матриц и начального вектора. Кажется, это работает плохо. Я получаю вероятность 0 для абсолютно плохих случаев для указанного HMM (это должно быть так), но когда я изучаю HMM с 3 образцами, а затем я использую один образец для Оцените вероятность, я получаю вероятность, как 3e-5. И это должно быть примерно ~ 1. Я делаю что-то неправильно, возможно, где-то есть ошибка или мне нужно больше данных для обучения. Мне нужно проверить его эмпирически. – Nickon

+0

КПП.Сейчас я нахожусь на работе, поэтому я посмотрю вашу статью позже, но теперь я вижу, что это действительно ясно описано. Ppl в своих газетах пишут такие вещи, о которых вам нужно подумать полдня. Признание жеста должно быть приятным, а не войной с математикой ... – Nickon