YOLOv7

YOLOv7 ist ein Anchor-basierter Single-Stage-Detektor, dessen Kopf vor der letzten Faltung gelernte Offsets aus implizitem Wissen hinzufügt. LibreYOLO unterstützt seine einzige veröffentlichte Größe für die Objekterkennung.

Aufgaben
detection
Größen
b 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
YOLOv7 von MultimediaTechLab, MIT. Publikation, Quelle
Lizenzen
Code MIT, Gewichte MIT. Kommerzielle Nutzung

Installation

YOLOv7 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("LibreYOLO7b.pt")result = model(SAMPLE_IMAGE, save=True) for box in result.boxes:    print(box.cls, box.conf, box.xyxy)
CLI
libreyolo predict model=LibreYOLO7b.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, der nach dem Decodieren des Anchor-basierten Kopfes angewendet wird. Unter Vorhersage findest du Informationen zu Quellen, Streaming und Ergebnisverarbeitung.

Varianten

LibreYOLO stellt eine Größe bereit: b. Das Upstream-Projekt veröffentlicht ein einziges YOLOv7-Modell, daher gibt es keine Größenauswahl.

Training

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO7b.pt")model.train(data="my-dataset.yaml", epochs=300, imgsz=640, batch=16, lr0=0.01)
CLI
libreyolo train model=LibreYOLO7b.pt data=my-dataset.yaml \  epochs=300 imgsz=640 batch=16 lr0=0.01
Warmstart mit einem neuen Modell
from libreyolo import LibreYOLO7 # pretrained=True lädt immer den veröffentlichten Checkpoint LibreYOLO7b.pt,# unabhängig davon, womit diese Instanz erstellt wurde. Bei direkter# Erstellung der Klasse statt über LibreYOLO() werden zunächst überhaupt# keine Gewichte geladen.model = LibreYOLO7(None, size="b")model.train(data="my-dataset.yaml", epochs=300, pretrained=True)

pretrained wird tatsächlich ausgewertet, anders als das gleichnamige wirkungslose Argument bei einigen anderen Familien. Übergib True für einen Warmstart mit dem veröffentlichten und automatisch heruntergeladenen Checkpoint LibreYOLO7b.pt oder einen Pfad beziehungsweise Namen für andere Gewichte. Der veröffentlichte Checkpoint besitzt 80 COCO-Klassen. Wird er für ein bereits auf eine andere Klassenanzahl umgebautes Modell angefordert, baut LibreYOLO zunächst auf 80 Klassen zurück und lädt den Checkpoint. Sobald die Klassenanzahl des Datensatzes bekannt ist, werden anschließend alle Tensoren mit passender Form in den Zielkopf übertragen. resume=True lässt sich nicht mit pretrained kombinieren. Beim Standardwert None wird das Training mit dem Zustand fortgesetzt, mit dem das Modell erstellt wurde, oder ohne geladene Gewichte mit zufälliger Initialisierung.

Ohne weitere Angaben führt der Trainer 300 Epochen mit lr0=0.01, SGD-Momentum 0,937, einem Warmup über 3 Epochen sowie derselben SimOTA-Zuweisung und abschließenden 15 Epochen ohne Augmentation wie YOLOX aus. Dies ist an den Anchor-basierten Kopf angepasst. Es gibt einen Unterschied: YOLOX ergänzt in den letzten Epochen eine L1-Verfeinerung der Boxregression, die v7 auslässt, da der SimOTA-Loss von v7 keinen L1-Zweig für Roh-Offsets enthält.

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("LibreYOLO7b.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])
CLI
libreyolo val model=LibreYOLO7b.pt data=my-dataset.yaml

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: nicht unterstütztDetection to CoreML: nicht 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.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO7b.pt")model.export(format="onnx", imgsz=640)model.export(format="tensorrt", imgsz=640, half=True)
CLI
libreyolo export model=LibreYOLO7b.pt format=onnx imgsz=640libreyolo export model=LibreYOLO7b.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("LibreYOLO7b.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)

Checkpoints

Alle für diese Familie veröffentlichten Gewichtsdateien.

DateiEingabe (px)Lizenz der Gewichte
Detection
LibreYOLO7b.pt640mit

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
YOLOv7, MultimediaTechLab
Upstream-Lizenz
MIT
LibreYOLO-Code
MIT
Gewichte
MIT, erneut unter huggingface.co/LibreYOLO veröffentlicht
Einordnung
MIT is a permissive license, so these weights can be used in commercial and closed-source products. The one standing obligation is to keep the license text and the copyright notice, Kin-Yiu Wong and Hao-Tang Tsui, with any copy you redistribute. It places no condition on your own application code, and a model you train yourself on your own data is yours. The port follows the authors' MIT re-release of YOLOv7, not the GPL-3.0 WongKinYiu/yolov7 repository that carries the same model, so the permissive terms come from the source LibreYOLO actually derives from.

Zitieren

@inproceedings{wang2022yolov7,
      title={{YOLOv7}: Trainable Bag-of-Freebies Sets New State-of-the-Art for Real-Time Object Detectors},
      author={Wang, Chien-Yao and Bochkovskiy, Alexey and Liao, Hong-Yuan Mark},
      year={2023},
      booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)},
}

Aus dem Zitierblock der Autoren unter github.com/MultimediaTechLab/YOLO#citations 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.