PicoDet
PicoDet ist ein einstufiger Detektor für Mobil- und Edge-CPUs: ein ESNet-Backbone, ein CSP-PAN-Neck und ein gemeinsamer Generalized-Focal-Loss-Head. LibreYOLO unterstützt ihn für die Objekterkennung.
- Aufgaben
- detection
- Größen
- s, m, l at 320 to 640 px
- Installation
pip install libreyolo- Supportstufe
- Unterstützt, seit v. Ergänzende trainierbare Modelle: Die CI bleibt grün, Funktionen kommen bei Gelegenheit hinzu.
- Upstream
- PP-PicoDet von PaddlePaddle (Baidu), Apache-2.0. Publikation, Quelle
- Lizenzen
- Code Apache-2.0, Gewichte Apache-2.0. Kommerzielle Nutzung
Installation
PicoDet benötigt neben dem Basispaket kein Zusatzpaket.
pip install libreyoloVorhersage
Die Gewichte werden bei der ersten Verwendung von Hugging Face heruntergeladen und lokal zwischengespeichert.
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=TrueDas zurückgegebene Results-Objekt entspricht dem aller anderen Familien. Der
Wechsel zu einem anderen Detektor erfordert daher nur eine Änderung in einer
Zeile. conf legt den Confidence-Schwellenwert und iou den NMS-Schwellenwert
fest. Unter Vorhersage findest du Quellen, Streaming und die
Verarbeitung von Ergebnissen.
Varianten
Es gibt drei Größen mit jeweils eigener fester Eingabeauflösung: s ist die
kleinste und l die größte. Die Auflösung wächst mit der Größe. Größere
Checkpoints benötigen pro Bild zusätzlich zu ihrer höheren Parameteranzahl
mehr Rechenleistung.
| Checkpoint | Eingabe (px) | mAP 50-95 | Parameter (M) |
|---|---|---|---|
| LibrePICODETs | 320 | 29.5 | 0.99 |
| LibrePICODETm | 416 | 37.6 | 2.15 |
| LibrePICODETl | 640 | 44.2 | 3.31 |
COCO val2017, 500 images. Gemessen mit dem LibreYOLO-Benchmarksystem und auf Vision Analysis veröffentlicht. Dort werden Latenzen verschiedener Hardware und Runtimes verglichen und die vollständigen Laufprotokolle bereitgestellt.
Training
from libreyolo import LibreYOLO model = LibreYOLO("LibrePICODETs.pt")model.train( data="my-dataset.yaml", epochs=300, batch=16, lr0=0.01,)# imgsz sollte gesetzt werden: Die CLI nutzt standardmäßig 640,# der s-Checkpoint ist nativ für 320 ausgelegt.libreyolo train model=LibrePICODETs.pt data=my-dataset.yaml imgsz=320 epochs=300 batch=16 lr0=0.01Loss-Komponenten und Assigner entsprechen dem Upstream-Rezept: VFL, DFL, GIoU und SimOTA mit Gewichtung nach Klassifizierungsqualität und dynamischen IoU-VFL-Zielen. Die Inferenz ist auf demselben Checkpoint bitgleich mit dem Upstream.
Laut dem eigenen Docstring von train() wurde Folgendes nicht geprüft:
Konvergenz auf einem vollständigen Datensatz, Multi-GPU-Verhalten und jede
Augmentierung außer horizontaler Spiegelung. Der Checkpoint s bei seiner
nativen Größe 320 hat außerdem die Accuracy-Untergrenze von LibreYOLO auf dem
Testdatensatz mit 30 Bildern und zwei Klassen für kleine Fine-Tunings nicht
zuverlässig überschritten. Diese Größe eignet sich besser im vollen
COCO-Maßstab.
train() akzeptiert auch das Argument pretrained, liest dessen Wert aber
nie innerhalb der Methode. Das Training wird immer mit den Gewichten
fortgesetzt, mit denen das Modell erzeugt wurde. pretrained=False
initialisiert das Netzwerk daher nicht neu. Wenn du imgsz in Python nicht
festlegst, wird die native Auflösung des geladenen Checkpoints verwendet: 320
für s, 416 für m und 640 für l. Die CLI sendet immer einen Wert für
imgsz, standardmäßig 640. Lege ihn dort passend zum Checkpoint fest.
Ansonsten läuft der Trainer ohne Änderungen 300 Epochen mit SGD bei lr0=0.01,
Momentum 0.9, Weight Decay 4e-5 und einem Warmup von 1 Epoche auf einem
Cosine-Zeitplan. Die horizontale Spiegelung ist die einzige Augmentierung.
Unter Training findest du Datensätze, Datenaugmentierung, Multi-GPU und Logger.
Validierung
val() gibt ein Dictionary mit metrics/-Schlüsseln für Precision, Recall,
mAP 50 und mAP 50-95 zurück. Diese werden auf einem beliebigen Datensatz in
dem Format gemessen, das du für das Training verwendet hast.
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.yamlExport
| Aufgabe | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Detection | Detection to ONNX: unterstützt | Detection to TorchScript: unterstützt | Detection to ExecuTorch: unterstützt | Detection to TensorRT: unterstützt | Detection to OpenVINO: unterstützt | Detection to Paddle: nicht unterstützt | Detection to MNN: nicht unterstützt | Detection to RKNN: unterstützt | Detection to ncnn: unterstützt | Detection to TFLite: nicht unterstützt | Detection to CoreML: nicht unterstützt | Detection to Core AI: unterstützt |
Ein exportiertes Artefakt wird anhand seiner Dateiendung wieder über LibreYOLO()
geladen. Eine .onnx- oder .engine-Datei verhält sich daher wie ein Checkpoint
und gibt dasselbe Results-Objekt zurück. Du kannst den Graphen auch in einer
einfachen Runtime ohne LibreYOLO ausführen. Dann musst du die Vor- und
Nachverarbeitung selbst implementieren.
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 # Die Factory entscheidet anhand der Dateiendung, daher wird ein Exportartefakt# wie jeder Checkpoint geladen und gibt dasselbe Results-Objekt zurück.model = LibreYOLO("LibrePICODETs.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)Checkpoints
Alle veröffentlichten Gewichtsdateien dieser Familie.
| Datei | Eingabe (px) | Lizenz der Gewichte |
|---|---|---|
| Detection | ||
| LibrePICODETs.pt | 320 | apache-2.0 |
| LibrePICODETm.pt | 416 | apache-2.0 |
| LibrePICODETl.pt | 640 | apache-2.0 |
Jede oben aufgeführte Datei ist heute in der LibreYOLO-Organisation verfügbar und wird bei der ersten Verwendung heruntergeladen.
Lizenzierung
Prüfe die Lizenz im Hugging-Face-Repository der konkreten Gewichte, die du herunterlädst. Jeder Checkpoint in der LibreYOLO-Organisation hat eine Lizenz, und sie ist innerhalb einer Familie nicht immer gleich. Dieses Repository ist die maßgebliche Quelle. Die Zusammenfassung unten beschreibt den Stand bei der letzten Verifizierung dieser Seite.
Dies ist eine Beschreibung der beteiligten Lizenzen und keine Rechtsberatung. Wenn die Antwort kommerziell relevant ist, lies die Lizenzen selbst und hole eigenen Rechtsrat ein.
- Originalarbeit
- PP-PicoDet, PaddlePaddle (Baidu)
- Upstream-Lizenz
- Apache-2.0
- Upstream-Quelle
- github.com/PaddlePaddle/PaddleDetection
- LibreYOLO-Code
- MIT
- Gewichte
- Apache-2.0, erneut unter huggingface.co/LibreYOLO veröffentlicht
- Einordnung
- 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.
Die LibreYOLO-Portierung folgt Bo396543018/Picodet_Pytorch, einer PyTorch-Neuimplementierung des ursprünglichen PP-PicoDet aus PaddleDetection. mmcv wurde entfernt, und jede Aktivierung wurde exakt abgeglichen. Dadurch werden über Bos Pipeline konvertierte PaddlePaddle-Checkpoints ohne numerische Abweichung geladen. Beide Quellen stehen unter denselben Apache-2.0-Bedingungen wie die Autoren der Veröffentlichung.
Zitieren
@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}
}Aus dem Zitierblock der Autoren unter github.com/PaddlePaddle/PaddleDetection/blob/release/2.8/configs/picodet/README_en.md#cite-pp-picodet kopiert.