L2CS-Net
O L2CS-Net é um estimador de olhar em dois estágios: um detector de rostos localiza os rostos, e um tronco ResNet com duas cabeças de classificação por bins de ângulo prediz pitch e yaw para cada rosto. O LibreYOLO o encapsula somente para inferência.
- Tarefas
- gaze
- Tamanhos
- r18, r34, r50, r101, r152 at 448 px
- Instalação
pip install libreyolo- Nível de suporte
- Somente inferência, desde a v. Somente predição, validação e exportação. Os recursos de treinamento não se aplicam.
- Origem
- L2CS-Net por Ahmed A. Abdelrahman et al., Gaze360 dataset terms: research and non-commercial use only, no redistribution. Artigo, código-fonte
- Licenças
- Código MIT, pesos Gaze360 dataset terms: research and non-commercial use only, no redistribution. Uso comercial
Instalação
O L2CS-Net não precisa de nenhum extra para construir, fazer predições ou exportar um modelo do qual você já tenha um checkpoint.
pip install libreyoloO único checkpoint que o LibreYOLO consegue buscar automaticamente, um
ResNet-50 treinado no Gaze360, é baixado via gdown em vez de um mirror HTTP
simples, porque ele fica no Google Drive do autor e não na org do LibreYOLO.
Esse caminho precisa do extra gaze:
pip install "libreyolo[gaze]"Sem ele, o LibreYOLO imprime instruções de download manual em vez de falhar silenciosamente.
Predição
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Sem face_detector: cai no detector de rostos embutido do OpenCV# (Haar no OpenCV 4, YuNet no OpenCV 5), então isso roda sem nenhum# download além do próprio checkpoint do 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") # Passe ao L2CS boxes de um detector que você já rodou.result = model(SAMPLE_IMAGE, face_boxes=[[34, 12, 90, 80]]) # Ou nomeie um detector de rostos embutido específico.result = model(SAMPLE_IMAGE, face_detector="yunet")O L2CS-Net é um estimador de dois estágios: um detector de rostos roda
primeiro, e a cabeça de olhar lê pitch e yaw de cada recorte de rosto que ele
devolve. Sem configuração, a predição recorre ao detector embutido do OpenCV,
então uma chamada simples funciona sem nenhum download adicional assim que você
tiver em mãos o próprio checkpoint do L2CS. face_boxes aceita boxes de um
detector que você já rodou; face_detector aceita "auto", "haar",
"yunet", um modelo de detecção do LibreYOLO ou um callable simples.
result.gaze carrega pitch e yaw em radianos, alinhados linha a linha com
result.boxes, as caixas de rosto detectadas. Veja
predição para fontes, streaming e tratamento de resultados.
Variantes
Cinco profundidades de backbone compartilham uma mesma resolução de entrada e aceitam os mesmos argumentos. O Gaze360, o dataset por trás do único checkpoint publicado, treinou um ResNet-50; as outras quatro profundidades são suportadas arquiteturalmente, mas não têm pesos publicados para carregar.
Exportação
| Tarefa | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| gaze | gaze to ONNX: compatível | gaze to TorchScript: compatível | gaze to ExecuTorch: compatível | gaze to TensorRT: compatível | gaze to OpenVINO: compatível | gaze to Paddle: incompatível | gaze to MNN: incompatível | gaze to RKNN: incompatível | gaze to ncnn: incompatível | gaze to TFLite: incompatível | gaze to CoreML: incompatível | gaze to Core AI: incompatível |
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 # O grafo exportado é só o tronco ResNet e as duas cabeças de bins# de ângulo: ele recebe um recorte de rosto 448x448 pré-processado e# devolve (yaw_logits, pitch_logits) crus, não ângulos decodificados.# O softmax, a esperança sobre os bins e a conversão para graus ficam# no Python; veja 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)})Licenciamento
Confira a licença no repositório do Hugging Face correspondente aos pesos que você baixar. Cada checkpoint na organização LibreYOLO tem uma licença, e ela nem sempre é a mesma em toda a família. Esse repositório é a fonte oficial. O resumo abaixo descreve o que se aplicava na última verificação desta página.
Esta é uma descrição das licenças envolvidas, não uma orientação jurídica. Se a resposta tiver importância comercial, leia as licenças e procure sua própria assessoria.
- Trabalho original
- L2CS-Net, Ahmed A. Abdelrahman et al.
- Licença original
- Gaze360 dataset terms: research and non-commercial use only, no redistribution
- Código-fonte original
- github.com/Ahmednull/L2CS-Net
- Código do LibreYOLO
- MIT
- Pesos
- Gaze360 dataset terms: research and non-commercial use only, no redistribution, distribuído pelos autores. O LibreYOLO não hospeda nem espelha esses pesos.
- Interpretação
- 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.
O LibreYOLO não hospeda nem espelha nenhum checkpoint do L2CS: não existe nada dessa família na org do LibreYOLO no Hugging Face, diferente da maioria das outras famílias deste site. O único checkpoint que a biblioteca consegue buscar automaticamente vem direto da distribuição no Google Drive do próprio autor, atrás do aviso de licença do Gaze360 impresso antes de a transferência começar, e não é a cópia "republicada em huggingface.co/LibreYOLO" que o resumo acima dá a entender.