上周末受朋友所托,帮他做点毕业设计的东东,俗话说“论文已写好,还差个码农鸟”,此事便定下了。论文的方向是用马尔科夫模型(HMM,Hidden Markov Model)识别掌纹(准确来讲是用户认证)。之前在系里的无人车项目中应用了马尔科夫模型,这刚好也是我的毕业选题,估计这也是他找我的原因。

看到这个题目的人,如果对马尔科夫模型有所了解的话,一定会很奇怪,马尔科夫模型建立的两个关键要素是观测序列与状态转移,这怎么体现在掌纹上呢?

概述

说起来,这个理论最早是从人脸识别上搬运过来的。将人脸图像从上到下分成若干个子块,这些子块自上而下依次组成观测序列,每个子块所蕴涵的信息被当作状态。这个状态可以这么理解,它是由人脸的生物特征,比如相互位置、颜色、形状等在统计意义上的抽象。也即是,认为“状态”蕴含了人脸的生物特征,但是具体蕴含哪些?有多大关联却并不作直接解释(如果你知道合理的解释,请务必指导我)。

如此,对人脸图像进行切分,得到一系列的子块,作为观测序列。我们知道,马尔科夫模型有这么几个应用场景。

1.根据模型参数与观测序列,求观测序列出现的概率
2.已知观测序,估计模型参数
3.根据模型和观测序,求最可能的状态序列

首先,我们面临的是第二种问题。我们认为用马尔科夫模型可以描述切片序列的变化规律,根据这些切片序列推断模型参数,这是参数估计问题,也是个无监督学习过程,经常用Baum-Welch算法训练得到参数。

然后是关键的一步。当新来的人脸图片时候,首先对其切片获得观测序列,利用第一步中获取的模型参数,计算其可能的状态及其似然值,作为分类的依据。这对应上述第三种问题,可以用维特比算法求解。

训练

掌纹识别即与人脸的识别方法完全相同,不过还有一些细节需要阐述下。由于马尔科夫模型的观测变量与状态变量是离散的,所以要找到一种方法将连续的“切片”离散化。

矩阵的奇异值向量具有稳定性、位移不变、旋转不变等优良特性,可以用来很好的描述矩阵,所以选取它作为“切片”数据的特征。进一步,将这些特征使用k-means聚类,聚类的标号作为该切片的“状态”。用户需要自己决定状态数目,以及观测概率的分布数量。不过据一篇来自清华的论文"DSW Feature Based Hidden Marcov Model: An Application on Object Identification"的实验结果,状态在6-7时候效果较佳。

识别

按照训练一节,对每一个人训练出一套模型参数。对于新来的待识别图像,切片、奇异值分解、状态分类。分类使用欧几里德距离方式确定,根据它与不同分类的中心距离,取最近的作为类标号。这样便获得一个基于类标号的观测序列,将它代入各个用户模型分别计算其最大似然值(场景三),取其最大似然值作为识别的结果。

实现

见我的 github repo palm-identification-with-hmm

结果与改进

使用PolyU的Palmprint Database进行实验,为标准化的128*128图,省去了预处理过程。

据实验结果,在4人的识别中,效果可以达到60-70%,人数再多效果就很快急剧下降,不忍直视。 可从如下两个方面着手:

1.模型训练时候的初始观测概率分布使用了随机值,导致结果会有跳动。可以考虑在不同初始值情况下,通过多次迭代找出最优的模型参数,后续不再训练。

2.模型的可解释性。由于模型中的状态并没有直接对应的物理意义,颇有点类似神经网络的神经元个数的意味。进一步提高识别率需要与其他方法结合。

Original Link: http://tianyaqu.com/blog/2015/05/15/palm-identification-with-hmm/
Attribution - NON-Commercial - ShareAlike - Copyright © Alex

Comments