YOLO-NAS

Un detector convoluzionale il cui backbone e il cui neck sono usciti dalla ricerca architetturale di Deci.AI, costruito con blocchi RepVGG pensati per la quantizzazione. I suoi pesi sono di Deci.AI, con licenza solo per uso non commerciale, e LibreYOLO non ne pubblica nessuno.

Task
detection, pose
Dimensioni
s, m, l at 640 px
Installa
pip install libreyolo
Livello di supporto
Principale, dalla v1.1.0. Rilevatori addestrabili principali: le funzionalità seguono i modelli di punta nella stessa ondata di release.
Origine
YOLO-NAS di Deci.AI, Deci.AI proprietary, non-commercial. Articolo, sorgente
Licenze
Codice Apache-2.0, pesi Deci.AI proprietary, non-commercial. Uso commerciale

Installazione

YOLO-NAS non richiede nulla oltre al pacchetto base.

bash
pip install libreyolo

Predizione

Il nome di un checkpoint non ancora presente su disco viene scaricato dalla CDN pubblica di Deci, non dall'org LibreYOLO, che non ospita nessuno di questi pesi. Prima che il trasferimento inizi, la libreria stampa i termini di licenza di Deci una volta per processo, e prima che il file scaricato venga aperto il suo SHA-256 viene confrontato con un valore fissato. Cosa permettono quei termini è spiegato in licenza.

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Un nome non ancora presente su disco viene scaricato dalla CDN di Deci.# Il download stampa prima i termini di licenza di Deci; prendere il file# significa accettarli.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
Posa
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Il suffisso -pose seleziona la testa per la posa e il suo set di pesi.model = LibreYOLO("LibreYOLONASs-pose.pt")result = model(SAMPLE_IMAGE) print(result.keypoints.xy)

L'oggetto Results restituito è lo stesso che restituisce ogni famiglia, quindi passare a un detector diverso è una modifica di una riga. conf imposta la soglia di confidenza e iou la soglia della NMS. Vedi predizione per sorgenti, streaming e gestione dei risultati.

Varianti

Rilevamento e posa sono la stessa architettura sotto teste diverse, e prendono gli stessi argomenti. Le dimensioni nella tabella qui sotto sono quelle del rilevamento; la posa è pubblicata in quelle e in una dimensione più piccola. La testa per la posa predice il set di keypoint di COCO.

CheckpointIngresso (px)mAP 50-95Parametri (M)
LibreYOLONASl64056.366.98
LibreYOLONASm64055.451.18
LibreYOLONASs64051.819.05

COCO val2017, 500 images. Misurato con il sistema di benchmark di LibreYOLO e pubblicato su Vision Analysis, dove vengono confrontate le latenze tra hardware e runtime e sono disponibili i record completi delle esecuzioni.

Addestramento

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
Da zero
from libreyolo import LibreYOLONAS # Nessun checkpoint di Deci viene toccato: il modello parte da pesi# casuali, quindi ciò che esce dalla run deriva solo dai tuoi dati.model = LibreYOLONAS(None, size="s")model.train(data="my-dataset.yaml", imgsz=640, batch=16)

epochs, lr0 e amp vengono risolti in base al task quando li ometti, quindi una run di posa parte da valori predefiniti diversi rispetto a una run di rilevamento. L'optimizer predefinito è AdamW. Il numero di classi viene dallo YAML del dataset e la testa viene ricostruita per adattarvisi prima della prima epoca; sulla testa per la posa il numero di keypoint è gestito allo stesso modo, quindi su un checkpoint di posa COCO si può fare fine-tuning verso uno scheletro di dimensione diversa.

Il fine-tuning parte dai pesi di Deci, ed è questo che la licenza di Deci copre. Addestrare da un modello inizializzato a caso non coinvolge nessun checkpoint di Deci, ed è il terzo snippet qui sopra.

Vedi addestramento per dataset, augmentation, multi-GPU e logger.

Validazione

val() restituisce un dizionario di chiavi metrics/ che coprono precisione, recall, mAP 50 e mAP 50-95, misurate su qualsiasi dataset nel formato su cui hai addestrato.

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
Su COCO
# Il file yaml di COCO incluso porta con sé uno script di download, quindi# serve un permesso esplicito a meno che il dataset non sia già in locale.libreyolo val model=LibreYOLONASl.pt data=coco.yaml imgsz=640 \  allow_download_scripts=True

Esportazione

TaskONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
DetectionDetection to ONNX: supportatoDetection to TorchScript: supportatoDetection to ExecuTorch: supportatoDetection to TensorRT: supportatoDetection to OpenVINO: supportatoDetection to Paddle: supportatoDetection to MNN: supportatoDetection to RKNN: supportatoDetection to ncnn: supportatoDetection to TFLite: supportatoDetection to CoreML: non supportatoDetection to Core AI: supportato
PosePose to ONNX: supportatoPose to TorchScript: supportatoPose to ExecuTorch: supportatoPose to TensorRT: supportatoPose to OpenVINO: supportatoPose to Paddle: supportatoPose to MNN: non supportatoPose to RKNN: non supportatoPose to ncnn: supportatoPose to TFLite: non supportatoPose to CoreML: non supportatoPose to Core AI: non supportato

Un artefatto esportato si ricarica con LibreYOLO() in base al suffisso del file, quindi un file .onnx o .engine si comporta come un checkpoint e restituisce gli stessi Results. Eseguire il grafo in un runtime nudo, senza LibreYOLO installato, è altrettanto supportato, ma in quel caso preprocessing e postprocessing li scrivi tu. Ogni formato installa un extra diverso e prende qualche argomento suo. Entrambe le cose sono sulla pagina di quel formato.

Un'esportazione è un'altra copia degli stessi pesi in un contenitore diverso. Esportare un checkpoint di Deci non cambia né da dove vengono i pesi né la licenza che li copre.

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
Usare il file esportato
from libreyolo import LibreYOLO, SAMPLE_IMAGE # La factory sceglie in base al suffisso del file, quindi un artefatto# esportato si carica come qualsiasi checkpoint e restituisce lo stesso# oggetto Results.model = LibreYOLO("LibreYOLONASs.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)

Checkpoint

Non ce ne sono da elencare. La licenza di Deci vieta la ridistribuzione, quindi l'org LibreYOLO non pubblica nessun peso di YOLO-NAS e il download si risolve altrove: un nome della forma LibreYOLONAS<size>.pt, o LibreYOLONAS<size>-pose.pt per la posa, corrisponde all'oggetto omologo sulla CDN pubblica di Deci.

Solo i checkpoint di cui la libreria fissa lo SHA-256 possono essere scaricati così. Tutto il resto fallisce invece di aprire un pickle di terze parti non verificato, e va scaricato a mano e passato come percorso. Un file già su disco si carica dal suo percorso, senza download e senza controllo del checksum. Questo vale anche per un .pth di Deci con il suo nome originale, che il loader riconosce.

Licenza

Controlla la licenza nel repository Hugging Face degli specifici pesi che scarichi. Ogni checkpoint nell<link>organizzazione LibreYOLO</link> ne include una e non è sempre la stessa per tutta la famiglia. Quel repository è la fonte autorevole; il riepilogo seguente descrive le condizioni applicabili al momento dellultima verifica di questa pagina.

Questa è una descrizione delle licenze coinvolte, non una consulenza legale. Se la risposta è importante a fini commerciali, leggi personalmente le licenze e chiedi una consulenza indipendente.

Lavoro originale
YOLO-NAS, Deci.AI
Licenza upstream
Deci.AI proprietary, non-commercial
Codice LibreYOLO
MIT
Pesi
Deci.AI proprietary, non-commercial, distribuiti dai rispettivi autori. LibreYOLO non li ospita né ne mantiene una copia.
Interpretazione
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 non ospita né fa da mirror per questi pesi: per questa famiglia non esiste nulla nell'org Hugging Face di LibreYOLO. Ogni download automatico va invece alla CDN pubblica di Deci, stampa i termini di Deci una volta per processo prima di iniziare, e viene confrontato con uno SHA-256 fissato prima che il file venga aperto.

L'alternativa è addestrare da un modello inizializzato a caso. L'architettura è Apache-2.0 a monte e MIT qui, quindi un modello addestrato così sui tuoi dati non deriva da nessun checkpoint di Deci.

Citazione

YOLO-NAS è stato rilasciato senza un paper. La voce qui sotto è quella che chiedono i suoi autori, e copre SuperGradients, la libreria in cui è arrivato.

@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},
}

Copiato dal blocco di citazione degli autori disponibile su github.com/Deci-AI/super-gradients#citing.

Verificato con LibreYOLO v1.5.0. Le tabelle di supporto, i checkpoint e i dati dei benchmark in questa pagina vengono generati dalla libreria rilasciata e dai pesi pubblicati, non scritti a mano.