PicoDet
PicoDet è un rilevatore single-stage costruito per le CPU mobile ed edge: un backbone ESNet, un neck CSP-PAN e una testa condivisa con Generalized Focal Loss. LibreYOLO lo supporta per il rilevamento.
- Task
- detection
- Dimensioni
- s, m, l at 320 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
PicoDet non richiede nessun extra oltre al pacchetto base.
pip install libreyoloPredizione
I pesi vengono scaricati da Hugging Face al primo utilizzo e restano nella cache locale.
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibrePICODETs.pt")result = model(SAMPLE_IMAGE, save=True) for box in result.boxes: print(box.cls, box.conf, box.xyxy)libreyolo predict model=LibrePICODETs.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=TrueL'oggetto Results restituito è quello 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 di NMS. Vedi
predizione per sorgenti, streaming e gestione dei risultati.
Varianti
Tre dimensioni, ciascuna alla propria risoluzione di input fissa: s la più
piccola e l la più grande. La risoluzione cresce con la dimensione, quindi i
checkpoint più grandi sono anche più costosi da eseguire per immagine, oltre a
portare più parametri.
| Checkpoint | Ingresso (px) | mAP 50-95 | Parametri (M) |
|---|---|---|---|
| LibrePICODETs | 320 | 29.5 | 0.99 |
| LibrePICODETm | 416 | 37.6 | 2.15 |
| LibrePICODETl | 640 | 44.2 | 3.31 |
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("LibrePICODETs.pt")model.train( data="my-dataset.yaml", epochs=300, batch=16, lr0=0.01,)# Vale la pena impostare imgsz: la CLI lo porta a 640 di default, mentre# il checkpoint s è nativo a 320.libreyolo train model=LibrePICODETs.pt data=my-dataset.yaml imgsz=320 epochs=300 batch=16 lr0=0.01I componenti della loss e l'assigner seguono la ricetta upstream: VFL, DFL, GIoU e SimOTA, con pesatura per qualità della classificazione e target VFL a IoU dinamico. L'inferenza è bit-equivalente a quella upstream sullo stesso checkpoint.
Quello che non è stato verificato, secondo la docstring di train() stessa: la
convergenza sull'intero dataset, il comportamento multi-GPU e qualsiasi data
augmentation oltre al flip orizzontale. Anche il checkpoint s alla sua
risoluzione nativa di 320 non ha superato in modo affidabile il minimo di
accuratezza di LibreYOLO sulla fixture da 30 immagini e due classi con cui la
libreria testa i fine-tuning piccoli. Quella dimensione si adatta meglio alla
scala di COCO completo.
train() accetta anche un argomento pretrained, ma il valore non viene mai
letto dentro il metodo: l'addestramento continua sempre dai pesi con cui il
modello è stato costruito, quindi pretrained=False non reinizializza la
rete. Se lasci imgsz non impostato in Python, prende la risoluzione nativa
del checkpoint caricato, 320 per s, 416 per m e 640 per l. La CLI invia
sempre un imgsz, con 640 di default, quindi lì va impostato per farlo
combaciare con il checkpoint.
Se non tocchi altro, il trainer esegue 300 epoche con SGD a lr0=0.01,
momentum 0.9, weight decay 4e-5 e un warmup di 1 epoca su uno schedule cosine.
Il flip orizzontale è l'unica data augmentation applicata.
Vedi addestramento per dataset, data 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.
from libreyolo import LibreYOLO model = LibreYOLO("LibrePICODETs.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])libreyolo val model=LibrePICODETs.pt data=my-dataset.yamlEsportazione
| 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: supportato | Detection to ncnn: supportato | Detection to TFLite: non supportato | Detection to CoreML: non 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 lo stesso Results. È supportata anche l'esecuzione del grafo in un
runtime nudo, senza LibreYOLO installato, ma allora il preprocessing e il
postprocessing tocca scriverli a te.
from libreyolo import LibreYOLO model = LibreYOLO("LibrePICODETs.pt")model.export(format="onnx", imgsz=320)model.export(format="tensorrt", imgsz=320, half=True)libreyolo export model=LibrePICODETs.pt format=onnx imgsz=320libreyolo export model=LibrePICODETs.pt format=tensorrt imgsz=320 half=Truefrom libreyolo import LibreYOLO, SAMPLE_IMAGE # La factory smista in base al suffisso del file, quindi un artefatto# esportato si carica come qualsiasi checkpoint e restituisce lo stesso# oggetto Results.model = LibreYOLO("LibrePICODETs.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 | ||
| LibrePICODETs.pt | 320 | apache-2.0 |
| LibrePICODETm.pt | 416 | apache-2.0 |
| LibrePICODETl.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
- PP-PicoDet, PaddlePaddle (Baidu)
- Licenza upstream
- Apache-2.0
- Sorgente upstream
- github.com/PaddlePaddle/PaddleDetection
- 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. LibreYOLO's port follows Bo396543018/Picodet_Pytorch, a PyTorch re-implementation of PaddleDetection's original PP-PicoDet, and both carry the same Apache-2.0 terms as the paper's authors.
Il port di LibreYOLO segue Bo396543018/Picodet_Pytorch, una re-implementazione in PyTorch dell'originale PP-PicoDet di PaddleDetection, con mmcv rimosso e ogni attivazione replicata esattamente, così i checkpoint PaddlePaddle convertiti attraverso la pipeline di Bo si caricano senza deriva numerica. Entrambe le fonti portano gli stessi termini Apache-2.0 degli autori del paper.
Citazione
@misc{yu2021pppicodet,
title={PP-PicoDet: A Better Real-Time Object Detector on Mobile Devices},
author={Guanghua Yu and Qinyao Chang and Wenyu Lv and Chang Xu and Cheng Cui and Wei Ji and Qingqing Dang and Kaipeng Deng and Guanzhong Wang and Yuning Du and Baohua Lai and Qiwen Liu and Xiaoguang Hu and Dianhai Yu and Yanjun Ma},
year={2021},
eprint={2111.00902},
archivePrefix={arXiv},
primaryClass={cs.CV}
}Copiato dal blocco di citazione degli autori disponibile su github.com/PaddlePaddle/PaddleDetection/blob/release/2.8/configs/picodet/README_en.md#cite-pp-picodet.