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.
- 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.
pip install libreyoloPredicció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.
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)libreyolo predict model=LibreYOLONASs.pt save=True \ source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpgfrom 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.
| Checkpoint | Entrada (px) | mAP 50-95 | Parámetros (M) |
|---|---|---|---|
| LibreYOLONASl | 640 | 56.3 | 66.98 |
| LibreYOLONASm | 640 | 55.4 | 51.18 |
| LibreYOLONASs | 640 | 51.8 | 19.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
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLONASs.pt")model.train(data="my-dataset.yaml", epochs=100, imgsz=640, batch=16)libreyolo train model=LibreYOLONASs.pt data=my-dataset.yaml \ epochs=100 imgsz=640 batch=16from 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.
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLONASs.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])libreyolo val model=LibreYOLONASs.pt data=my-dataset.yaml# 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=TrueExportación
| Tarea | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Detection | Detection to ONNX: compatible | Detection to TorchScript: compatible | Detection to ExecuTorch: compatible | Detection to TensorRT: compatible | Detection to OpenVINO: compatible | Detection to Paddle: compatible | Detection to MNN: compatible | Detection to RKNN: compatible | Detection to ncnn: compatible | Detection to TFLite: compatible | Detection to CoreML: no compatible | Detection to Core AI: compatible |
| Pose | Pose to ONNX: compatible | Pose to TorchScript: compatible | Pose to ExecuTorch: compatible | Pose to TensorRT: compatible | Pose to OpenVINO: compatible | Pose to Paddle: compatible | Pose to MNN: no compatible | Pose to RKNN: no compatible | Pose to ncnn: compatible | Pose to TFLite: no compatible | Pose to CoreML: no compatible | Pose 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.
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLONASs.pt")model.export(format="onnx", imgsz=640)libreyolo export model=LibreYOLONASs.pt format=onnx imgsz=640from 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.