【问题标题】:Quick search of the face descriptors in the db快速搜索数据库中的人脸描述符
【发布时间】:2017-05-07 11:24:34
【问题描述】:

我想使用神经网络实现人脸识别应用程序之类的东西。所以我找到了this incredible article

当我们将人脸图像放入 OpenFace 网络时,我们会得到 128 个测量值,可以用来比较人脸。

但这里我们得到了主要问题:我们如何才能在数据库中快速找到具有最接近 128 个值的同一张脸?

如果我们将使用 SVM(如文章中所述),我们应该在每次将新面孔放入数据库时​​重新训练分类器,但这并不方便。

所以我想知道解决这个问题的最佳方法是什么? Facebook 等服务如何在毫秒内比较这些描述符?

【问题讨论】:

    标签: database machine-learning neural-network artificial-intelligence face-recognition


    【解决方案1】:

    如果您有一张脸并且想在人脸数据库中搜索最接近的匹配项,那么实际上只有两个步骤(假设您已经获得了 128 个 OpenFace 测量值 - 我将其称为 OpenFaceRep):

    1. 对于数据库中的每个人脸,从种子照片的 OpenFaceRep 中减去其 OpenFaceRep。我们称之为diff
    2. 获取diff 与自身的点积。如果您使用的是 Python,它看起来类似于 np.dot(diff,diff),我们将其称为 similarity

    similarity 最低的人脸将是最佳匹配。请注意,您的准确度会因照片、照明等质量的不同而有很大差异。OpenFace 在 LFW 基准测试中达到了accuracy of about 92%

    【讨论】:

    • 感谢您的回复!是的,我也认为这是最准确的方法,但是如果我们想用查询人脸检查数据库中的每个人脸,这将需要很长时间:我们需要减去 128 个值 n 次,其中 n - 计数db 表中的行。我认为它存在一些更快速的方法。还是我误会了你?
    • 看来您理解我的正确。我所描述的会很快(因为它只是减法和乘法)并且可以并行实现。实际上,我一直想知道如何扩展它——据我所知,关于这个主题的开源研究并不多。我的猜测是,Facebook 能够通过仅将照片中的面孔与您的朋友进行比较来以某种方式“作弊”。因此,他们最多进行数千次比较。您可能还想查看Amazon Recognition,这可以为您简化事情。
    • 当然,我完全忘记了这个 Facebook hack。好,谢谢!我将尝试测试您描述的方法并让您知道结果。但我也想澄清一下:我觉得我也可以用KD-tree来达到这个目的,你怎么看?
    • 是的,我认为这符合我想到的一种方法。将您的数据分成 k 个集群(我在想 t-SNE),然后只将您的脸与将要分配到的集群中的人脸进行比较。祝你好运!
    • 抱歉回复晚了。这几周我有很多考试。我以为我需要在 KD-tree 中使用 128 个维度,但您建议将维度减少到 3 个维度,然后对这些数据使用 KD-tree,对吗?我还想知道:PostgreSQL 是否可以按照我需要的方式使用 KD-tree?我阅读了this article 的相关信息,但我仍然不确定是否应该将其用于我的目的。
    猜你喜欢
    • 2011-07-27
    • 2016-02-23
    • 1970-01-01
    • 1970-01-01
    • 2012-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    相关资源
    最近更新 更多