我有大约数千人的脸(从名人数据集LFW),其中每个人代表512 x 1矢量。将其存储在矢量数据库中,构建了基于嵌入式特征的人脸搜索系统(MTCNN用于人脸检测,弧面用于嵌入模型)。有人建议我将许多向量作为“虚拟脸”添加到具有未知类的数据库中(向量的数量大于个人类)。
我还不清楚为什么我需要添加许多未知的面孔作为“未知”类,并将其与来自每个人的数千个向量放在一起。据我所知,仅从已知的向量(来自每个人的向量)获得相似度分数,而不使用未知的向量,就可以很容易地检查性能,例如,如果我使用k = 3或k = 5,我将以最小的距离作为结果,得到向量的类(ID或label)。
发布于 2021-05-27 18:15:50
不,制造假人不知道不是最好的方法。
一个更好的方法是,如果一个新面孔出现,我们计算出新面孔的向量与所有已知人脸的向量之间的距离。为了识别正确的人脸,考虑了最小距离。但这个最小距离也应该低于一个阈值。如果最小距离高于阈值,则将其视为未知人脸。阈值是手动设置的。
给你个主意,这是个假例子-
假设你有5张已登记(已知)的脸。其载体为1 3. 5。假设您的模型用形状为1x1的向量表示每一张脸。
将阈值设置为0.4
您的距离函数定义为abs(vector1 - vector2)。
设想1-
一个新面孔出现,您的模型生成一个向量2.2。
因此,您可以计算出新面孔与已知面孔之间的距离,即- 1.2 1.2 3.2。
您的最小距离是0.2,它小于您的阈值0.4。因此,这张新面孔被认定为"2第二张脸“。
设想2-
一个新面孔出现,您的模型生成一个向量7.5。
因此,您可以计算出新面孔与已知面孔之间的距离,即- 6.5 4.5 2.5。
您的最小距离是2.5,超过您的阈值0.4。因此,这张新面孔被认定为“未知”面孔。
最后,
正如您所提到的,您可以使用基于KNN的方法。虽然它会产生非常准确的结果,但它的规模可能不太好。随着数据库中的面数增加,KNN方法将放慢速度。
https://datascience.stackexchange.com/questions/94983
复制相似问题