使用k-means进行面部表情分类

时间:2013-09-04 20:20:04

标签: machine-learning data-mining face-detection feature-detection

我使用k-means对面部表情进行分类的方法是:

  1. 使用opencv检测图像中的面部
  2. 使用ASM和stasm获取面部特征点
  3. 计算面部特征之间的距离(如图所示)。将有5个距离。 enter image description here
  4. 计算每个面部表情的每个距离的质心(exp:在距离D1中,每个表情有7个质心'快乐,生气......')。
  5. 每个k-means使用5 k-means表示距离,每个k-means将得到第一步中最接近质心的距离所示的表达式。
  6. 最终表达式将出现在最多k-means结果
  7. 然而,使用该方法我的结果是错误的? 我的方法是正确的还是在某处错了?

1 个答案:

答案 0 :(得分:3)

K-means不是分类算法。一旦运行,它只是找到K个元素的质心,因此它将数据分成K个部分,但在大多数情况下,它与所需的类没有任何关系。当您想要探索数据并找到一些可区分的对象时,应该使用此算法(作为所有聚类方法)。在任何意义上都难以区分。如果您的任务是构建一个识别某些给定类的系统,那么它是 classification 问题,而不是 clustering < / strong>即可。最容易实现和理解的最简单的方法之一是KNN(K-最近邻居),它大致完成了你想要完成的任务 - 检查哪些类的对象是最接近某些类的对象那些。

为了更好地发现差异让我们考虑一下你的情况 - 你试图根据面部特征来检测情绪状态。在这些数据上运行k-means可以将您的面部照片分成多个组:

  • 如果您使用不同人物的照片,它可以将特定人物的照片聚集在一起(因为他们的距离与其他人不同)
  • 它可以将数据分成例如男人和女人,因为这些特征存在性别特异性差异
  • 它甚至可以根据与相机的距离来分割您的数据,因为透视图会更改您的功能,从而创建“群集”。

正如您所看到的,有几十种可能的“合理”(甚至更完全不可解释)分裂,而K-means(和任何)其他聚类算法只会找到其中一种(在大多数情况下 - 不可解释的)。分类方法用于克服这个问题,“解释”算法你期待什么。