首页 > 解决方案 > 如何以最佳方式调整我的人脸识别常数(即阈值)?

问题描述

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

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

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

标签: pythonopencvface-detectionface-recognitioncv2

解决方案


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

例如,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)

您可以添加任意数量的超参数。您只需使用相应的超参数值保存平均损失和误差。这样,您可以在网格搜索后选择最好的模型,然后选择最终模型(参数)。


推荐阅读