Посмотреть как Markdown

LibreFaceRec

LibreFaceRec — задача эмбеддингов лиц в LibreYOLO: детектор лиц находит и выравнивает лица, а голова распознавания выдаёт L2-нормированный эмбеддинг личности для верификации или поиска.

Задачи
embed
Размеры
Установка
pip install libreyolo
Уровень поддержки
Только инференс, начиная с v. Только предсказание, валидация и экспорт. Функции обучения неприменимы.
Исходный проект
AuraFace-v1 от fal.ai, Apache-2.0. Статья, исходный код
Лицензии
Код: MIT, веса: Apache-2.0. Коммерческое использование

Установка

Голова распознавания LibreFaceRec работает через 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-графа за одним вызовом: детектор лиц находит каждое лицо и выравнивает его в канонический кроп, а голова распознавания возвращает по одному L2-нормированному эмбеддингу на лицо. Если ничего не указывать, predict() сам скачивает и подключает встроенный детектор по умолчанию. face_detector принимает вызываемый объект, модель детекции LibreYOLO или экземпляр FaceDetector; face_boxes полностью обходит детекцию и берёт рамки, которые у вас уже есть. result.embeddings содержит по одной строке на каждое обнаруженное лицо, в том же порядке, что и result.boxes; его метод .similarity() за один вызов считает косинусную близость с другим эмбеддингом или с целой галереей. Чтобы сравнить напрямую два изображения, а не два уже посчитанных эмбеддинга, вызовите model.verify(image_a, image_b): он прогоняет детекцию и эмбеддинг для обоих и сравнивает лицо с наибольшей уверенностью. Любую другую ONNX-модель распознавания в соглашении ArcFace (на входе выровненный кроп, на выходе эмбеддинги (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
Исходный код проекта
huggingface.co/fal/AuraFace-v1
Код 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.

Встроенный детектор лиц по умолчанию — второй артефакт под второй лицензией: YuNet из OpenCV Zoo, 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. Таблицы поддержки, чекпойнты и результаты бенчмарков на этой странице сгенерированы из выпущенной библиотеки и опубликованных весов, а не написаны вручную.