L2CS-Net

L2CS-Net to dwustopniowy estymator kierunku spojrzenia: detektor twarzy lokalizuje twarze, a główna część ResNet z dwiema głowicami klasyfikacji przedziałów kątowych przewiduje nachylenie i obrót dla każdej twarzy. LibreYOLO udostępnia go wyłącznie do inferencji.

Zadania
gaze
Rozmiary
r18, r34, r50, r101, r152 at 448 px
Instalacja
pip install libreyolo
Poziom obsługi
Tylko inferencja, od wersji v. Tylko predykcja, walidacja i eksport. Funkcje trenowania nie mają zastosowania.
Projekt źródłowy
L2CS-Net, autorzy: Ahmed A. Abdelrahman et al., licencja: Gaze360 dataset terms: research and non-commercial use only, no redistribution. Publikacja, kod źródłowy
Licencje
Kod: MIT, wagi: Gaze360 dataset terms: research and non-commercial use only, no redistribution. Użycie komercyjne

Instalacja

L2CS-Net nie wymaga dodatku do utworzenia modelu, uruchamiania predykcji ani eksportu, jeśli checkpoint jest już dostępny.

bash
pip install libreyolo

Jedyny checkpoint, który LibreYOLO może pobrać automatycznie, czyli ResNet-50 wytrenowany na Gaze360, jest pobierany przez gdown, a nie zwykłą kopię lustrzaną HTTP, ponieważ znajduje się na Google Drive autora zamiast w organizacji LibreYOLO. Ta ścieżka wymaga dodatku gaze:

bash
pip install "libreyolo[gaze]"

Bez niego LibreYOLO wypisuje instrukcje ręcznego pobierania zamiast po cichu kończyć działanie błędem.

Predykcja

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Gdy nie podano face_detector, używany jest dołączony detektor twarzy OpenCV# (Haar w OpenCV 4, YuNet w OpenCV 5), dlatego przykład działa bez# pobierania czegokolwiek poza samym checkpointem L2CS.model = LibreYOLO("LibreL2CSr50.pt")result = model(SAMPLE_IMAGE) print(result.gaze.pitch, result.gaze.yaw)
CLI
libreyolo predict model=LibreL2CSr50.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=True
Źródło twarzy
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreL2CSr50.pt") # Przekazanie do L2CS ramek z wcześniej uruchomionego detektora.result = model(SAMPLE_IMAGE, face_boxes=[[34, 12, 90, 80]]) # Albo wskazanie konkretnego dołączonego detektora twarzy.result = model(SAMPLE_IMAGE, face_detector="yunet")

L2CS-Net jest estymatorem dwustopniowym. Najpierw działa detektor twarzy, a głowica spojrzenia odczytuje nachylenie i obrót z każdego zwróconego przycięcia twarzy. Bez dodatkowej konfiguracji predykcja korzysta z dołączonego detektora OpenCV, dlatego zwykłe wywołanie działa bez dodatkowego pobierania, gdy checkpoint L2CS jest już dostępny. face_boxes przyjmuje ramki z wcześniej uruchomionego detektora. face_detector przyjmuje "auto", "haar", "yunet", model detekcji LibreYOLO albo zwykły obiekt wywoływalny. result.gaze zawiera nachylenie i obrót w radianach, wyrównane wiersz po wierszu z result.boxes, czyli wykrytymi ramkami twarzy. Więcej informacji o źródłach, streamingu i obsłudze wyników zawiera strona predykcji.

Warianty

Pięć głębokości backbone współdzieli jedną rozdzielczość wejściową i przyjmuje te same argumenty. Gaze360, zbiór danych stojący za jedynym opublikowanym checkpointem, posłużył do wytrenowania ResNet-50. Pozostałe cztery głębokości są obsługiwane architektonicznie, ale nie mają opublikowanych wag do wczytania.

Eksport

ZadanieONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
gazegaze to ONNX: obsługiwanegaze to TorchScript: obsługiwanegaze to ExecuTorch: obsługiwanegaze to TensorRT: obsługiwanegaze to OpenVINO: obsługiwanegaze to Paddle: brak obsługigaze to MNN: brak obsługigaze to RKNN: brak obsługigaze to ncnn: brak obsługigaze to TFLite: brak obsługigaze to CoreML: brak obsługigaze to Core AI: brak obsługi

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreL2CSr50.pt")model.export(format="onnx")model.export(format="tensorrt", half=True)
CLI
libreyolo export model=LibreL2CSr50.pt format=onnx
Użycie wyeksportowanego pliku
import numpy as npimport onnxruntime as ort # Wyeksportowany graf zawiera tylko główną część ResNet i dwie głowice przedziałów# kątowych. Przyjmuje przetworzone wstępnie przycięcie twarzy 448x448 i zwraca surowe# (yaw_logits, pitch_logits), a nie zdekodowane kąty. Softmax,# wartość oczekiwana przedziału i konwersja na stopnie pozostają w Pythonie. Zobacz# 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)})

Licencja

Sprawdź licencję w repozytorium konkretnych pobieranych wag na Hugging Face. Każdy checkpoint w organizacji LibreYOLO ma licencję, która nie zawsze jest taka sama w całej rodzinie. To repozytorium jest źródłem rozstrzygającym, a poniższe podsumowanie opisuje stan z chwili ostatniej weryfikacji tej strony.

To opis obowiązujących licencji, a nie porada prawna. Jeśli odpowiedź ma znaczenie komercyjne, przeczytaj licencje i zasięgnij własnej porady prawnej.

Oryginalna praca
L2CS-Net, Ahmed A. Abdelrahman et al.
Licencja projektu źródłowego
Gaze360 dataset terms: research and non-commercial use only, no redistribution
Kod źródłowy projektu
github.com/Ahmednull/L2CS-Net
Kod LibreYOLO
MIT
Wagi
Gaze360 dataset terms: research and non-commercial use only, no redistribution, rozpowszechniane przez autorów. LibreYOLO ich nie hostuje ani nie udostępnia kopii.
Interpretacja
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 nie hostuje ani nie tworzy kopii lustrzanej żadnego checkpointu L2CS. W przeciwieństwie do większości pozostałych rodzin na tej stronie w organizacji LibreYOLO na Hugging Face nie ma żadnych plików tej rodziny. Jedyny checkpoint, który biblioteka może pobrać automatycznie, pochodzi bezpośrednio z własnej dystrybucji autora na Google Drive, jest kontrolowany przez informację o licencji Gaze360 wyświetlaną przed rozpoczęciem transferu i nie jest kopią „republished at huggingface.co/LibreYOLO”, którą sugeruje powyższe podsumowanie.

Zweryfikowano z LibreYOLO v1.5.0. Tabele obsługi, checkpointy i wyniki benchmarków na tej stronie są generowane na podstawie wydanej biblioteki i opublikowanych wag, a nie wpisywane ręcznie.