YOLOX

YOLOX è un rilevatore single-stage anchor-free con una testa disaccoppiata per classificazione e regressione, addestrato con l'assegnazione delle etichette SimOTA. LibreYOLO lo supporta per il rilevamento.

Task
detection
Dimensioni
n, t, s, m, l, x at 416 to 640 px
Installa
pip install libreyolo
Livello di supporto
Supportato, dalla v. Modelli addestrabili di supporto: mantenuti funzionanti nella CI, ricevono nuove funzionalità quando possibile.
Origine
YOLOX di Megvii, Apache-2.0. Articolo, sorgente
Licenze
Codice Apache-2.0, pesi Apache-2.0. Uso commerciale

Installazione

YOLOX non richiede nessun extra oltre al pacchetto base.

bash
pip install libreyolo

Predizione

I pesi vengono scaricati da Hugging Face al primo utilizzo e restano in cache in locale.

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreYOLOXs.pt")result = model(SAMPLE_IMAGE, save=True) for box in result.boxes:    print(box.cls, box.conf, box.xyxy)
CLI
libreyolo predict model=LibreYOLOXs.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=True

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

Varianti

Sei dimensioni condividono lo stesso backbone CSP e lo stesso neck PAFPN. Le due più piccole, n e t, girano a una risoluzione di input fissa più piccola rispetto alle altre quattro; la tabella di benchmark qui sotto riporta la cifra esatta per ciascuna.

CheckpointIngresso (px)mAP 50-95Parametri (M)
LibreYOLOXnano41628.80.91
LibreYOLOXtiny41635.15.06
LibreYOLOXl64053.954.21
LibreYOLOXm64050.925.33
LibreYOLOXs64043.08.97
LibreYOLOXx64056.399.07

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("LibreYOLOXs.pt")model.train(data="my-dataset.yaml", epochs=300, imgsz=640, batch=16, lr0=0.01)
CLI
libreyolo train model=LibreYOLOXs.pt data=my-dataset.yaml \  epochs=300 imgsz=640 batch=16 lr0=0.01

Se non tocchi nient'altro, il trainer esegue 300 epoche a lr0=0.01 con SGD momentum 0.9, un warmup di 5 epoche e le augmentation mosaic e mixup disattivate nelle ultime 15 epoche. train() accetta anche un argomento pretrained, ma il valore non viene mai letto dentro il metodo: l'addestramento riparte sempre dai pesi con cui il modello è stato costruito, quindi pretrained=False non reinizializza la rete.

imgsz come predefinito prende un valore fisso dalla configurazione base di addestramento, non la risoluzione nativa del checkpoint caricato. Questo riguarda in particolare i checkpoint n e t: continuare ad addestrare uno dei due senza impostare imgsz esplicitamente lo porta al valore predefinito più grande invece che alla dimensione più piccola con cui è stato pubblicato.

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 con cui hai addestrato.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLOXs.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])
CLI
libreyolo val model=LibreYOLOXs.pt data=my-dataset.yaml
Su COCO
# Il file yaml di COCO incluso porta uno script di download integrato,# quindi serve un permesso esplicito se il dataset non è già in locale.libreyolo val model=LibreYOLOXn.pt data=coco.yaml imgsz=416 \  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: non supportatoDetection to MNN: non supportatoDetection to RKNN: non supportatoDetection to ncnn: supportatoDetection to TFLite: supportatoDetection to CoreML: supportatoDetection to Core AI: 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. Anche eseguire il grafo in un runtime nudo, senza LibreYOLO installato, è supportato, ma in quel caso preprocessing e postprocessing li scrivi tu. Un'esportazione CoreML può integrare l'NMS nel grafo con nms=True; YOLOX e YOLOv9 sono le uniche due famiglie per cui quel flag al momento è accettato.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLOXs.pt")model.export(format="onnx", imgsz=640)model.export(format="tensorrt", imgsz=640, half=True)
CLI
libreyolo export model=LibreYOLOXs.pt format=onnx imgsz=640libreyolo export model=LibreYOLOXs.pt format=tensorrt imgsz=640 half=True
Usare il file esportato
from libreyolo import LibreYOLO, SAMPLE_IMAGE # La factory instrada in base al suffisso del file, quindi un artefatto# esportato si carica come qualsiasi checkpoint e restituisce lo stesso# oggetto Results.model = LibreYOLO("LibreYOLOXs.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)

Checkpoint

Tutti i file di pesi pubblicati per questa famiglia.

FileIngresso (px)Licenza dei pesi
Detection
LibreYOLOXn.pt416apache-2.0
LibreYOLOXt.pt416apache-2.0
LibreYOLOXs.pt640apache-2.0
LibreYOLOXm.pt640apache-2.0
LibreYOLOXl.pt640apache-2.0
LibreYOLOXx.pt640apache-2.0

Oggi tutti i file elencati sopra sono presenti nell<link>organizzazione LibreYOLO</link> e vengono scaricati al primo utilizzo.

Licenze

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
YOLOX, Megvii
Licenza upstream
Apache-2.0
Codice LibreYOLO
MIT
Pesi
Apache-2.0, ripubblicati su huggingface.co/LibreYOLO
Interpretazione
Apache-2.0 is a permissive license, so these weights can be used in commercial and closed-source products. It asks you to keep its license text and attribution notices with any copy of the weights you redistribute, and it grants a patent license. It places no obligation on your own application code, and weights you train yourself on your own data are yours.

Citazione

@article{yolox2021,
  title={YOLOX: Exceeding YOLO Series in 2021},
  author={Ge, Zheng and Liu, Songtao and Wang, Feng and Li, Zeming and Sun, Jian},
  journal={arXiv preprint arXiv:2107.08430},
  year={2021}
}

Copiato dal blocco di citazione degli autori disponibile su github.com/Megvii-BaseDetection/YOLOX#cite-yolox.

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.