我制作了一个有效的人脸识别程序,但是它有时可以: 1)未检测到脸部/未检测到多余的非脸部作为脸部。 2)当他熟悉的面孔时,他可能会认识到它是一个新人,或者认识到另一个陌生的面孔是其他人。
这两个假阳性和真阴性的问题是由于诸如cascade.detectMultiScale
参数中的常量所引起的:scaleFactor,minNeighbors,minSize,maxSize。
在face_recognizer中,num_components阈值。
所以我的问题是如何找到这些参数的最佳值?
答案 0 :(得分:1)
实验上,您必须进行网格搜索。因此,如果您具有标签(框的正确值等),则可以通过以下方式进行网格搜索:定义一组要微调的超参数,并检查它们的每种可能组合以找到最佳的。 / p>
例如,在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)
您可以添加任意数量的超参数。您只需要使用相应的超参数值保存平均损耗和误差。这样,您可以在网格搜索之后选择最佳模型,然后选择最终模型(参数)。