【问题标题】:Clustering human faces from a video从视频中聚类人脸
【发布时间】:2014-11-28 12:26:13
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    我建议看看

    FaceNet: A Unified Embedding for Face Recognition and Clustering

    我的shortscience summary(如果您想查看正确渲染的数学部分,请前往那里):

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

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

    LMNN

    Large Margin Nearest Neighbor (LMNN) 正在学习伪度量

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

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

    课程学习:三元组选择

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

    他们使用 hard 的三连音。对于正例,这意味着锚点和正例之间的距离很大。对于负例,这意味着anchor和负例之间的距离很小。

    他们想拥有

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

    其中$\alpha$是margin,$x_i^a$是anchor,$x_i^p$是正面样本,$x_i^n$是负面样本。随着时间的推移,它们会增加 $\alpha$。至关重要的是,$f$ 不是在完整的 $\mathbb{R}^{128}$ 中映射图像,而是在单位球面上。否则,只需使 $f' = 2 \cdot f$ 就可以使 $\alpha$ 翻倍。

    任务

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

    数据集

    • 在野外标记面部 (LFW) 上的准确率为 99.63%
    • YouTube Faces DB 上的准确率为 95.12%

    网络

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

    另见

    另见

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-09
      • 2014-01-13
      • 1970-01-01
      • 2014-11-15
      • 1970-01-01
      • 1970-01-01
      • 2018-10-15
      • 2011-07-31
      相关资源
      最近更新 更多