YOLOX

YOLOX ist ein Anchor-freier Single-Stage-Detektor mit entkoppeltem Klassifikations- und Regressionskopf, der mit SimOTA-Labelzuweisung trainiert wird. LibreYOLO unterstützt ihn für die Objekterkennung.

Aufgaben
detection
Größen
n, t, s, m, l, x at 416 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
YOLOX von Megvii, Apache-2.0. Publikation, Quelle
Lizenzen
Code Apache-2.0, Gewichte Apache-2.0. Kommerzielle Nutzung

Installation

YOLOX benötigt neben dem Basispaket kein zusätzliches Extra.

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("LibreYOLOXs.pt")result = model(SAMPLE_IMAGE, save=True) for box in result.boxes:    print(box.cls, box.conf, box.xyxy)
CLI
libreyolo predict model=LibreYOLOXs.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=True

Das zurückgegebene Results-Objekt entspricht dem jeder anderen Familie, sodass der Wechsel zu einem anderen Detektor nur eine einzige Codezeile erfordert. conf legt den Konfidenzschwellenwert und iou den NMS-Schwellenwert fest, die auf die drei entkoppelten Vorhersageskalen angewendet werden. Unter Vorhersage findest du Informationen zu Quellen, Streaming und Ergebnisverarbeitung.

Varianten

Sechs Größen verwenden denselben CSP-Backbone und PAFPN-Neck. Die beiden kleinsten, n und t, werden mit einer kleineren festen Eingabeauflösung als die übrigen vier ausgeführt. Die folgende Benchmark-Tabelle enthält den genauen Wert für jede Größe.

CheckpointEingabe (px)mAP 50-95Parameter (M)
LibreYOLOXnano41628.80.91
LibreYOLOXtiny41635.15.06
LibreYOLOXl64053.954.21
LibreYOLOXm64050.925.33
LibreYOLOXs64043.08.97
LibreYOLOXx64056.399.07

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

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

Ohne weitere Angaben führt der Trainer 300 Epochen mit lr0=0.01, SGD-Momentum 0,9 und einem Warmup über 5 Epochen aus. Mosaic- und MixUp-Augmentation werden für die letzten 15 Epochen deaktiviert. train() akzeptiert außerdem ein Argument pretrained, dessen Wert innerhalb der Methode jedoch nie gelesen wird. Das Training wird immer mit den Gewichten fortgesetzt, mit denen das Modell erstellt wurde. pretrained=False initialisiert das Netzwerk daher nicht neu.

imgsz verwendet standardmäßig einen festen Wert aus der Basiskonfiguration des Trainings und nicht die native Auflösung des geladenen Checkpoints. Das betrifft insbesondere die Checkpoints n und t: Wenn du ihr Training ohne explizite Angabe von imgsz fortsetzt, wechseln sie von der kleineren veröffentlichten Größe zum größeren Standardwert.

Unter Training findest du Informationen zu Datensätzen, Augmentation, Multi-GPU und Loggern.

Validierung

val() gibt ein Dictionary mit metrics/-Schlüsseln für Precision, Recall, mAP 50 und mAP 50-95 zurück, gemessen anhand jedes Datensatzes im Format, das du für das Training verwendet hast.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLOXs.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])
CLI
libreyolo val model=LibreYOLOXs.pt data=my-dataset.yaml
Gegen COCO
# Die mitgelieferte COCO-YAML-Datei enthält ein Downloadskript und benötigt# daher eine ausdrückliche Berechtigung, sofern der Datensatz noch nicht lokal vorliegt.libreyolo val model=LibreYOLOXn.pt data=coco.yaml imgsz=416 \  allow_download_scripts=True

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: unterstütztDetection to TFLite: unterstütztDetection to CoreML: unterstütztDetection to Core AI: unterstützt

Ein exportiertes Artefakt wird über seine Dateiendung wieder durch 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 eigenständigen Laufzeitumgebung ohne installiertes LibreYOLO ausführen. Dann musst du Vor- und Nachverarbeitung selbst implementieren. Ein CoreML-Export kann mit nms=True NMS in den Graphen einbetten. YOLOX und YOLOv9 sind derzeit die einzigen beiden Familien, die dieses Flag akzeptieren.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLOXs.pt")model.export(format="onnx", imgsz=640)model.export(format="tensorrt", imgsz=640, half=True)
CLI
libreyolo export model=LibreYOLOXs.pt format=onnx imgsz=640libreyolo export model=LibreYOLOXs.pt format=tensorrt imgsz=640 half=True
Exportierte Datei verwenden
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Die Factory leitet anhand der Dateiendung weiter, daher wird ein exportiertes Artefakt# wie jeder Checkpoint geladen und gibt dasselbe Results-Objekt zurück.model = LibreYOLO("LibreYOLOXs.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)

Checkpoints

Alle für diese Familie veröffentlichten Gewichtsdateien.

DateiEingabe (px)Lizenz der Gewichte
Detection
LibreYOLOXn.pt416apache-2.0
LibreYOLOXt.pt416apache-2.0
LibreYOLOXs.pt640apache-2.0
LibreYOLOXm.pt640apache-2.0
LibreYOLOXl.pt640apache-2.0
LibreYOLOXx.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
YOLOX, Megvii
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.

Zitieren

@article{yolox2021,
  title={YOLOX: Exceeding YOLO Series in 2021},
  author={Ge, Zheng and Liu, Songtao and Wang, Feng and Li, Zeming and Sun, Jian},
  journal={arXiv preprint arXiv:2107.08430},
  year={2021}
}

Aus dem Zitierblock der Autoren unter github.com/Megvii-BaseDetection/YOLOX#cite-yolox 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.