python - 如何以最佳方式调整我的人脸识别常数(即阈值)?
问题描述
我制作了一个有效的人脸识别程序,但有时它可以: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)
您可以添加任意数量的超参数。您只需使用相应的超参数值保存平均损失和误差。这样,您可以在网格搜索后选择最好的模型,然后选择最终模型(参数)。
推荐阅读
- python-3.x - 如何在特征(列)少于训练集的样本上测试 nlp 模型?
- unix - Sed 命令将检查我的文件的第二列并删除匹配的数据
- javascript - 如何在 javascript/jquery 中创建带有左窗格和可拖动对象的网页
- html - 在 Microsoft Dynamics CRM 中更改 html 代码的位置
- r - UpsetR:手动排序集合交点以对齐多个扰乱图
- c# - 该进程无法访问文件“文件名”,因为它正被另一个进程使用。并且拒绝访问路径“文件名”
- j - `0".>,.2}.` 部分在 J 脚本中的作用是什么?
- c++ - GCC 在 Boost Source 中的警告
- c# - 右侧的按钮列
- amazon-web-services - Load pre-trained model on AWS