我正在尝试创建一个能够在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%),但使用嵌入分数得分非常低。一般来说管道有问题吗?如何评估嵌入以进行验证?
答案 0 :(得分:0)
没关系,方法是正确的,在线提供的facenet模型训练不足,这就是得分差的原因。由于该模型是在另一个数据集上训练而不是文章中描述的原始模型(显然),因此验证得分将低于预期。但是,如果您将恒定阈值设置为所需的值,则可能会增加真正的积极因素,但会牺牲f1分数。
答案 1 :(得分:0)
您可以使用相似性搜索引擎。使用近似的 kNN 搜索库(例如 Faiss 或 Nmslib)、云就绪的相似性搜索开源工具(例如 Milvus)或生产就绪的托管服务(例如 Pinecone.io)。