5

该问题与传统手写识别有点不同。我有一个数据集是成千上万的以下。对于一个绘制的角色,我有几个顺序的(x, y)坐标,笔被按下。所以,这是一个连续的(时间)问题。如何将HMM用于手写识别?

我希望能够根据这些数据对手写字符进行分类,并且很乐意实现用于学习目的的HMM。但是,这是正确的方法吗?他们如何被用来做到这一点?

+0

这是一个非常有趣的想法。出于好奇,每个点记录的时间坐标也是如此(毫秒1个坐标是30×45被按下)还是只是按顺序? – Turnsole 2012-02-21 22:56:15

+0

目前只是顺序。正在考虑做一些动态时间扭曲,以解释字符被绘制得更慢/更快 – zebra 2012-02-21 23:08:03

+0

我认为这是正确的方法。作为练习,您可以从识别[palm graffite](http://en.wikipedia.org/wiki/Graffiti_%28Palm_OS%29)字母开始。 – Maurits 2012-02-22 23:17:46

回答

2

这个问题实际上是两个问题,一个组合:

  1. 从数据
  2. 从人物

的(如噪声)序列识别字​​识别一个字符一个使用HMM用于从噪声测量中找出有限数量的离散状态的最可能的序列。这正是问题2,因为离散状态a-z的噪声测量0-9在一个序列中跟随彼此。

对于问题1,HMM是无用的,因为您对底层序列不感兴趣。你想要的是增加你的手写数字与你如何写它的信息。个人而言,我会从实施经常性的先进手写识别开始,这已经非常好(使用卷积神经网络或深度学习)。之后,您可以添加有关如何写入的信息,例如顺时针/逆时针。

3

我认为HMM可以用于@jens提到的两个问题。我正在从事在线手写,并且HMM被用于许多文章。最简单的方法是这样的:

  1. 选择一项功能。
  2. 如果选定的功能是连续转换为离散的。
  3. 选择HMM参数:拓扑和状态数量。
  4. 使用HMM训练人物模型。每个班级有一个模型。
  5. 使用测试集进行测试。

每个项目:

  1. 最简单的功能是连接连续 点矢量的角度。您可以使用更复杂的功能,如Douglas & Peucker算法获得的矢量角度 。
  2. 离散化的最简单方法是使用Freeman代码,但也可以使用像k-means和GMM这样的聚类算法。
  3. HMM拓扑:遍历,左 - 右,巴基斯和线性。 #状态 可以通过试用&错误获得。对于每个型号的 ,HMM参数可以是可变的。观测数量由离散化决定。观察样本可以有不同的长度。
  4. 我推荐Kevin Murphy HMM工具箱。
  5. 祝你好运。