如何为人脸识别python创建未知的人脸数据集

时间:2020-04-16 15:06:40

标签: python opencv face-recognition

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

  1. 使用面部检测模型检测面部:使用开放面部模型而不是HAAR cascase的原因是级联无法检测到侧面
  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个人。请帮忙。谢谢

2 个答案:

答案 0 :(得分:1)

正常的情况是,随着可能性的增加(可信度),置信度会下降。我想了解您的意思:您为每个人贴上标签,然后为未知标签贴上另一个标签?那不是走的路,因为未知被视为嵌入任何其他人。您应该使用截断概率,所有低于此概率的东西都被认为是未知的。

请记住,预测的大小(更多的人,更多的可能性)和准确性之间需要权衡

答案 1 :(得分:1)

我认为svm在这里不能很好地工作。它是本机的二进制分类器。它将尝试计算两个128D点集(已知类和未知类)之间的边界,但是这些类在内部没有任何关系。已知可能比未知更类似于嵌入空间中的另一个已知。这对于SVM的推广将是一个问题。 SVM可以用于封闭集,但是您可以为未知面孔设置开放集。

使用非参数方法,并使用贝叶斯方法,为嵌入空间中的已知数据计算似然率与距离的函数,更为实用。就像您上一个问题一样。