YOLO-NAS

Un detector convolucional cuyo backbone y cuello salieron de la búsqueda de arquitecturas de Deci.AI, construido con bloques RepVGG preparados para la cuantización. Sus pesos son de Deci.AI, con licencia solo para uso no comercial, y LibreYOLO no publica ninguno.

Tareas
detection, pose
Tamaños
s, m, l at 640 px
Instalación
pip install libreyolo
Nivel de compatibilidad
Núcleo, desde v1.1.0. Detectores entrenables del núcleo: las funciones siguen a los modelos emblemáticos en la misma oleada de versiones.
Proyecto original
YOLO-NAS de Deci.AI, Deci.AI proprietary, non-commercial. Artículo, fuente
Licencias
Código Apache-2.0, pesos Deci.AI proprietary, non-commercial. Uso comercial

Instalación

YOLO-NAS no necesita nada más allá del paquete base.

bash
pip install libreyolo

Predicción

Un nombre de checkpoint que no esté ya en disco se descarga de la CDN pública de Deci, no de la organización de LibreYOLO, que no aloja ninguno de estos pesos. Antes de que empiece la transferencia, la biblioteca imprime los términos de licencia de Deci una vez por proceso, y antes de abrir el archivo descargado comprueba su SHA-256 contra un valor fijado. Lo que esos términos permiten está en licencia.

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Un nombre que no esté ya en disco se descarga de la CDN de Deci. La# descarga imprime antes los términos de licencia de Deci; quedarte con# el archivo implica aceptarlos.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 # El sufijo -pose selecciona la cabeza de pose y su propio juego de pesos.model = LibreYOLO("LibreYOLONASs-pose.pt")result = model(SAMPLE_IMAGE) print(result.keypoints.xy)

El objeto Results devuelto es el mismo que devuelven todas las familias, así que cambiar a otro detector es un cambio de una línea. conf fija el umbral de confianza e iou el umbral de NMS. Consulta predicción para fuentes, streaming y manejo de resultados.

Variantes

Detección y pose son la misma arquitectura bajo cabezas distintas, y aceptan los mismos argumentos. Los tamaños de la tabla de abajo son los de detección; pose se publica en esos y en un tamaño más pequeño. La cabeza de pose predice el conjunto de keypoints de COCO.

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

COCO val2017, 500 images. Medido con el sistema de benchmarks de LibreYOLO y publicado en Vision Analysis, donde se comparan la latencia entre distintos hardwares y runtimes y se conservan los registros completos de las ejecuciones.

Entrenamiento

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
Desde cero
from libreyolo import LibreYOLONAS # No se toca ningún checkpoint de Deci: el modelo parte de pesos# aleatorios, así que lo que salga de la ejecución deriva solo de tus datos.model = LibreYOLONAS(None, size="s")model.train(data="my-dataset.yaml", imgsz=640, batch=16)

epochs, lr0 y amp se resuelven por tarea cuando los omites, así que una ejecución de pose parte de valores por defecto distintos que una de detección. El optimizador es AdamW por defecto. El número de clases sale del YAML del dataset y la cabeza se reconstruye para él antes de la primera época; en la cabeza de pose el número de keypoints se maneja igual, así que a un checkpoint de pose de COCO se le puede hacer fine-tuning sobre un esqueleto de otro tamaño.

El fine-tuning parte de los pesos de Deci, que es lo que cubre la licencia de Deci. Entrenar desde un modelo inicializado al azar no involucra ningún checkpoint de Deci, y eso es el tercer snippet de arriba.

Consulta entrenamiento para datasets, aumento de datos (data augmentation), multi-GPU y loggers.

Validación

val() devuelve un diccionario de claves metrics/ que cubren precisión, recall, mAP 50 y mAP 50-95, medidos contra cualquier dataset en el formato con el que entrenaste.

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 COCO
# El yaml de COCO incluido lleva un script de descarga embebido, así que# necesita permiso explícito salvo que el dataset ya esté en local.libreyolo val model=LibreYOLONASl.pt data=coco.yaml imgsz=640 \  allow_download_scripts=True

Exportación

TareaONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
DetectionDetection to ONNX: compatibleDetection to TorchScript: compatibleDetection to ExecuTorch: compatibleDetection to TensorRT: compatibleDetection to OpenVINO: compatibleDetection to Paddle: compatibleDetection to MNN: compatibleDetection to RKNN: compatibleDetection to ncnn: compatibleDetection to TFLite: compatibleDetection to CoreML: no compatibleDetection to Core AI: compatible
PosePose to ONNX: compatiblePose to TorchScript: compatiblePose to ExecuTorch: compatiblePose to TensorRT: compatiblePose to OpenVINO: compatiblePose to Paddle: compatiblePose to MNN: no compatiblePose to RKNN: no compatiblePose to ncnn: compatiblePose to TFLite: no compatiblePose to CoreML: no compatiblePose to Core AI: no compatible

Un artefacto exportado se vuelve a cargar con LibreYOLO() según su sufijo de archivo, así que un archivo .onnx o .engine se comporta como un checkpoint y devuelve el mismo Results. Ejecutar el grafo en un runtime pelado, sin LibreYOLO instalado, también está soportado, pero entonces el preprocesado y el postprocesado corren de tu cuenta. Cada formato instala un extra distinto y acepta unos cuantos argumentos propios. Ambas cosas están en la página de ese formato.

Una exportación es otra copia de los mismos pesos en un contenedor distinto. Exportar un checkpoint de Deci no cambia ni de dónde vienen los pesos ni la licencia que los cubre.

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 el archivo exportado
from libreyolo import LibreYOLO, SAMPLE_IMAGE # La factoría resuelve según el sufijo del archivo, así que un artefacto# exportado se carga como cualquier checkpoint y devuelve el mismo objeto Results.model = LibreYOLO("LibreYOLONASs.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)

Checkpoints

No hay ninguno que listar. La licencia de Deci prohíbe la redistribución, así que la organización de LibreYOLO no publica pesos de YOLO-NAS y la descarga se resuelve en otro sitio: un nombre de la forma LibreYOLONAS<size>.pt, o LibreYOLONAS<size>-pose.pt para pose, se corresponde con el objeto equivalente en la CDN pública de Deci.

Solo se pueden descargar así los checkpoints cuyo SHA-256 tiene fijado la biblioteca. Cualquier otra cosa falla en cerrado en lugar de abrir un pickle de terceros sin verificar, y hay que descargarla a mano y pasarla como ruta. Un archivo que ya esté en disco se carga desde su ruta, sin descarga y sin control de checksum. Eso incluye un .pth de Deci con su nombre original, que el cargador reconoce.

Licencia

Comprueba la licencia en el repositorio de Hugging Face de los pesos concretos que descargues. Cada checkpoint de la organización de LibreYOLO incluye una, y no siempre es la misma en toda una familia. Ese repositorio es la fuente autorizada; el resumen siguiente describe qué se aplicaba cuando se verificó esta página por última vez.

Esta es una descripción de las licencias implicadas, no asesoramiento legal. Si la respuesta es importante a nivel comercial, lee las licencias y busca tu propio asesoramiento.

Trabajo original
YOLO-NAS, Deci.AI
Licencia del proyecto original
Deci.AI proprietary, non-commercial
Fuente del proyecto original
github.com/Deci-AI/super-gradients
Código de LibreYOLO
MIT
Pesos
Deci.AI proprietary, non-commercial, distribuidos por sus autores. LibreYOLO no los aloja ni los replica.
Interpretación
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.

LibreYOLO ni aloja ni replica estos pesos: no existe nada de esta familia en la organización de LibreYOLO en Hugging Face. En su lugar, cada descarga automática va a la CDN pública de Deci, imprime los términos de Deci una vez por proceso antes de empezar, y se comprueba contra un SHA-256 fijado antes de abrir el archivo.

Entrenar desde un modelo inicializado al azar es la alternativa. La arquitectura es Apache-2.0 upstream y MIT aquí, así que un modelo entrenado de esa forma con tus propios datos no deriva de ningún checkpoint de Deci.

Cita

YOLO-NAS se publicó sin paper. La entrada de abajo es la que piden sus autores, y cubre SuperGradients, la biblioteca en la que se distribuyó.

@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 del bloque de cita de los autores en github.com/Deci-AI/super-gradients#citing.

Verificado con LibreYOLO v1.5.0. Las tablas de compatibilidad, los checkpoints y las cifras de rendimiento de esta página se generan a partir de la biblioteca publicada y los pesos publicados; no se escriben a mano.