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.
- Licenze
- Codice Apache-2.0, pesi Apache-2.0. Uso commerciale
Installazione
YOLOX non richiede nessun extra oltre al pacchetto base.
pip install libreyoloPredizione
I pesi vengono scaricati da Hugging Face al primo utilizzo e restano in cache in locale.
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)libreyolo predict model=LibreYOLOXs.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=TrueL'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.
| Checkpoint | Ingresso (px) | mAP 50-95 | Parametri (M) |
|---|---|---|---|
| LibreYOLOXnano | 416 | 28.8 | 0.91 |
| LibreYOLOXtiny | 416 | 35.1 | 5.06 |
| LibreYOLOXl | 640 | 53.9 | 54.21 |
| LibreYOLOXm | 640 | 50.9 | 25.33 |
| LibreYOLOXs | 640 | 43.0 | 8.97 |
| LibreYOLOXx | 640 | 56.3 | 99.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
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLOXs.pt")model.train(data="my-dataset.yaml", epochs=300, imgsz=640, batch=16, lr0=0.01)libreyolo train model=LibreYOLOXs.pt data=my-dataset.yaml \ epochs=300 imgsz=640 batch=16 lr0=0.01Se 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.
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLOXs.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])libreyolo val model=LibreYOLOXs.pt data=my-dataset.yaml# 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=TrueEsportazione
| Task | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Detection | Detection to ONNX: supportato | Detection to TorchScript: supportato | Detection to ExecuTorch: supportato | Detection to TensorRT: supportato | Detection to OpenVINO: supportato | Detection to Paddle: non supportato | Detection to MNN: non supportato | Detection to RKNN: non supportato | Detection to ncnn: supportato | Detection to TFLite: supportato | Detection to CoreML: supportato | Detection 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.
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLOXs.pt")model.export(format="onnx", imgsz=640)model.export(format="tensorrt", imgsz=640, half=True)libreyolo export model=LibreYOLOXs.pt format=onnx imgsz=640libreyolo export model=LibreYOLOXs.pt format=tensorrt imgsz=640 half=Truefrom 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.
| File | Ingresso (px) | Licenza dei pesi |
|---|---|---|
| Detection | ||
| LibreYOLOXn.pt | 416 | apache-2.0 |
| LibreYOLOXt.pt | 416 | apache-2.0 |
| LibreYOLOXs.pt | 640 | apache-2.0 |
| LibreYOLOXm.pt | 640 | apache-2.0 |
| LibreYOLOXl.pt | 640 | apache-2.0 |
| LibreYOLOXx.pt | 640 | apache-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
- Sorgente upstream
- github.com/Megvii-BaseDetection/YOLOX
- 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.