查看 Markdown

LibreFaceRec

LibreFaceRec 是 LibreYOLO 的人脸嵌入向量任务:一个人脸检测器负责定位并对齐人脸,一个识别 head 产出经过 L2 归一化的身份嵌入向量,用来做验证或者检索。

任务
embed
尺寸
安装
pip install libreyolo
支持层级
仅推理,自 v 起。仅支持预测、验证和导出。训练相关的功能不适用。
上游
AuraFace-v1,由 fal.ai 发布,采用 Apache-2.0 许可。论文源码
许可
代码采用 MIT,权重采用 Apache-2.0。商用

安装

LibreFaceRec 的识别 head 跑在 onnxruntime 上,而它不属于基础安装的一部分。

bash
pip install "libreyolo[onnx]"

预测

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE # librefacerec-* 这类名字不管文件后缀是什么都会路由到这个家族,并在# 首次使用时连同默认的人脸检测器一起,从 LibreYOLO 的 Hugging Face# 组织下载model = LibreYOLO("librefacerec-l.onnx")result = model(SAMPLE_IMAGE) print(result.embeddings.data.shape)   # (N, D),已做 L2 归一化
CLI
libreyolo predict model=librefacerec-l.onnx source=face.jpg
人脸验证
from libreyolo import LibreYOLO model = LibreYOLO("librefacerec-l.onnx") # 用两张图像中各自最显著的那张人脸、它们 L2 归一化嵌入向量之间的# 余弦相似度来做比较result = model.verify("person_a.jpg", "person_b.jpg", threshold=0.4)print(result["similarity"], result["same_person"])
图库检索
from libreyolo import LibreYOLO model = LibreYOLO("librefacerec-l.onnx") query = model("query.jpg").embeddings          # 这张图像里的人脸gallery = model.embed(["a.jpg", "b.jpg", "c.jpg"])   # (N_total, D) # (query_faces, N_total) 的余弦相似度scores = query.similarity(gallery)

检测和识别是一次调用背后的两张独立 ONNX 计算图:人脸检测器定位每一张人脸,并把 它对齐成一个标准裁剪,识别 head 则为每张人脸返回一个经过 L2 归一化的嵌入向量。 什么都不设时,predict() 会自动下载并配上自带的默认检测器。face_detector 接受 一个可调用对象、一个 LibreYOLO 检测模型,或者一个 FaceDetector 实例; face_boxes 则用你已经有的检测框完全跳过检测这一步。result.embeddings 每检测到 一张人脸就存一行,和 result.boxes 一一对应;它的 .similarity() 方法一次调用就 能算出与另一个嵌入向量、或者与整个图库之间的余弦相似度。如果你要直接比较两张 图像,而不是两个已经算好的嵌入向量,model.verify(image_a, image_b) 会对两张图都 跑一遍检测和嵌入,然后比较各自置信度最高的那张人脸。任何其他遵循 ArcFace 约定的 ONNX 识别模型(输入对齐后的裁剪,输出 (N, D) 嵌入向量)都可以替换进来,只要传 它的文件路径而不是 librefacerec-* 名字。数据源、流式处理和结果处理见 预测

导出

任务ONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
embedembed to ONNX:不支持embed to TorchScript:不支持embed to ExecuTorch:不支持embed to TensorRT:不支持embed to OpenVINO:不支持embed to Paddle:不支持embed to MNN:不支持embed to RKNN:不支持embed to ncnn:不支持embed to TFLite:不支持embed to CoreML:不支持embed to Core AI:不支持

LibreFaceRec 封装的本来就是一张预先导出好的 ONNX 计算图;把它再导出成另一种格式 还没有实现。

许可证

请检查你所下载的具体权重在 Hugging Face 仓库中的许可。LibreYOLO 组织里的每个检查点都附有许可,同一家族内也不一定相同。该仓库是权威来源;以下摘要说明本页上次验证时适用的情况。

这里只说明涉及的许可证,不构成法律意见。如果答案对商用很重要,请自行阅读许可证并咨询法律顾问。

原始工作
AuraFace-v1, fal.ai
上游许可
Apache-2.0
LibreYOLO 代码
MIT
权重
采用 Apache-2.0 许可,由作者分发。LibreYOLO 不托管或镜像这些权重。
解读
Apache-2.0 covers the embedding weights (AuraFace-v1's glintr100 recognition head), so they may be used, modified and redistributed, including commercially, provided the license text and attribution notices travel with any copy. LibreYOLO's default face detector is a separate artifact under a separate license, MIT (OpenCV Zoo's YuNet, copyright Shiqi Yu). No code is ported from either project: both graphs are consumed opaquely through onnxruntime, so LibreYOLO's own wrapper code, which carries no third-party architecture, is MIT throughout. Any other ArcFace-convention ONNX recognition model can be substituted by passing its file path, and that file's own license then applies instead of AuraFace-v1's.

自带的默认人脸检测器是第二份产物,适用的是第二份许可证:OpenCV Zoo 的 YuNet, MIT,版权归 Shiqi Yu。两个项目的架构代码都没有被移植过来;两张计算图都通过 onnxruntime 以不透明的方式调用,所以 LibreYOLO 自己的封装不含任何第三方代码, 从头到尾都是 MIT。

引用

@inproceedings{deng2019arcface,
  title={Arcface: Additive angular margin loss for deep face recognition},
  author={Deng, Jiankang and Guo, Jia and Xue, Niannan and Zafeiriou, Stefanos},
  booktitle={CVPR},
  year={2019}
}

复制自作者在 github.com/deepinsight/insightface/tree/master/recognition/arcface_torch#citations 上提供的引用块。

已针对 LibreYOLO v1.5.0 验证。本页的支持表、检查点和基准测试数据由已发布的库和权重生成,并非手工编写。