1

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

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

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

4

2 回答 2

0

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

于 2021-05-24T10:49:01.597 回答
0

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

于 2018-02-01T15:21:24.767 回答