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

时间:2019-02-21 02:52:55

标签: keras deep-learning feature-extraction training-data pre-trained-model

我的项目的目的是在手机上提取特定的面部特征。这是使用用户面部的验证应用程序。给定同一个人的两张不同图像,则尽可能地提取特征。

现在,我使用VGGFace团队的预训练模型和权重作为特征提取器,您可以在here中下载模型。但是,当我基于模型提取特征时,结果不够好,我描述了自己的工作和想要做的事情,如下所示:

我从Emma Watson的图像中提取特征,图像_1返回特征_1,图像2返回特征_2,依此类推(矢量长度= 2048)。如果feature [i]> 0.0,请将其转换为1。

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

然后,我使用汉明距离比较两个特征向量。汉明距离只是比较的一种幼稚方式,在实际项目中,我将在比较之前对这些特征进行量化。但是,即使我使用2个神经面部表情图像(相同的情感,不同的情感类型返回的结果也更差),两个Emma图像之间的距离仍然很大。

我的问题是我如何训练模型以提取目标用户的特征。成像方面,Emma是目标用户,她的手机只需要提取其功能即可。当有人尝试解锁Emma的手机时,她的手机会提取此人的脸,然后与保存的Emma的功能进行比较。另外,我不想训练一个模型来对2个类别的Emma进行分类,而不是对Emma进行分类。我需要比较提取的特征。

总而言之,如果我们比较来自同一个人的不同图像的特征,则距离(差异)应为“接近”(较小)。如果我们比较不同人的不同图像的特征,则距离应为“远”(大)。

非常感谢您。

1 个答案:

答案 0 :(得分:1)

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