face_recognition 库如何在后台工作?

Posted

技术标签:

【中文标题】face_recognition 库如何在后台工作?【英文标题】:How does face_recognition library work in the background? 【发布时间】:2020-11-06 02:53:19 【问题描述】:

我正在使用人脸识别库来检测人脸。该模型从图像中获得 128 个嵌入。要检查两个面是否匹配,它会检查这两个点之间的距离是否小于 0.6。我不确定两个图像之间的距离是什么意思。根据我的理解,这是否意味着比较已知图像中两点之间的距离,以及我们希望它识别的图像中的距离。我在网上找不到任何关于此的文档。请帮忙

【问题讨论】:

【参考方案1】:

face_recognition 问题形成如下:

特征是每个数据点的两张图片,标签是这两张图片是否为同一个人(二元分类),但网络是在没有分类层的情况下构建的。训练模型后,输出称为嵌入。网络经过训练,使得同一个人的模型(嵌入)输出之间的距离很小,而不同的人则很大。您可以使用余弦距离作为度量来获取两个向量之间的距离(嵌入)等等。

注意:这是关于 face_recognition 工作原理的非常抽象的概念,如果您需要更多详细信息,可以阅读此paper。

【讨论】:

【参考方案2】:

face_recognition 包在后台使用 dlib。 Dlib 构建了一个 resnet 模型,它是一个 CNN 模型。 resnet 模型的输出层有 128 个节点。换句话说,当您将面部图像输入 resnet 模型时,它会生成 128 维向量。一些消息来源称这种表示形式。

当您比较两个面部图像时,您将它们分别输入 resnet 模型。因此,您将有两个 128D 向量作为输出。

最后,你需要找到这两个向量的相似度。求余弦相似度和欧几里得距离是最常用的求相似度的方法。 dlib 的作者发现了欧几里得距离的调谐阈值,它是 0.6。如果你会使用余弦相似度,那么阈值会非常不同。

问题是这个阈值是如何确定的?他将正负身份对传递给 resnet 模型,找到表示,最后他找到了每对身份的欧几里德距离。

当您拥有正例和负例的距离值时,您可以将其提供给基本决策树算法,例如 ID3、C4.5、CART 或 CHAID。它将找到最佳分割点来确定。

【讨论】:

以上是关于face_recognition 库如何在后台工作?的主要内容,如果未能解决你的问题,请参考以下文章

如何在后台工作人员运行时在 uwp 中加载图像

*** 客户端如何在后台工作?

如何使 phonegap 构建应用程序在后台工作

像 select() 或 poll() 这样的系统调用是如何在后台工作的?

C++,如何使控制台应用程序在关闭后在后台工作?

Whatsapp 和即时消息应用程序如何在没有 Oreo 持续通知的情况下在后台工作?