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.
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("LibreYOLOXs.pt")result = model(SAMPLE_IMAGE, save=True) for box in result.boxes: print(box.cls, box.conf, box.xyxy)libreyolo predict model=LibreYOLOXs.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=TrueDas 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.
| Checkpoint | Eingabe (px) | mAP 50-95 | Parameter (M) |
|---|---|---|---|
| LibreYOLOXnano | 416 | 28.8 | 0.91 |
| LibreYOLOXtiny | 416 | 35.1 | 5.06 |
| LibreYOLOXl | 640 | 53.9 | 54.21 |
| LibreYOLOXm | 640 | 50.9 | 25.33 |
| LibreYOLOXs | 640 | 43.0 | 8.97 |
| LibreYOLOXx | 640 | 56.3 | 99.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
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLOXs.pt")model.train(data="my-dataset.yaml", epochs=300, imgsz=640, batch=16, lr0=0.01)libreyolo train model=LibreYOLOXs.pt data=my-dataset.yaml \ epochs=300 imgsz=640 batch=16 lr0=0.01Ohne 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.
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLOXs.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])libreyolo val model=LibreYOLOXs.pt data=my-dataset.yaml# 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=TrueExport
| 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: unterstützt | Detection to TFLite: unterstützt | Detection to CoreML: unterstützt | Detection 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.
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLOXs.pt")model.export(format="onnx", imgsz=640)model.export(format="tensorrt", imgsz=640, half=True)libreyolo export model=LibreYOLOXs.pt format=onnx imgsz=640libreyolo export model=LibreYOLOXs.pt format=tensorrt imgsz=640 half=Truefrom 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.
| Datei | Eingabe (px) | Lizenz der Gewichte |
|---|---|---|
| Detection | ||
| LibreYOLOXn.pt | 416 | apache-2.0 |
| LibreYOLOXt.pt | 416 | apache-2.0 |
| LibreYOLOXs.pt | 640 | apache-2.0 |
| LibreYOLOXm.pt | 640 | apache-2.0 |
| LibreYOLOXl.pt | 640 | apache-2.0 |
| LibreYOLOXx.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
- YOLOX, Megvii
- Upstream-Lizenz
- Apache-2.0
- Upstream-Quelle
- github.com/Megvii-BaseDetection/YOLOX
- 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.