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

问题描述 投票:1回答:1

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

现在,我使用VGGFace团队的预训练模型和权重作为特征提取器,您可以在here下载该模型。但是,当我根据模型提取特征时,结果不够好,我描述了我做了什么以及我想要的如下:

我从Emma Watson的图像中提取特征,image_1返回feature_1,image2返回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个神经面部表情图像(同一情绪,不同情绪类型返回更差的结果),Emma的两个图像之间的距离仍然很大。

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

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

非常感谢。

keras deep-learning feature-extraction training-data pre-trained-model
1个回答
1
投票

我将执行以下操作:我们希望从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用于来自同一示例对的另一个图像。连体网络需要始终具有精确的权重,因此您需要始终确保它们的权重彼此相同。当您训练这个新网络时,您应该得到理想的结果。

© www.soinside.com 2019 - 2024. All rights reserved.