如何使用不同的图像提取同一个人的特定特征?

How to extract specific features of same person using different image?

我的项目的目的是在移动设备上提取特定的面部特征 phone。这是一个使用用户面部的验证应用程序。给定同一个人的两张不同图像,提取尽可能接近的特征。

目前,我使用VGGFace团队的预训练模型和权重作为特征提取器,您可以在here下载模型。然而,当我基于模型提取特征时,结果不够好,我描述了我做了什么以及我想要什么:

我从Emma Watson的图片中提取特征,image_1 returns feature_1, image2 returns feature_2等(向量长度= 2048).如果 feature[i] > 0.0,将其转换为 1。

for i in range(0, 2048): if feature1[0][i] > 0.0: feature1[0][i] = 1

然后,我使用汉明距离比较两个特征向量。汉明距离只是一种比较天真的方式,在实际项目中,我会在比较之前量化这些特征。然而,即使我使用了 2 张神经面部表情图像(相同的情绪,不同的情绪类型 return 更差的结果),Emma 的 2 张图像之间的距离仍然很大。

我的问题是如何训练模型来提取目标用户的特征。想象一下,Emma是一个目标用户,她phone只需要抽取她的特征。当有人试图解锁 Emma 的 phone 时,她 phone 提取此人的脸,然后与保存的 Emma 的特征进行比较。此外,我不想训练模型来分类 2 类 Emma 而不是 Emma。我需要的是比较提取的特征。

综上所述,如果我们比较同一个人不同图像的特征,距离(差异)应该是"close"(小)。如果我们比较不同人的不同图像的特征,距离应该是"far"(大)。

非常感谢。

我会执行以下操作:我们想要从 ConvNet 的深层计算特征,最终将新图像与基础图像进行比较。假设这个深层为您提供特征向量 f。现在,创建一个包含图像对和标签 y 的数据集。比如说,如果两个图像与基本图像是同一个人,则 y = 1,如果它们不同,则 y = 0。然后,计算元素差异并将其输入逻辑回归单元以获得 y_hat:y_hat = sigmoid(np.multiply(W, np.sum(abs(f1 - f2)) + b)。您将必须创建一个 "Siamese" 网络,其中您有两个相同的 ConvNets,一个给您 f1 一个图像,另一个给您 f2 另一个来自同一示例对的图像。 Siamese 网络需要始终具有准确的权重,因此您需要确保它们的权重始终相同。当您训练这个新网络时,您应该会得到想要的结果。