我正在使用OpenFace来计算在无约束条件下拍摄的图像中发现的人脸的表示(128D),这些条件显示照明、时间等方面的显着变化。
根据他们的网站和演示,具有适当阈值的标准欧几里德距离足以能够将这些表示用于“相同-不同”方案。也就是说,给定两个具有表示 v1 和 v2 的面孔,如果 eucDist(v1,v2) < S,我可以确定它们是否属于同一个人。
在实践中,结果还不错,但绝对远非完美。我想在我的应用程序中做的是使用用户输入来改进预测。
理想情况下,我想执行以下程序:
假设我已经提取了 N 个面,对于每个我都有一个表示,它是 R^128 中的一个向量。假设这些面孔属于 n 个个体(当 n 明显小于 N 时)。
我随机选择 k 个面孔(当 k 是一个小数字时,比如 10)并将它们显示给用户,让她为这些面孔标记属于同一个人的面孔。
我现在想使用用户输入来“调整”欧几里得距离,使其表现更好:使她标记为“不同”的面孔之间的距离更大,而她标记为“相同”的面孔之间的距离更小。显然,我想以一种推广到 N 面的整个数据集的方式来做到这一点。
“耐心”用户可以继续标记照片以改善结果。
我知道这与“度量学习”领域有关,并且我已经阅读了诸如 Mahalanobis 距离之类的内容,但我不确定如何在这种“在线”场景中使用它。我想知道是否有人对这样的任务有任何经验并且可以阐明一些观点或给我任何指示。我应该提一下,我并不是真的在寻找太“繁重的数学”;理想情况下,我想知道是否存在可以根据用户输入提高性能的算法(最好使用一些我可以使用的现有实现)。对于初学者来说,我会对任何形式的改进感到满意,因此它不一定是可用的最佳方法。
谢谢!