使用啥分类器来确定两个数据集是不是描绘了同一个人?

Posted

技术标签:

【中文标题】使用啥分类器来确定两个数据集是不是描绘了同一个人?【英文标题】:What classifiers to use for deciding if two datasets depict the same individual?使用什么分类器来确定两个数据集是否描绘了同一个人? 【发布时间】:2011-10-06 05:54:41 【问题描述】:

假设我有一组人的面孔照片。我要回答的问题是:“这两张图片代表的是同一个人吗”?

像往常一样,我有一个训练集,其中包含许多人的几张图片。算法必须处理的个人和图片当然不在训练集中。

我的问题不是关于图像处理算法或我应该使用的特定功能,而是关于分类的问题。 我看不出如何在这种情况下使用传统的分类器算法,例如 SVM 或 Adaboost。我应该如何使用它们?我应该使用其他分类器吗?哪些?

注意:我的真实应用不是人脸(我不想透露),但已经足够接近了。

注意:训练数据集并不庞大,最多只有几千个。尽管每个数据集都非常大(几兆字节),即使它不包含很多真实信息。

【问题讨论】:

【参考方案1】:

请原谅我说的很明显,但为什么不使用任何监督分类器(SVM、GMM、k-NN 等),为每个测试样本获取一个标签(例如,面部、语音、文本等),然后看看这两个标签是否匹配?

否则,您可以执行二元假设检验。 H0 = 两个样本不匹配。 H1 = 两个样本匹配。对于两个测试样本 x1 和 x2,计算距离 d(x1, x2)。如果 d(x1, x2)

【讨论】:

对于您答案的第一部分:问题(如果我正确理解您的答案)是要测试的主题不在培训数据库中。而且我不认为每次我必须测试图像对时都重新训练。 关于您评论的第二部分:这几乎是我得出的结论,但我想知道:(1)是否有自动设置 epsilon 的好方法,以及(2),如果有办法直接在多维输入上使用分类器,而不是计算度量和度量阈值。直觉上,在我看来,(2)应该能够得到更好的结果。【参考方案2】:

你可能应该看看以下方法:

页。 Jonathon Phillips:应用于人脸识别的支持向量机。 NIPS 1998:803-809 Haibin Ling、Stefano Soatto、Narayanan Ramanathan 和 David W. Jacobs,人脸识别研究,IEEE International 计算机视觉会议 (ICCV),2007 年。

这些方法描述了使用 SVM 来解决您所描述的同一个人/不同个人的问题。如果特征(眼睛、鼻子、嘴巴)的对齐良好,这些方法效果很好。

【讨论】:

感谢指点!我会阅读文件并报告。 非常感谢您的回答。这些文件正是我需要的。作为记录,解决方案是在差异空间中执行分类,其中差异是一个抽象的对称函数,它获取两张图像并返回差异特征。这种差异可以是两个图像的简单绝对差异,也可以是更复杂的东西,如第二篇论文所示。【参考方案3】:

您的数据集有多大? 我会通过提出某种距离度量(比如欧几里得)来开始这个问题,它可以描述图像之间的差异(例如颜色、形状等的差异,或者说局部差异)。代表同一个人的两个图像的距离很小与代表不同个体的图像相比,这在很大程度上取决于您当前正在处理的数据集的类型。

【讨论】:

训练数据集并不庞大,最多只有几千个。 一个度量标准并不难获得,例如我可以使用特征脸之间的欧几里得距离。我的问题是关于最后的分类步骤,而不是前面的步骤。 如果两张脸之间的距离很小,那么它们很可能代表同一个人(可能性有多大?你从你的训练集中找到这个)。然后问题被简单地简化为“按照我的度量标准,这两张脸靠得很近吗?”如果这不能提供足够好的结果,您需要提出一个更好的指标。这应该是困难的部分,我不知道你为什么认为“不难做到”。 不,我的问题是在哪里设置阈值。我希望自动设置阈值而不是手动设置。指标是一个难题,但有很多文献解决了这个问题。

以上是关于使用啥分类器来确定两个数据集是不是描绘了同一个人?的主要内容,如果未能解决你的问题,请参考以下文章

具有一个随机类的数据集上的 CNN 分类器

机器学习集成学习原理

根据你的理解,简要说明使用双等号(==)和equals()方法判断两个字符串是不是相等有啥区别

如何使用 R 中经过训练的分类器预测新数据集?

第二章 模型评估与选择

如何测试我的分类器是不是过拟合?