【问题标题】:How to create unknown face dataset for face recognition python如何为人脸识别python创建未知人脸数据集
【发布时间】:2020-07-29 21:23:08
【问题描述】:

我有一个pythonface recognition,我使用open-face 模型和SVM 来检测和识别人脸。我识别图像的一般步骤如下:

  1. 使用人脸检测模型检测人脸:使用开放人脸模型而不是 HAAR cascase 的原因是 cascade 无法检测侧面
  2. 提取人脸嵌入:使用开放人脸模型提取 128 d 人脸嵌入
  3. 训练:使用SVM 我正在训练带有适当标签的人脸嵌入,如下所示:

    params = {"C": [0.001, 0.01, 0.1, 1.0, 10.0, 100.0, 1000.0], "gamma": [1e-1, 1e-2, 1e-3, 1e-4, 1e-5]}

    model = GridSearchCV(SVC(kernel="rbf", gamma="auto", probability=True), params, cv=3, n_jobs=-1)

    model.fit(data["embeddings"], labels)

  4. 测试:提取测试图像的人脸嵌入,并预测结果如下:

model.predict_proba()

我有unknown 随机人脸数据集和known 人脸数据集。这里的问题是,如果我添加大约 30 个已知人物图像并且如果我有大约 10 个未知人物图像,则可以很好地识别已知人物,但如果有任何未知人物进来,它也会将未知人物识别为具有高实际上应该是未知的信心。

如果我在 unknown 数据集中添加更多随机人,可以说大约 50 张图像,如果我有 30 张已知人物图像。它可以很好地识别已知人图像,但信心低,如果有任何未知人进入,现在将其识别为未知

看起来要获得良好的人脸识别结果,我们需要大约相同数量的known and unknown 人物图像,这实际上是不可能的,因为已知人物图像可以增加到 100 或更多,而不是我们添加的每个已知人物。我在这里很困惑,不知道该怎么办。有没有其他方法可以识别known/unknown 人。请帮忙。谢谢

【问题讨论】:

    标签: python opencv face-recognition


    【解决方案1】:

    随着可能的人数(标签数量)的增加,信心降低是正常的,因为有更多的可能性。我试图理解你的意思:你有每个人的标签,然后是未知的附加标签?这不是要走的路,因为未知被视为任何其他嵌入的人。您应该使用截止概率,并且低于该概率的所有内容都被认为是未知的。

    请记住,您的预测规模(更多人,更多可能性)和准确性之间存在权衡

    【讨论】:

    • 如何确定截止概率。你有文章/代码的链接吗?
    • 只需根据截止概率优化未知人检测率,即可计算测试数据的最佳值。它只是一个参数,所以我只需手动设置它。您可以只计算 HITS@k = (number of faces correctly classified as unknown)/(total numer of unknown face) 的某些值 k 或使用任何其他更高级的指标。我没有立即有任何代码或文章,但我在 github 上找到了这个我认为与您的问题有关的线程:[github.com/cmusatyalab/openface/issues/144]
    【解决方案2】:

    我不认为 svm 在这里可以很好地工作。它是原生的二元分类器。它将尝试计算两个 128D 点集(已知和未知类)之间的边界,但这些类在内部没有任何关系。在嵌入空间中,已知的可能与未知的相似,而不是与另一个已知的相似。这将是 SVM 泛化的问题。 SVM 可用于封闭集,但您有未知面孔的开放集。

    使用非参数方法更实用,并使用贝叶斯方法,计算嵌入空间中已知数据的距离函数的可能性。就像你之前的问题一样。

    【讨论】:

    • 可能是这个byclb.com/TR/Tutorials/neural_networks/ch11_1.htm 也有好书。 Bishop“机器学习和模式识别”。
    • 您对所有已知点的阈值将与上一篇文章中的相同。规则是:距离 > 已知人的所有照片的阈值 -> 未知
    • 这也可能有用:arxiv.org/pdf/1810.11160.pdf
    • 嗨,安德烈,想知道一件事。正如你所说的svm will not work well here。你的意思是说我们仍然可以将它用于训练目的,但不能用它来预测。或者它甚至不适合训练。?
    • SVM 可用于人脸识别任务。当您有一组固定的人员并且不需要识别未知人员时。因为 SVM 按类别区域划分所有可用空间,所以嵌入空间中没有未分类的区域。所以,有几个阶段可以制作识别器:训练特征空间(非常大的 DS)(你已经完成了),计算阈值(大 DS),使用你的小 DS 来计算到被查询人脸的距离。如果 dist
    猜你喜欢
    • 1970-01-01
    • 2013-12-22
    • 2021-10-30
    • 2023-03-06
    • 2018-06-14
    • 2011-12-14
    • 1970-01-01
    • 1970-01-01
    • 2019-03-04
    相关资源
    最近更新 更多