L2CS-Net
L2CS-Net — двухэтапный оценщик взгляда: детектор лиц находит лица, а ствол ResNet с двумя классификационными головами по угловым бинам предсказывает pitch и yaw для каждого лица. LibreYOLO поддерживает его только для инференса.
- Задачи
- gaze
- Размеры
- r18, r34, r50, r101, r152 at 448 px
- Установка
pip install libreyolo- Уровень поддержки
- Только инференс, начиная с v. Только предсказание, валидация и экспорт. Функции обучения неприменимы.
- Исходный проект
- L2CS-Net от Ahmed A. Abdelrahman et al., Gaze360 dataset terms: research and non-commercial use only, no redistribution. Статья, исходный код
- Лицензии
- Код: MIT, веса: Gaze360 dataset terms: research and non-commercial use only, no redistribution. Коммерческое использование
Установка
Чтобы создать модель, запустить на ней предсказание или экспортировать её, когда чекпойнт уже есть, L2CS-Net не нужны опциональные extra.
pip install libreyoloЕдинственный чекпойнт, который LibreYOLO может скачать автоматически, —
ResNet-50, обученный на Gaze360, — скачивается через gdown, а не с обычного
HTTP-зеркала, потому что лежит на Google Drive автора, а не в организации
LibreYOLO. Для этого пути нужен extra gaze:
pip install "libreyolo[gaze]"Без него LibreYOLO печатает инструкции по ручному скачиванию, а не молча падает.
Предсказание
from libreyolo import LibreYOLO, SAMPLE_IMAGE # face_detector не задан: используется штатный детектор лиц из# OpenCV (Haar в OpenCV 4, YuNet в OpenCV 5), поэтому кроме самого# чекпойнта L2CS ничего скачивать не нужно.model = LibreYOLO("LibreL2CSr50.pt")result = model(SAMPLE_IMAGE) print(result.gaze.pitch, result.gaze.yaw)libreyolo predict model=LibreL2CSr50.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=Truefrom libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreL2CSr50.pt") # Передать L2CS рамки от детектора, который вы уже запустили.result = model(SAMPLE_IMAGE, face_boxes=[[34, 12, 90, 80]]) # Или указать конкретный встроенный детектор лиц.result = model(SAMPLE_IMAGE, face_detector="yunet")L2CS-Net — двухэтапный оценщик: сначала работает детектор лиц, а голова взгляда
считывает pitch и yaw с каждого кропа лица, который тот вернул. Если ничего не
указать, предсказание откатывается к штатному детектору OpenCV, поэтому голый
вызов работает без дополнительных скачиваний, как только на руках есть сам
чекпойнт L2CS. face_boxes принимает рамки от детектора, который вы уже
запустили; face_detector принимает "auto", "haar", "yunet", модель
детекции LibreYOLO или обычный вызываемый объект. result.gaze содержит pitch
и yaw в радианах, построчно выровненные с result.boxes — найденными рамками
лиц. Про источники, стриминг и работу с результатом см.
предсказание.
Варианты
Пять глубин бэкбона используют одно входное разрешение и принимают одни и те же аргументы. На Gaze360, датасете за единственным опубликованным чекпойнтом, обучали ResNet-50; остальные четыре глубины поддержаны архитектурно, но опубликованных весов для загрузки у них нет.
Экспорт
| Задача | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| gaze | gaze to ONNX: поддерживается | gaze to TorchScript: поддерживается | gaze to ExecuTorch: поддерживается | gaze to TensorRT: поддерживается | gaze to OpenVINO: поддерживается | gaze to Paddle: не поддерживается | gaze to MNN: не поддерживается | gaze to RKNN: не поддерживается | gaze to ncnn: не поддерживается | gaze to TFLite: не поддерживается | gaze to CoreML: не поддерживается | gaze to Core AI: не поддерживается |
from libreyolo import LibreYOLO model = LibreYOLO("LibreL2CSr50.pt")model.export(format="onnx")model.export(format="tensorrt", half=True)libreyolo export model=LibreL2CSr50.pt format=onnximport numpy as npimport onnxruntime as ort # В экспортированном графе только ствол ResNet и две головы по# угловым бинам: он принимает предобработанный кроп лица 448x448 и# возвращает сырые (yaw_logits, pitch_logits), а не готовые углы.# Softmax, матожидание по бинам и перевод в градусы остаются в# Python; см. libreyolo.models.l2cs.utils.bin_logits_to_angles.session = ort.InferenceSession("LibreL2CSr50.onnx")name = session.get_inputs()[0].nameyaw_logits, pitch_logits = session.run( None, {name: np.zeros((1, 3, 448, 448), dtype=np.float32)})Лицензирование
Проверяйте лицензию в репозитории конкретных весов на Hugging Face. Она указана для каждого чекпойнта в организации LibreYOLO и может различаться даже внутри одного семейства. Этот репозиторий считается авторитетным источником, а сводка ниже описывает условия на момент последней проверки страницы.
Это описание соответствующих лицензий, а не юридическая консультация. Если ответ важен для коммерческого использования, прочитайте лицензии самостоятельно и проконсультируйтесь с юристом.
- Оригинальная работа
- L2CS-Net, Ahmed A. Abdelrahman et al.
- Лицензия исходного проекта
- Gaze360 dataset terms: research and non-commercial use only, no redistribution
- Исходный код проекта
- github.com/Ahmednull/L2CS-Net
- Код LibreYOLO
- MIT
- Веса
- Gaze360 dataset terms: research and non-commercial use only, no redistribution, распространяются авторами. LibreYOLO не размещает и не зеркалирует их.
- Толкование
- The L2CS-Net source is MIT and may be used, modified and redistributed, including commercially. The one checkpoint LibreYOLO can fetch automatically, a ResNet-50 trained on Gaze360, is not covered by that grant: the Gaze360 dataset license restricts use of models trained on it to research and non-commercial purposes and forbids redistribution. LibreYOLO does not mirror or host that checkpoint. It downloads it, on request, directly from the author's own distribution and prints the Gaze360 terms once before the transfer starts. A model trained on data you hold the rights to, using this MIT architecture, carries none of those restrictions.
LibreYOLO не размещает и не зеркалит ни один чекпойнт L2CS: в организации LibreYOLO на Hugging Face для этого семейства нет ничего, в отличие от большинства других семейств на этом сайте. Единственный чекпойнт, который библиотека может скачать автоматически, берётся напрямую из дистрибутива на Google Drive самого автора, за уведомлением о лицензии Gaze360, которое печатается перед началом передачи, и это не та копия, «переопубликованная на huggingface.co/LibreYOLO», о которой говорит сводка выше.