从视频中聚类人脸

时间:2014-10-03 12:36:37

标签: opencv computer-vision cluster-analysis face-recognition feature-extraction

我已经在opencv中运行了面部检测算法来提取视频的每个帧中的面部(以1 fps采样)。我还将每张脸部图像的大小调整为相同尺寸,并且我已经裁剪了一些图像以消除背景噪音和头发。现在问题是我必须聚集这些面部图像 - 每个集群对应一个人。我实现了这里描述的算法http://bitsearch.blogspot.in/2013/02/unsupervised-face-clustering-with-opencv.html

基本上上述算法,迭代地使用OpenCV的LBPH人脸识别器来聚类图像。在该页面本身的描述中,结果并不令人满意。在我的实施中,结果更糟。任何人都可以建议更好的方式来聚集面孔吗?可能正在使用其他一些功能和其他一些聚类算法。集群数量未知。

1 个答案:

答案 0 :(得分:0)

我建议看看

  

FaceNet: A Unified Embedding for Face Recognition and Clustering

我的shortscience summary(如果你想看到数学部分正确呈现,请去那里):

FaceNet直接将脸部图像映射到$ \ mathbb {R} ^ {128} $,其中距离直接对应于脸部相似度的度量。他们使用三重损失功能。三元组是(人A的面部,人A的其他面部,非A的人的面部)。后来,这被称为(锚,正,负)。

损失功能是由LMNN学习和启发的。这个想法是最小化同一个人的两个图像之间的距离,并最大化与其他人的图像的距离。

LMNN

大保证金最近邻(LMNN)正在学习伪度量

$$ d(x,y)=(x -y)M(x -y)^ T $$

其中$ M $是一个正定矩阵。伪度量和度量之间的唯一区别是$ d(x,y)= 0 \ Leftrightarrow x = y $不成立。

课程学习:三胞胎选择

首先显示简单示例,然后增加难度。这是通过选择三元组来完成的。

他们使用 hard 的三胞胎。对于正例,这意味着锚和正例之间的距离很高。对于反面示例,这意味着锚点和反面示例之间的距离很低。

他们希望拥有

$$ || f(x_i ^ a) - f(x_i ^ p)|| _2 ^ 2 + \ alpha< || f(x_i ^ a) - f(x_i ^ n)|| _2 ^ 2 $$

其中$ \ alpha $是保证金,$ x_i ^ a是锚点,$ x_i ^ p $是正面值示例,$ x_i ^ n $是负面示例。他们随着时间的推移增加$ \ alpha $。至关重要的是,$ f $映射的图像不在完整的$ \ mathbb {R} ^ {128} $中,而是在单位范围内。否则,只需制作$ f'= 2 \ cdot f $。

即可将$ \ alpha $加倍

任务

  • 面部验证:这是同一个人吗?
  • 面部识别:这个人是谁?

数据集

  • 野外标记的FAFF(LFW)的准确度为99.63%
  • YouTube Faces DB的准确率为95.12%

网络

评估了两个模型:Zeiler & Fergus model和基于Inception model的架构。

另见

另见