赞
踩
最近在学习人脸识别,看了一些FaceNet和ArcFace的资料。发现这类人脸识别算法的基本思路都是把待识别人脸送入卷积神经网络得到一个embedding向量,然后与人脸库中的人脸embedding向量进行比较,一般是求这两个人脸之间的距离,如果距离小于一个阈值,那就认为这两张人脸属于同一个人。
但是因为之前没有人脸识别方面的部署经验,所以对ArcFace最后如何选择的阈值不太清楚,搜索引擎上也没搜到相关资料。所以我研究了一下官方的代码,做了一个笔记。
我看的是官方insightFace的pytorch实现的代码,如下:
ArcFace用的阈值选择方法其实并不是用的一个固定的值,而是用的与训练集相关的方法:
1.为阈值选择一个合适的范围集合,遍历这个集合中的阈值;
2.在1中的集合选中一个阈值后,就用这个阈值计算此时训练集的准确率,直到1中的阈值都计算完;
3.选出训练集准确率最高的阈值,将其选为最佳阈值;
官方pytroch代码阈值选择的核心在calculate_roc函数中第90行,代码可以精简如下:
# Find the best t
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。