face_recognition 图书馆如何在后台运作?

How does face_recognition library work in the background?

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

face_recognition问题构成如下:

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

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

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

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

最后,你需要找到这两个向量的相似度。寻找余弦相似度和欧氏距离是寻找相似度的最常用方法。 dlib 的作者找到了欧氏距离的调整阈值,它是 0.6。如果你会使用余弦相似度,那么阈值就会有很大的不同。

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

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