关于HMM模型:时序分析:隐马尔科夫模型

HMM用于手势识别: 训练时每一种手势对应一个HMM-Model,识别率取最大的一个HMM即可。  类似于一个封装的完成多类识别器功能单层网络。

优点: 尤其适用于时间序列的建模,对复杂度高的动作也具有较高的识别精度,易于添加和修改手势库。

缺点:训练的难度大(需要多的样本来完成图的优化)。

以下引自于一篇论文:基于马尔可夫模型的手势识别算法。修改为了与我自己的项目相关的东西。

引言:

基于隐马尔可夫模型的动态手势识别一般是应用手势的时间特性进行识别。单一的手势可被认为是不同手形序列组成的,多个手势可由手形及其运动轨迹加以区分。可同时

应用手形及其运动轨迹两大特征进行手势识别(把静态手型作为特征向量的一个维度),在轮廓跟踪过程中,获得当前的手部轮廓,获取多自由度(六自由度(欧式位置x,y,x和欧式位姿alpha,beta,theta) + 一个静态手势码)的手势的运动轨迹,这样就可从图像序列中得到动态手势的特征向量,即观察值序列,记作Ol , l = 1,..., L,其中L为序列总数。

HMM的特征向量:

获取手势的观察值序列:

手势轨迹的基本特征是六自由度(位置、方位角)。由于同一个用户,手势速率的变化也是比较大的,因此,本文采用六自由度(位置和角度)相结合的方法获取运动轨迹。通过基于卡尔曼滤波器[2]与自适应形状模型的轮廓跟踪算法[3],我们可得滤波器最优估计值:

Xk =  (Xc^t, Yc^t, Zc^t,Xc ^t - Xc ^(t-1), Yc^t-Yc^(t-1) ,Zc^t- Zc^(t-1)   ) ^T          (2)

其中(Xc^t, Yc^t, Zc^t )为t 时刻的位置坐标,( Xc ^(t-1), Yc^(t-1) ,Zc^(t-1)   )为t −1时刻的轮廓质点,由此可得手势轨迹的角度,如图2(a)所示。

根据所得ϕ^t ,我们采用12 方向链码进行离散化,如图2(b)所示[4]。

(图错了,懒得修改!)

在手势跟踪过程中,跟踪器根据上述方法按固定时间间隔(有些问题)从图像序列中提取手势的特征向量,可得到手势的特征观察值序列Ol , l = 1,..., L。

HMM模型训练:

在获取手势的特征观察值序列后,则可对HMM 模型进行训练。首先要对HMM模型λ = (A, B,π )初始化,由于我们采用左右结构的离散HMM 模型,因此我们设定状态i 只能返回到本身或转移到i +1状态,状态转移矩阵A可初始化为[4]:

对于初始概率分布,设定:

                           π1 =1,

                           πi =0( i ≠ 1);

即假设HMM 是从第一个状态开始的。对于观察概率矩阵B, 设



       初始模型确定以后,利用前后向递推法计算观察值序列O在这个模型下的P(O/λ );      然后利用 Baum-Welch 算法对初始 HMM 模型λ = (A, B,π )进行重新计算,HMM 的各个参数在这一过程得到重新估计,即求得新的HMM 模型λˆ = (Aˆ, Bˆ,πˆ);       再利用 Viterbi 算法计算出观察序列O在这个模型下的P(O/λˆ)。

为了估计出最接近观察值序列O的HMM模型,我们设定阈值ε ,当 P(O /λˆ) − P(O /λ ) <ε 时即得到训练出的HMM模型;否则令 λ =λˆ。重复此步骤,直到P(O/λ )收敛,得到最接近观察值的HMM 模型。

基于HMM的识别过程:

基于HMM 模型进行手势识别研究,大多采用计算某测试样本与参考模型集的似然度,通过判断最大值以确定测试样本的类别[5]。基于这一原理,采用HMM 实现动态手势识别,HMM的输入为跟踪器提取的特征观察值序列Ol , l = 1,..., L。图像序列中手势识别过程可归纳为(流程图如图3
所示):

(1)检测手部位置初始化跟踪器,跟踪算法如文献[2]所述。

     (2)在执行手势的图像序列中提取手部轮廓并按固定时间间隔获得手形与手势运动轨迹两类特征向量。

     (3)由(2)可得特征观察值序列o l,将其作为训练所得HMM 模型的输入值,并应用前后向递推算法求其似然值,判断出最大可能手势。

参考文献:

[1]段洪伟. 基于视觉的手势识别及其应用 [D]. 上海:上海大学,2004

[2]NUMMIARO K,KOLLER-MEIER E,VAN GOOLL. An adaptive color-based particle filter [J]. Image and VisionComputing,2002,21(1):99-110

[3]齐苏敏,黄贤武,孟静. 基于自适应活动轮廓模型的实时手势跟踪 [J]. 计算机科学,2006,33(11):192-194.

[4]孔晓明. 人机交互系统中动态手势识别的研究 [D].上海:上海大学,2005

[5]FREEMAN W,WEISSMAN C. Television control by hand gestures [C]. Proc IEEE Int'I Conf. on Automated Face and Gesture Recognition (FG'95),1995:179-183

[6]RAMAMOORTHY A , VASWANI N , etl.all.Recognition of dynamic hand gestures [J]. Pattern Recognition,36(9):2069-2081

时序分析:HMM模型(状态空间)的更多相关文章

  1. HMM模型

    通过前几时断续的学习,发现自己对HMM模型的了解还只停留在皮毛,导致在学习CRF模型并将其与最大熵模型.HMM.MEMM做比较时感觉很吃力,所以又花了两天时间使劲看了遍HMM,发现了解得确实深刻了很多 ...

  2. 应用HTK搭建语音拨号系统3:创建绑定状态的三音素HMM模型

    选自:http://maotong.blog.hexun.com/6261873_d.html 苏统华 哈尔滨工业大学人工智能研究室 2006年10月30日 声明:版权所有,转载请注明作者和来源 该系 ...

  3. 应用HTK搭建语音拨号系统2:创建单音素HMM模型

    选自:http://maotong.blog.hexun.com/6204849_d.html 苏统华 哈尔滨工业大学人工智能研究室 2006年10月30日 声明:版权所有,转载请注明作者和来源 该系 ...

  4. 隐马尔科夫模型HMM(一)HMM模型

    隐马尔科夫模型HMM(一)HMM模型基础 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数(TODO) 隐马尔科夫模型HMM(四)维特比 ...

  5. HMM模型学习笔记(前向算法实例)

    HMM算法想必大家已经听说了好多次了,完全看公式一头雾水.但是HMM的基本理论其实很简单.因为HMM是马尔科夫链中的一种,只是它的状态不能直接被观察到,但是可以通过观察向量间接的反映出来,即每一个观察 ...

  6. 数学之美——HMM模型(二)解码和Forward算法

    上一篇讨论了HMM的基本概念和一些性质,HMM在现实中还是比较常见的,因此也带来一了一系列的HMM应用问题.HMM应用主要面向三个方面:预测.解码和学习.这篇主要讨论预测. 简单来说,预测就是给定HM ...

  7. 数学之美——HMM模型(一)介绍

    一直想写点关于数学方面的blog,这对于数据挖掘分析,NLP处理等都有着比较重要的作用,之前在CSDN上想写点HMM方面的文章,一直没写成,最近几天终于抽点时间完成了HMM的文章,加以整理,遂有这个系 ...

  8. HMM 模型输入数据处理的优雅做法 来自实际项目

    实际项目我是这样做的: def mining_ue_procedures_behavior(seq, lengths, imsi_list): print("seq 3:", se ...

  9. HMM模型学习笔记(维特比算法)

    维特比算法(Viterbi) 维特比算法  编辑 维特比算法是一种动态规划算法用于寻找最有可能产生观测事件序列的-维特比路径-隐含状态序列,特别是在马尔可夫信息源上下文和隐马尔可夫模型中.术语“维特比 ...

随机推荐

  1. SqlServer转换为Mysql(mss2sql)

    SqlServer转换为Mysql(mss2sql)工具 http://pan.baidu.com/s/1c2d8R8O 参考链接: http://www.cnblogs.com/angestudy/ ...

  2. ZOJ 3199 Longest Repeated Substring

    Longest Repeated Substring Time Limit: 5000ms Memory Limit: 32768KB This problem will be judged on Z ...

  3. Android 开发 ContentProvider 获取歌曲列表和联系人的样例

    ContentProvider(内容提供者)是Android中的四大组件之中的一个. 主要用于对外共享数据.也就是通过ContentProvider把应用中的数据共享给其它应用訪问.其它应用能够通过C ...

  4. 正则表达式,字符串中需要两个反斜杠“\\d”

    这个正则表达式为什么会有两个反斜杠? "^.*?\\.(jpg|png|bmp|gif)$"上面这个正则表达式为什么有两个反斜杠呢?反斜杠点\.就能表示点.了,为什么还要在\.前面 ...

  5. LeetCode60:Permutation Sequence

    The set [1,2,3,-,n] contains a total of n! unique permutations. By listing and labeling all of the p ...

  6. Android TextView 设置行间距

    Android系统中TextView默认显示中文时会比较紧凑,不是很美观.为了让每行保持一定的行间距,可以设置属性android:lineSpacingExtra或android:lineSpacin ...

  7. Codeforces 2018-2019 ICPC, NEERC, Southern Subregional Contest

    2018-2019 ICPC, NEERC, Southern Subregional Contest 闲谈: 被操哥和男神带飞的一场ACM,第一把做了这么多题,荣幸成为7题队,虽然比赛的时候频频出锅 ...

  8. Google Deepmind AI tries it hand at creating Hearthstone and Magic: The Gathering cards

    http://www.techrepublic.com/article/google-deepmind-ai-tries-it-hand-at-creating-hearthstone-magic-t ...

  9. 讲一讲WiFi快连、SmartConfig、SmartConnect

    最近要给公司同事们培训WiFi快连技术,整理了相关资料,也分享在博客这,献给有缘人. 前言 现在的智能硬件产品,以WiFi品类居多,这些WiFi硬件没有人机交互界面,但设备要上网肯定要配置SSID等相 ...

  10. golang LMDB入门例子——尼玛,LMDB的文档真的是太少了

    使用的是这个库:https://github.com/szferi/gomdb 安装: go get github.com/szferi/gomdb 代码: package main import ( ...