4

Kinectを使ってPythonでジェスチャー認識をしたいです。

いくつかの理論を読んだ後、最善の方法の 1 つは、既知のジェスチャ データを使用した Hidden Markov Model (HMM) (baum welch または一部の EM メソッド) を使用した教師なし学習であり、訓練された HMM のセット (ジェスチャごとに 1 つ) を達成することだと思います。認識したい)。

次に、観測されたデータの最大対数尤度 (ビタビを使用) をトレーニング済みセットの HMM と一致させる認識を行います。

たとえば、データ (右手の座標 x、y、z) を kinect デバイスでいくつかのジェスチャー (挨拶、パンチを蹴る、手で円を描く) で記録して、いくつかのトレーニングを行います。

# training
known_datas = [
tuple( load_data('punch.mat'),                'PUNCH' ),
tuple( load_data('say_hello.mat'),            'HELLO' ), 
tuple( load_data('do_circle_with_hands.mat'), 'CIRCLE' )
]

gestures = set()
for x, name in known_datas:
    m = HMM()
    m.baumWelch(x)
    gestures.add(m)

次に、最大 loglik を実行して観測された新しいデータの認識を実行し、訓練された各 HMM の最大 loglik を持つ前に保存されたジェスチャを選択します。

# recognition
observed = load_data('new_data.mat')
logliks = [m.viterbi(observed) for m in gestures]

print 'observed data is ', gestures[logliks.index(max(logliks))]

私の質問は次のとおりです。

  • これはまったくばかげたことですか?
  • 実際のケースに設定されたトレーニングの数は?
  • 各 HMM の状態数は?
  • リアルタイムでそれを行うことは可能ですか?
4

2 に答える 2

2

まず第一に、これは非常に特別な質問です。ここでは機械学習の専門家が必要です。残念ながら、ここのスタック交換サイトにはまだ ML に相当するものはありません。いつか存在するかもしれません。:)

あなたのアプローチは有効だと思いますが、いくつかの発言があります:

  • ここHMMでインスタンス化するクラスHMM()は、HMM の構造がジェスチャと同様に表現できるように作成する必要があります。HMM には状態とそれらの間の遷移があります。では、ジェスチャの HMM をどのように定義しますか? 私はこれが可能であると確信しています (そしてそれは良いアプローチだとさえ思います) が、それには少し考える必要があります。状態は 3D 立方体の単なる角であり、認識されたジェスチャの観察ポイントごとに、この立方体の最も近い角を選択します。その後、BW アルゴリズムは、トレーニング データを通じて遷移の可能性を概算できます。ただし、より細かい状態モデル、おそらく n * n * n ボクセル グリッドを選択する必要がある場合があります。

  • ビタビ アルゴリズムは、モデルの尤度ではなく、特定のシーケンス観測値の状態の最も可能性の高いシーケンスを提供します。IIRC では、フォワード アルゴリズムを選択して、特定のモデルの特定の観測シーケンスの確率を取得します。

よく訓練されていて複雑すぎない HMM があれば、ジェスチャーをリアルタイムで認識できるはずですが、それは経験に基づいた推測にすぎません。:)

于 2011-12-13T14:43:59.797 に答える
1

http://scholar.google.co.il/scholar?hl=en&q=HMM+Gesture+Recognitionなど、多くのバリエーションで既に正常に適用されています。

備考:

于 2011-12-13T23:16:50.157 に答える