YOLO-NAS

Um detector convolucional cujo backbone e neck saíram da busca de arquiteturas da Deci.AI, construído com blocos RepVGG preparados para quantização. Seus pesos são da Deci.AI, licenciados apenas para uso não comercial, e o LibreYOLO não publica nenhum deles.

Tarefas
detection, pose
Tamanhos
s, m, l at 640 px
Instalação
pip install libreyolo
Nível de suporte
Núcleo, desde a v1.1.0. Detectores treináveis do núcleo: os recursos chegam depois dos carros-chefe na mesma leva de versões.
Origem
YOLO-NAS por Deci.AI, Deci.AI proprietary, non-commercial. Artigo, código-fonte
Licenças
Código Apache-2.0, pesos Deci.AI proprietary, non-commercial. Uso comercial

Instalação

O YOLO-NAS não precisa de nada além do pacote base.

bash
pip install libreyolo

Predição

Um nome de checkpoint que ainda não esteja em disco é baixado da CDN pública da Deci, não da organização do LibreYOLO, que não hospeda nenhum desses pesos. Antes de a transferência começar, a biblioteca imprime os termos de licença da Deci uma vez por processo, e antes de o arquivo baixado ser aberto seu SHA-256 é conferido contra um valor fixado. O que esses termos permitem está em licenciamento.

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Um nome que ainda não esteja em disco é baixado da CDN da Deci. O# download imprime antes os termos de licença da Deci; ficar com o# arquivo significa aceitá-los.model = LibreYOLO("LibreYOLONASs.pt")result = model(SAMPLE_IMAGE, save=True) for box in result.boxes:    print(box.cls, box.conf, box.xyxy)
CLI
libreyolo predict model=LibreYOLONASs.pt save=True \  source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg
Pose
from libreyolo import LibreYOLO, SAMPLE_IMAGE # O sufixo -pose seleciona a cabeça de pose e seu próprio conjunto de pesos.model = LibreYOLO("LibreYOLONASs-pose.pt")result = model(SAMPLE_IMAGE) print(result.keypoints.xy)

O objeto Results devolvido é o mesmo que toda família devolve, então trocar por outro detector é uma mudança de uma linha. conf define o limiar de confiança e iou o limiar do NMS. Veja predição para fontes, streaming e tratamento de resultados.

Variantes

Detecção e pose são a mesma arquitetura sob cabeças diferentes, e aceitam os mesmos argumentos. Os tamanhos da tabela abaixo são os de detecção; pose é publicado nesses e em um tamanho menor. A cabeça de pose prevê o conjunto de keypoints do COCO.

CheckpointEntrada (px)mAP 50-95Parâmetros (M)
LibreYOLONASl64056.366.98
LibreYOLONASm64055.451.18
LibreYOLONASs64051.819.05

COCO val2017, 500 images. Medido pelo conjunto de testes de benchmark do LibreYOLO e publicado no Vision Analysis, onde a latência entre hardwares e runtimes é comparada e os registros completos das execuções ficam disponíveis.

Treinamento

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLONASs.pt")model.train(data="my-dataset.yaml", epochs=100, imgsz=640, batch=16)
CLI
libreyolo train model=LibreYOLONASs.pt data=my-dataset.yaml \  epochs=100 imgsz=640 batch=16
Do zero
from libreyolo import LibreYOLONAS # Nenhum checkpoint da Deci é tocado: o modelo parte de pesos aleatórios,# então o que sai da execução deriva apenas dos seus dados.model = LibreYOLONAS(None, size="s")model.train(data="my-dataset.yaml", imgsz=640, batch=16)

epochs, lr0 e amp são resolvidos por tarefa quando você os omite, então uma execução de pose parte de padrões diferentes dos de uma execução de detecção. O otimizador é o AdamW por padrão. O número de classes vem do YAML do dataset e a cabeça é reconstruída para ele antes da primeira época; na cabeça de pose o número de keypoints é tratado do mesmo jeito, então um checkpoint de pose do COCO pode receber fine-tuning sobre um esqueleto de outro tamanho.

O fine-tuning parte dos pesos da Deci, que é o que a licença da Deci cobre. Treinar a partir de um modelo inicializado aleatoriamente não envolve nenhum checkpoint da Deci, e é isso que o terceiro snippet acima faz.

Veja treinamento para datasets, data augmentation, multi-GPU e loggers.

Validação

val() devolve um dicionário de chaves metrics/ cobrindo precisão, recall, mAP 50 e mAP 50-95, medidos contra qualquer dataset no formato em que você treinou.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLONASs.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])
CLI
libreyolo val model=LibreYOLONASs.pt data=my-dataset.yaml
Contra o COCO
# O yaml do COCO que vem junto carrega um script de download embutido,# então precisa de permissão explícita a menos que o dataset já esteja local.libreyolo val model=LibreYOLONASl.pt data=coco.yaml imgsz=640 \  allow_download_scripts=True

Exportação

TarefaONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
DetectionDetection to ONNX: compatívelDetection to TorchScript: compatívelDetection to ExecuTorch: compatívelDetection to TensorRT: compatívelDetection to OpenVINO: compatívelDetection to Paddle: compatívelDetection to MNN: compatívelDetection to RKNN: compatívelDetection to ncnn: compatívelDetection to TFLite: compatívelDetection to CoreML: incompatívelDetection to Core AI: compatível
PosePose to ONNX: compatívelPose to TorchScript: compatívelPose to ExecuTorch: compatívelPose to TensorRT: compatívelPose to OpenVINO: compatívelPose to Paddle: compatívelPose to MNN: incompatívelPose to RKNN: incompatívelPose to ncnn: compatívelPose to TFLite: incompatívelPose to CoreML: incompatívelPose to Core AI: incompatível

Um artefato exportado é carregado de volta pelo LibreYOLO() conforme o sufixo do arquivo, então um arquivo .onnx ou .engine se comporta como um checkpoint e devolve o mesmo Results. Rodar o grafo em um runtime puro, sem o LibreYOLO instalado, também é suportado, mas aí o pré-processamento e o pós-processamento ficam por sua conta. Cada formato instala um extra diferente e aceita alguns argumentos próprios. Os dois estão na página daquele formato.

Uma exportação é outra cópia dos mesmos pesos em um contêiner diferente. Exportar um checkpoint da Deci não muda nem de onde os pesos vieram nem a licença que os cobre.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLONASs.pt")model.export(format="onnx", imgsz=640)
CLI
libreyolo export model=LibreYOLONASs.pt format=onnx imgsz=640
Usar o arquivo exportado
from libreyolo import LibreYOLO, SAMPLE_IMAGE # A fábrica resolve pelo sufixo do arquivo, então um artefato exportado# carrega como qualquer checkpoint e devolve o mesmo objeto Results.model = LibreYOLO("LibreYOLONASs.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)

Checkpoints

Não há nenhum para listar. A licença da Deci proíbe a redistribuição, então a organização do LibreYOLO não publica pesos do YOLO-NAS e o download é resolvido em outro lugar: um nome no formato LibreYOLONAS<size>.pt, ou LibreYOLONAS<size>-pose.pt para pose, corresponde ao objeto equivalente na CDN pública da Deci.

Só dá para baixar assim os checkpoints cujo SHA-256 a biblioteca fixa. Qualquer outra coisa falha de forma fechada em vez de abrir um pickle de terceiros não verificado, e precisa ser baixada à mão e passada como caminho. Um arquivo que já esteja em disco carrega a partir do seu caminho, sem download e sem barreira de checksum. Isso inclui um .pth da Deci com o nome original, que o carregador reconhece.

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
YOLO-NAS, Deci.AI
Licença original
Deci.AI proprietary, non-commercial
Código do LibreYOLO
MIT
Pesos
Deci.AI proprietary, non-commercial, distribuído pelos autores. O LibreYOLO não hospeda nem espelha esses pesos.
Interpretação
Two licenses apply here and they are not the same. The SuperGradients source this port follows is Apache-2.0 and LibreYOLO's own implementation is MIT, so nothing restricts the architecture or the training code. Deci's published checkpoints are a different matter: the YOLO-NAS license grants a revocable, non-transferable right to use them and nothing more. It forbids redistribution and sublicensing, forbids offering them as a managed or remote service, restricts modification and reverse engineering, and rules out commercial use, including any model running in a production environment, unless you hold a separate agreement with Deci. LibreYOLO therefore does not mirror them, and prints those terms once before the download starts. Weights trained from a randomly initialized model on your own data derive from no Deci checkpoint.

O LibreYOLO não hospeda nem espelha esses pesos: não existe nada desta família na organização do LibreYOLO no Hugging Face. Em vez disso, todo download automático vai para a CDN pública da Deci, imprime os termos da Deci uma vez por processo antes de começar, e é conferido contra um SHA-256 fixado antes de o arquivo ser aberto.

Treinar a partir de um modelo inicializado aleatoriamente é a alternativa. A arquitetura é Apache-2.0 no upstream e MIT aqui, então um modelo treinado desse jeito com os seus próprios dados não deriva de nenhum checkpoint da Deci.

Citação

O YOLO-NAS foi lançado sem paper. A entrada abaixo é a que os autores pedem, e cobre o SuperGradients, a biblioteca em que ele foi distribuído.

@misc{supergradients,
  doi = {10.5281/ZENODO.7789328},
  url = {https://zenodo.org/record/7789328},
  author = {Aharon,  Shay and {Louis-Dupont} and {Ofri Masad} and Yurkova,  Kate and {Lotem Fridman} and {Lkdci} and Khvedchenya,  Eugene and Rubin,  Ran and Bagrov,  Natan and Tymchenko,  Borys and Keren,  Tomer and Zhilko,  Alexander and {Eran-Deci}},
  title = {Super-Gradients},
  publisher = {GitHub},
  journal = {GitHub repository},
  year = {2021},
}

Copiado do bloco de citação dos autores em github.com/Deci-AI/super-gradients#citing.

Verificado com o LibreYOLO v1.5.0. As tabelas de suporte, os checkpoints e os números de benchmark desta página são gerados a partir da biblioteca lançada e dos pesos publicados, não escritos à mão.