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.
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("LibreYOLO7b.pt")result = model(SAMPLE_IMAGE, save=True) for box in result.boxes: print(box.cls, box.conf, box.xyxy)libreyolo predict model=LibreYOLO7b.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, 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
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO7b.pt")model.train(data="my-dataset.yaml", epochs=300, imgsz=640, batch=16, lr0=0.01)libreyolo train model=LibreYOLO7b.pt data=my-dataset.yaml \ epochs=300 imgsz=640 batch=16 lr0=0.01from 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.
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO7b.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])libreyolo val model=LibreYOLO7b.pt data=my-dataset.yamlExport
| 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: nicht unterstützt | Detection to CoreML: nicht 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.
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO7b.pt")model.export(format="onnx", imgsz=640)model.export(format="tensorrt", imgsz=640, half=True)libreyolo export model=LibreYOLO7b.pt format=onnx imgsz=640libreyolo export model=LibreYOLO7b.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("LibreYOLO7b.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 | ||
| LibreYOLO7b.pt | 640 | mit |
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
- Upstream-Quelle
- github.com/MultimediaTechLab/YOLO
- 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.