使用k-means进行面部表情分类
Posted
技术标签:
【中文标题】使用k-means进行面部表情分类【英文标题】:facial expression classification using k-means 【发布时间】:2013-09-08 12:06:03 【问题描述】:我使用k-means对面部表情进行分类的方法是:
-
使用opencv检测图片中的人脸
使用ASM和stasm获取面部特征点
计算面部特征之间的距离(如图所示)。会有5个距离。
计算每个面部表情的每个距离的质心(exp:在距离 D1 中,每个表情“快乐、愤怒...”有 7 个质心)。
使用 5 个 k-means,每个 k-means 表示一个距离,每个 k-means 将具有由最接近第一步计算的质心的距离显示的表达式。
最终表达式将是出现在 k-means 结果中最多的表达式
但是,使用这种方法我的结果是错误的? 我的方法是正确的还是某处有问题?
【问题讨论】:
考虑使用分类而不是聚类。 我也会进行分类,但如果你想尝试一下,你可以看看 k-means 是如何使用这 5 个特征并在 5 维空间中找到质心的。 您是否曾经绘制过数据以查看它是否可分离?由于很难绘制 5 维数据,我建议运行 PCA 并绘制不同表达式的前三个主成分,以便查看它们是否实际上是可分离的。如果它们重叠,您必须考虑一种新的方式来表示您的数据。真的很难说表达面部表情的最佳方式是什么,那么为什么不使用深度信念算法来找到这个问题的答案呢? 【参考方案1】:K-means 不是分类算法。一旦运行,它会简单地找到 K 个元素的质心,因此它将数据拆分为 K 个部分,但在大多数情况下,它与所需的类没有任何关系。当您想要探索数据并找到一些可区分的对象时,应使用此算法(与所有聚类方法一样)。在任何意义上都可以区分。如果您的任务是构建一个能够识别某些 给定 类的系统,那么这是一个 classification 问题,而不是 clustering。 KNN(K-nearest neighbours)是最简单且易于实现和理解的方法之一,它大致完成了您想要完成的工作 - 检查哪些类的对象与某些预定义的对象最接近。
为了更好地了解差异,让我们考虑一下您的情况 - 您正在尝试根据面部特征检测情绪状态。对此类数据运行 k-means 可以将您的人脸照片分成许多组:
如果您使用不同人的照片,它可以将特定人的照片聚集在一起(因为他们与其他人的距离不同) 它可以将数据分为男性和女性,因为这些特征存在性别差异 它甚至可以根据与相机的距离拆分数据,因为视角会改变您的特征,从而创建“集群”。 等如您所见,有几十种可能的“合理”(甚至更完全不可解释)分裂,而 K-means(和 any)其他聚类算法只会找到其中一个(在大多数情况下 - 不可解释的)。分类方法被用来克服这个问题,以“解释”你所期望的算法。
【讨论】:
以上是关于使用k-means进行面部表情分类的主要内容,如果未能解决你的问题,请参考以下文章