如何以最佳方式调整我的人脸识别常数(即阈值)?

How to adjust my face recognition constants (i.e. threshold) in the best way?

我制作了一个有效的人脸识别程序,但有时它可以: 1)不检测人脸/检测多余的非人脸为人脸。 2)当它看到一张熟悉的面孔时,他可能会认出这是一个新人/认出一张陌生的新面孔是别人。

这两个假阳性和真阴性的问题是由于cascade.detectMultiScale参数中的常量如:scaleFactor, minNeighbors, minSize, maxSize。 并在 face_recognizer num_components 的门槛。

所以我的问题是如何找到这些参数的最佳值?

根据实验,您必须进行网格搜索。因此,如果您有标签(框的正确值等),您可以通过定义一组要微调的超参数并检查它们的每个可能组合以找到最佳组合的方式进行网格搜索。

例如,在 face_recognizer 中,您可以像这样尝试和试验阈值:

for threshold in [0.5, 0.6, 0.7, 0.8, 0.9]:
    for image in the trainset:
      res = face_recognizer(image, threshold=threshold)
      assert (res==label)

如果您想检查多个超参数,只需添加另一个 for 循环即可:

for param_1 in [value_1, value_2...]:
  for param_2 in [value_1, value_2...]:
    for image in the trainset:
      res = face_recognizer(image, threshold=threshold)
      assert (res==label)

您可以添加任意数量的超参数。您只需将平均损失和误差与超参数的相应值一起保存即可。这样你就可以 select 网格搜索后最好的模型和 select 最终模型(参数)。