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.
Origine
PP-PicoDet di PaddlePaddle (Baidu), Apache-2.0. Articolo, sorgente
Licenze
Codice Apache-2.0, pesi Apache-2.0. Uso commerciale

Installazione

PicoDet 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 nella cache locale.

Python
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)
CLI
libreyolo predict model=LibrePICODETs.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=True

L'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.

CheckpointIngresso (px)mAP 50-95Parametri (M)
LibrePICODETs32029.50.99
LibrePICODETm41637.62.15
LibrePICODETl64044.23.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

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibrePICODETs.pt")model.train(    data="my-dataset.yaml",    epochs=300, batch=16, lr0=0.01,)
CLI
# 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.01

I 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.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibrePICODETs.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])
CLI
libreyolo val model=LibrePICODETs.pt data=my-dataset.yaml

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: supportatoDetection to ncnn: supportatoDetection to TFLite: non supportatoDetection to CoreML: non 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 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.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibrePICODETs.pt")model.export(format="onnx", imgsz=320)model.export(format="tensorrt", imgsz=320, half=True)
CLI
libreyolo export model=LibrePICODETs.pt format=onnx imgsz=320libreyolo export model=LibrePICODETs.pt format=tensorrt imgsz=320 half=True
Usare il file esportato
from 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.

FileIngresso (px)Licenza dei pesi
Detection
LibrePICODETs.pt320apache-2.0
LibrePICODETm.pt416apache-2.0
LibrePICODETl.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
PP-PicoDet, PaddlePaddle (Baidu)
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. 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.

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.