RTMDet
RTMDet ist ein einstufiger Detektor, der von einem punktbasierten Prior pro Rasterposition ohne Anchors vorhersagt. Die Faltungen seines Heads werden über die Feature-Ebenen hinweg gemeinsam verwendet. LibreYOLO unterstützt Objekterkennung und RTMDet-Ins-Instanzsegmentierung.
- Aufgaben
- detection, instance segmentation
- Größen
- t, s, m, l, x at 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
- RTMDet von OpenMMLab, Apache-2.0. Publikation, Quelle
- Lizenzen
- Code Apache-2.0, Gewichte Apache-2.0. Kommerzielle Nutzung
Installation
RTMDet 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("LibreRTMDets.pt")result = model(SAMPLE_IMAGE, save=True) for box in result.boxes: print(box.cls, box.conf, box.xyxy)libreyolo predict model=LibreRTMDets.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=Truefrom libreyolo import LibreYOLO, SAMPLE_IMAGE # Das Suffix -seg im Dateinamen wählt den RTMDet-Ins-Masken-Head aus,# daher ist hier kein task-Argument erforderlich.model = LibreYOLO("LibreRTMDets-seg.pt")result = model(SAMPLE_IMAGE, save=True) print(result.masks.data.shape)Das zurückgegebene Results-Objekt entspricht dem aller anderen Familien. Der
Wechsel zu einem anderen Detektor erfordert daher nur eine Änderung in einer
Zeile. Ein Dateiname mit -seg wird selbstständig der RTMDet-Ins-Aufgabe
zugeordnet. result.masks enthält dann die Instanzmasken neben den Boxen.
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 fünf Größen von t bis x, die eine Architektur und eine gemeinsame
Eingabeauflösung verwenden. Für diese Familie gibt es hier keine
Benchmark-Tabelle. Vergleiche die Größen anhand der Checkpoint-Dateigröße in
der folgenden Tabelle.
Training
from libreyolo import LibreYOLO model = LibreYOLO("LibreRTMDets.pt")model.train( data="my-dataset.yaml", epochs=300, imgsz=640, batch=16, lr0=0.004,)libreyolo train model=LibreRTMDets.pt data=my-dataset.yaml imgsz=640 epochs=300 batch=16 lr0=0.004Die Objekterkennung wird über train() trainiert. Die Komponenten
QualityFocalLoss, GIoU und DynamicSoftLabelAssigner wurden aus dem Upstream
mmdetection portiert. Vorwärtslauf und ONNX-Export sind bitgleich. Die
Nachverarbeitung stimmt auf Teilmengen von val2017 innerhalb von 0.001 mAP mit
der mmdet-Ausgabe überein.
Laut dem eigenen Docstring von train() wurde Folgendes nicht geprüft:
Fine-Tuning-Konvergenz auf kleinen Datensätzen, Parität mit der Veröffentlichung
beim Training von Grund auf neu, Multi-GPU-Verhalten, Durchsatz des
zwischengespeicherten Mosaic und MixUp, der strikte zweistufige
Upstream-Pipeline-Wechsel und die parameterweisen Weight-Decay-Ausnahmen, die
Decay für Normalisierungs- und Bias-Parameter auf null setzen.
RTMDet-Ins besitzt keinen Trainingspfad. Ein Aufruf von train() auf einem
-seg-Checkpoint oder mit task="segment" löst NotImplementedError aus.
Die Instanzsegmentierung unterstützt nur Inferenz und Validierung.
train() akzeptiert außerdem ein Argument pretrained, liest dessen Wert aber
nie in der Methode. Das Training wird immer mit den Gewichten fortgesetzt, mit
denen das Modell erzeugt wurde. pretrained=False initialisiert das Netzwerk
daher nicht neu.
Ansonsten läuft der Trainer ohne Änderungen 300 Epochen mit AdamW bei
lr0=0.004 und weight_decay=0.05, einem Warmup von 1 Epoche auf einem
Cosine-Zeitplan sowie in den letzten 20 Epochen deaktiviertem Mosaic und MixUp.
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("LibreRTMDets.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])libreyolo val model=LibreRTMDets.pt data=my-dataset.yamlfrom libreyolo import LibreYOLO model = LibreYOLO("LibreRTMDets-seg.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95(M)"]) # Maskenprint(metrics["metrics/mAP50-95(B)"]) # BoxenBei einem -seg-Checkpoint enthält der einfache Schlüssel
metrics/mAP50-95 den Masken-Score. Derselbe Lauf meldet außerdem Boxen mit
dem Suffix (B) und Masken mit (M), sodass beide in einem Durchlauf verfügbar
sind.
Export
| 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: nicht unterstützt | Detection to ncnn: nicht unterstützt | Detection to TFLite: nicht unterstützt | Detection to CoreML: nicht unterstützt | Detection to Core AI: unterstützt |
| Instance segmentation | Instance segmentation to ONNX: nicht unterstützt | Instance segmentation to TorchScript: nicht unterstützt | Instance segmentation to ExecuTorch: nicht unterstützt | Instance segmentation to TensorRT: nicht unterstützt | Instance segmentation to OpenVINO: nicht unterstützt | Instance segmentation to Paddle: nicht unterstützt | Instance segmentation to MNN: nicht unterstützt | Instance segmentation to RKNN: nicht unterstützt | Instance segmentation to ncnn: nicht unterstützt | Instance segmentation to TFLite: nicht unterstützt | Instance segmentation to CoreML: nicht unterstützt | Instance segmentation to Core AI: nicht unterstützt |
Die Objekterkennung lässt sich in die meisten Formate exportieren. Die
Instanzsegmentierung derzeit in keines. Die obige Matrix bildet diese Trennung
ab. Ein exportiertes Erkennungsartefakt wird anhand seiner Dateiendung wieder
über LibreYOLO() geladen. Eine .onnx- oder .engine-Datei verhält sich 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("LibreRTMDets.pt")model.export(format="onnx", imgsz=640)model.export(format="tensorrt", imgsz=640, half=True)libreyolo export model=LibreRTMDets.pt format=onnx imgsz=640libreyolo export model=LibreRTMDets.pt format=tensorrt imgsz=640 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("LibreRTMDets.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)Checkpoints
Alle veröffentlichten Gewichtsdateien dieser Familie.
| Datei | Eingabe (px) | Lizenz der Gewichte |
|---|---|---|
| Detection | ||
| LibreRTMDett.pt | 640 | apache-2.0 |
| LibreRTMDets.pt | 640 | apache-2.0 |
| LibreRTMDetm.pt | 640 | apache-2.0 |
| LibreRTMDetl.pt | 640 | apache-2.0 |
| LibreRTMDetx.pt | 640 | apache-2.0 |
| Instance segmentation | ||
| LibreRTMDett-seg.pt | 640 | apache-2.0 |
| LibreRTMDets-seg.pt | 640 | apache-2.0 |
| LibreRTMDetm-seg.pt | 640 | apache-2.0 |
| LibreRTMDetl-seg.pt | 640 | apache-2.0 |
| LibreRTMDetx-seg.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
- RTMDet, OpenMMLab
- Upstream-Lizenz
- Apache-2.0
- Upstream-Quelle
- github.com/open-mmlab/mmdetection
- 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. The published RTMDet and RTMDet-Ins checkpoints are converted from mmdetection's own COCO weights, trained by OpenMMLab under the same license.
Zitieren
@misc{lyu2022rtmdet,
title={RTMDet: An Empirical Study of Designing Real-Time Object Detectors},
author={Chengqi Lyu and Wenwei Zhang and Haian Huang and Yue Zhou and Yudong Wang and Yanyi Liu and Shilong Zhang and Kai Chen},
year={2022},
eprint={2212.07784},
archivePrefix={arXiv},
primaryClass={cs.CV}
}Aus dem Zitierblock der Autoren unter github.com/open-mmlab/mmdetection/tree/main/configs/rtmdet#citation kopiert.