对于HMM应用于人脸识别,以下是我的心得。
先给出一张5X5的图片,
[100,101,102,103,104] 额头,
[200,201,202,203,204] 眼睛
[300,301,302,303,304] 鼻子
[400,401,402,403,404] 嘴巴
[500,501,502,503,504] 下巴
假设,第一行描述了额头的信息,第二行描述了眼睛的信息,第三行描述了鼻子的信息,
第四行描述了嘴巴的信息,第五行描述了下巴的信息。
怎么判别这张图片是不是一个人脸图片呢?
答案是:把5 X 5矩阵等效为HMM模型。
HMM模型相当于一个具体的人脸,给他取名为Jack。
因为数据库保存了很多人脸模型HMM,从中找到最接近Jack的HMM模型,
如果误差在规定范围内,则认为此图片为人脸。
但是,5 X 5矩阵到底是怎么等效为HMM模型的?
答案是:5 X 5矩阵对应的HMM可以产生5 X 5的观察序列值,但不一定是如例一样的值,
只不过如例一样的5 X 5矩阵序列值产生的概率很高。如此可以近似的认为如例5 X 5矩阵和它对应的HMM模型等效。
但是,怎么构建高概率产生如例5 X 5矩阵序列值的HMM模型?
答案是:1、构建一个HMM模型,包含五个状态额头、眼睛、鼻子、嘴巴、下巴。
那么A矩阵代表从任一个状态到另一个状态转移概率的5X5矩阵,
B矩阵每一行代表一个状态下,出现如例25个观察值的25个概率值。
2、初始化这些概率值。
3、用前向-后向算法计算已经初始化的HMM模型产生如例25个观察值的概率。
4、如果概率太低,则采用Baum - Welch算法重新调整A矩阵和B矩阵的概率值,
跳到3;否则,模型被构建。
但是,前向-后向算法怎么计算已经初始化的HMM模型产生如例25个观察值的概率P?
答案是:1、把观察值看成随时间变化的变量。
t=1时,值为100。
t=2时,值为101。
。。。
t=25时,值为504。
2、计算每个时刻每个状态产生后面序列值的概率BEAT[t][n],n为状态ID。
如t=1时,对于状态‘额头’,计算产生101,102,103,104,201,。。。,504序列的概率。
对于状态‘眼睛’,计算产生101,102,103,104,201,。。。,504序列的概率。
。。。
3、对于t>1的时刻,BEAT对计算P没有帮助,所以只取t=1时刻的所有状态的BEAT值,求和,即可求得P。
但是,怎么计算每个时刻每个状态产生后面序列值的概率BEAT[t][n]?
答案是:从t=24开始计算,相邻时刻的概率值用如下公式计算出来,
经过累加后,可以求出t=1时刻的所有状态的BETA值。