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.

bash
pip install libreyolo

Vorhersage

Die Gewichte werden bei der ersten Verwendung von Hugging Face heruntergeladen und lokal zwischengespeichert.

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

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreRTMDets.pt")model.train(    data="my-dataset.yaml",    epochs=300, imgsz=640, batch=16, lr0=0.004,)
CLI
libreyolo train model=LibreRTMDets.pt data=my-dataset.yaml imgsz=640 epochs=300 batch=16 lr0=0.004

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

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreRTMDets.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])
CLI
libreyolo val model=LibreRTMDets.pt data=my-dataset.yaml
Instanzsegmentierung
from 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)"])   # Boxen

Bei 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

AufgabeONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
DetectionDetection to ONNX: unterstütztDetection to TorchScript: unterstütztDetection to ExecuTorch: unterstütztDetection to TensorRT: unterstütztDetection to OpenVINO: unterstütztDetection to Paddle: nicht unterstütztDetection to MNN: nicht unterstütztDetection to RKNN: nicht unterstütztDetection to ncnn: nicht unterstütztDetection to TFLite: nicht unterstütztDetection to CoreML: nicht unterstütztDetection to Core AI: unterstützt
Instance segmentationInstance segmentation to ONNX: nicht unterstütztInstance segmentation to TorchScript: nicht unterstütztInstance segmentation to ExecuTorch: nicht unterstütztInstance segmentation to TensorRT: nicht unterstütztInstance segmentation to OpenVINO: nicht unterstütztInstance segmentation to Paddle: nicht unterstütztInstance segmentation to MNN: nicht unterstütztInstance segmentation to RKNN: nicht unterstütztInstance segmentation to ncnn: nicht unterstütztInstance segmentation to TFLite: nicht unterstütztInstance segmentation to CoreML: nicht unterstütztInstance 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.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreRTMDets.pt")model.export(format="onnx", imgsz=640)model.export(format="tensorrt", imgsz=640, half=True)
CLI
libreyolo export model=LibreRTMDets.pt format=onnx imgsz=640libreyolo export model=LibreRTMDets.pt format=tensorrt imgsz=640 half=True
Exportierte Datei verwenden
from 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.

DateiEingabe (px)Lizenz der Gewichte
Detection
LibreRTMDett.pt640apache-2.0
LibreRTMDets.pt640apache-2.0
LibreRTMDetm.pt640apache-2.0
LibreRTMDetl.pt640apache-2.0
LibreRTMDetx.pt640apache-2.0
Instance segmentation
LibreRTMDett-seg.pt640apache-2.0
LibreRTMDets-seg.pt640apache-2.0
LibreRTMDetm-seg.pt640apache-2.0
LibreRTMDetl-seg.pt640apache-2.0
LibreRTMDetx-seg.pt640apache-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
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.

Mit LibreYOLO v1.5.0 verifiziert. Supporttabellen, Checkpoints und Benchmarkwerte auf dieser Seite werden aus der veröffentlichten Bibliothek und den publizierten Gewichten generiert und nicht von Hand geschrieben.