如何从头开始构建人脸识别系统?

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

我正在为人脸识别系统构建原型,在编写算法时,我有几个问题。

算法:

  1. 收集一对(A(i),P(i),N(i)) - 在XYX公司工作的员工的正面,负面图像。
  2. 使用梯度下降训练Triplet损失函数来学习CNN参数。实际上,我在这里训练一个Siamese network(想法在2个不同的输入上运行两个相同的CNN [一次在A(i)-P(i)和下一个A(i)-N(i)]然后比较它们) 。 enter image description here enter image description here这些学习的参数将确保相同图像的展平n-dim编码之间的距离很小,而不同的图像会很大。
  3. 现在,创建一个数据库,您将存储XYX公司员工每个培训图像的编码! 只需向前传递经过训练的CNN,并将每个图像的相应编码存储在数据库中
  4. 在测试时,您拥有XYX公司员工的形象和局外人的形象! 您将通过CNN传递两个测试图像并获得相应的编码! 现在,问题是你如何找到测试图片编码和数据库中所有训练图片编码之间的相似性? 第一个问题,你会做余弦相似还是我需要做别的事?你能为它增加更多的清晰度吗? 第二个问题,另外,在效率方面,您将如何处理一个场景,其中您在数据库中有100,000名员工进行训练图片编码,并且每个新人需要查看这100,000个编码并计算余弦相似度并给出结果<2秒?有关此部分的任何建议吗? 如果我们使用方法(图像 - > CNN - > SoftMax - >输出),通常用于面部识别任务的第三个问题,每当一个新人加入您的组织时,您需要重新训练您的网络,这就是为什么这是一个糟糕的方法! 通过使用第二种方法可以减轻这个问题,其中我们使用学习的距离函数“d(img1,img2)”在雇员的一对图像上,如上面在点1到3中所述。 我的问题是,如果一名新员工加入该组织,这个学习距离功能如何能够在未在训练集中使用时进行概括?是不是测试和火车组的数据分布变化的问题?在这方面有任何建议

任何人都可以帮助理解这些概念故障吗?

deep-learning computer-vision conv-neural-network face-detection face-recognition
1个回答
0
投票

在对计算机视觉中的人脸验证和识别/检测研究论文进行了一些文献调查。我想我能回答所有问题,所以我想在这里回答。

第一个问题,你会做余弦相似吗?你能为它增加更多的清晰度吗?

  • 通过简单地计算它们之间的欧几里德距离,找到测试和每个保存的火车图像的最小距离。
  • 不保持阈值说0.7并且最小距离<0.7返回员工姓名“不在数据库错误中!”

第二个问题,另外,在效率方面,您将如何处理一个场景,其中您在数据库中有100,000名员工进行训练图片编码,并且每个新人需要查看这100,000个编码并计算余弦相似度并给出结果<2秒?

  • 应该注意,在训练期间使用128维浮点矢量,但是它可以被量化为128字节而不会损失精度。因此,每个面由128维字节向量紧凑地表示,这对于大规模聚类和识别是理想的。较小的嵌入可能会在很小的精度下丢失,并且可以在移动设备上使用

第三个问题: - 首先,我们通过最小化三重态损失函数来学习深CNN(Siamese n / w)的网络参数!

  • 其次,我们假设您已经在数百万人的庞大数据集上训练了这些模型权重,这些权重已经学习了更高级别的特征,例如人的身份,性别等等!以及与人脸相关的边缘等低级特征。
  • 现在,假设这些模型参数至少可以代表任何人脸!所以你将继续通过向前传递你的网络来保存数据库中的“新人”编码,然后使用答案1计算该人是否属于组织(面部识别问题)。此外,在FaceNet论文中,我们提到我们保留了大约一百万张图像,与我们的训练集具有相同的分布,但不相同的身份。
  • 第三,这两种技术的不同之处在于我们使用损失函数在第一种技术中训练这些模型权重的方式:交叉熵softmax与第二种技术损失函数:三重损失函数!
© www.soinside.com 2019 - 2024. All rights reserved.