如何在 LFW 上评估用于人脸验证的 FaceNet 嵌入?

How can I evaluate FaceNet embeddings for face verification on LFW?

我正在尝试创建一个能够在 lfw 数据集上评估模型的脚本。作为一个过程,我正在读取一对图像(使用 LFW 注释列表),跟踪和裁剪面部,对齐它并通过预训练的 facenet 模型(.pb 使用 tensorflow)并提取特征。特征向量大小 = (1,128),输入图像为 (160,160)。

为了评估验证任务,我使用的是 Siamese 架构。也就是说,我从两个相同的模型([2 x facenet] 传递一对图像(相同或不同的人),这相当于从单个网络传递一批大小为 2 的图像)并计算欧氏距离嵌入。最后,我正在训练一个线性 SVM 分类器,当嵌入距离较小时提取 0,否则使用对标签提取 1。通过这种方式,我试图学习测试时要使用的阈值。

使用此架构,我得到的分数最高为 60%。另一方面,在其他模型(例如 vgg-face)上使用相同的架构,其中的特征是 4096 [fc7:0](不是嵌入)我得到 90%。我绝对无法复制我在网上看到的分数 (99.x%),但是使用嵌入的分数非常低。一般管道有问题吗?如何评估嵌入以进行验证?

没关系,方法是正确的,在线可用的 facenet 模型训练不足,这就是分数低的原因。由于此模型是在另一个数据集上训练的,而不是论文中描述的原始数据集(显然),因此验证分数将低于预期。但是,如果您将恒定阈值设置为所需值,您可能会增加真阳性,但会牺牲 f1 分数。

您可以使用相似度搜索引擎。使用近似的 kNN 搜索库(例如 Faiss 或 Nmslib)、云就绪的相似性搜索开源工具(例如 Milvus)或生产就绪的托管服务(例如 Pinecone.io.