ResNet
ResNet ist ein Bildklassifikator aus Residualblöcken. Diese Skip-Verbindungen ermöglichen deutlich mehr Schichten, ohne den Accuracy-Verlust, unter dem tiefe einfache Faltungsstacks sonst leiden. LibreYOLO unterstützt es für eine Aufgabe: Klassifizierung.
- Aufgaben
- classification
- Größen
- 18, 34, 50, 101 at 224 px
- Installation
pip install libreyolo- Supportstufe
- Unterstützt, seit v1.3.0. Ergänzende trainierbare Modelle: Die CI bleibt grün, Funktionen kommen bei Gelegenheit hinzu.
- Upstream
- ResNet von Microsoft Research Asia, Apache-2.0. Publikation, Quelle
- Lizenzen
- Code Apache-2.0, Gewichte Apache-2.0. Kommerzielle Nutzung
Installation
ResNet benötigt kein optionales Zusatzpaket. Alle Importe sind in der Basisinstallation enthalten.
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("LibreResNet50-cls.pt")result = model(SAMPLE_IMAGE, save=True) print(result.probs.top1, result.probs.top1conf)print(result.probs.top5)libreyolo predict model=LibreResNet50-cls.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=TrueDas zurückgegebene Results-Objekt entspricht dem aller anderen Familien. Der
Wechsel zu einem anderen Modell erfordert daher nur eine Änderung in einer
Zeile. Ein Klassifikator enthält weder Boxen noch Masken: result.probs
enthält die Ganzbildvorhersage mit top1, top5, top1conf und top5conf.
conf, iou und max_det werden aus Gründen der API-Parität akzeptiert,
haben aber keine Wirkung. Bei einem einzelnen Wahrscheinlichkeitsvektor gibt
es nichts, worauf ein Schwellenwert oder eine Unterdrückung angewendet werden
könnte. Unter Vorhersage findest du Quellen, Streaming und die
Verarbeitung von Ergebnissen.
Varianten
Es gibt vier Tiefen, die alle gleich trainiert und ausgewertet wurden. Die Wahl
ist daher ein direkter Tausch von Parameteranzahl gegen Accuracy. Die Aufgabe
ist fest: Jede Größe unterstützt nur Klassifizierung. Der Dateiname der
Gewichte endet bei jeder Größe mit -cls.pt. An diesem Suffix erkennt die
Factory die Familie. Ein Argument task= ist nicht erforderlich.
Training
Das Fine-Tuning beginnt mit dem veröffentlichten ImageNet-Backbone und baut die letzte Klassifikatorschicht automatisch für die Klassenanzahl des Zieldatensatzes neu auf.
from libreyolo import LibreYOLO model = LibreYOLO("LibreResNet50-cls.pt")model.train(data="imagenette160", epochs=5)libreyolo train model=LibreResNet50-cls.pt data=imagenette160 epochs=5libreyolo train model=LibreResNet50-cls.pt data=imagenette160 \ epochs=50 device=0,1 batch=-1Ohne Änderungen läuft der Trainer 100 Epochen mit lr0=1e-3, AdamW, einem
Batch von 64 und Early Stopping nach 50 Epochen ohne Verbesserung. data
akzeptiert ein Datensatz-Stammverzeichnis (train/ und val/ mit einem Ordner
pro Klasse), einen bekannten Kurznamen wie imagenette160 oder eine .zip-URL.
lora=True wird hier nicht unterstützt und löst einen Fehler aus. LoRA richtet
sich in LibreYOLO an Transformer-Komponenten mit nn.Linear-Schichten, die in
ResNet nicht vorkommen.
Unter Training findest du Datensätze, Datenaugmentierung, Multi-GPU und Logger.
cls_pw=0 deaktiviert die Loss-Gewichtung; Werte bis 1 verwenden inverse Häufigkeitsgewichte, die auf den Mittelwert 1 normiert sind. class_weights=True verwendet stattdessen anhand der Stichproben normierte inverse Häufigkeiten und lässt sich nicht mit cls_pw>0 kombinieren. Diese Einstellungen müssen beim Fortsetzen übereinstimmen. Siehe Klassifikation.
Validierung
val() gibt ein Dictionary mit metrics/-Schlüsseln zurück. Bei der
Klassifizierung sind dies Top-1- und Top-5-Accuracy auf dem Validierungssplit.
from libreyolo import LibreYOLO model = LibreYOLO("LibreResNet50-cls.pt")metrics = model.val(data="imagenette160") print(metrics["metrics/accuracy_top1"])print(metrics["metrics/accuracy_top5"])libreyolo val model=LibreResNet50-cls.pt data=imagenette160Validierung und INT8-Kalibrierung verwenden die Auswertungstransformation der Familie. Die Exportmetadaten speichern norm_mean, norm_std und resize_mode; ältere Artefakte greifen auf die Familienwerte zurück. Kalibrierungsvorverarbeiter geben das erforderliche CHW-Array und das Verhältnis zurück.
Export
| Aufgabe | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Classification | Classification to ONNX: unterstützt | Classification to TorchScript: unterstützt | Classification to ExecuTorch: unterstützt | Classification to TensorRT: unterstützt | Classification to OpenVINO: unterstützt | Classification to Paddle: nicht unterstützt | Classification to MNN: nicht unterstützt | Classification to RKNN: nicht unterstützt | Classification to ncnn: unterstützt | Classification to TFLite: unterstützt | Classification to CoreML: nicht unterstützt | Classification to Core AI: unterstützt |
Ein exportiertes Artefakt wird anhand seiner Dateiendung wieder über LibreYOLO()
geladen. Eine .onnx- oder .engine-Datei verhält sich daher wie ein Checkpoint
und gibt dasselbe Results-Objekt zurück. Export führt die
Argumente auf, die jedes Format akzeptiert, sowie die Zusatzpakete, die einige
davon benötigen.
from libreyolo import LibreYOLO model = LibreYOLO("LibreResNet50-cls.pt")model.export(format="onnx")model.export(format="tensorrt", half=True)libreyolo export model=LibreResNet50-cls.pt format=onnxlibreyolo export model=LibreResNet50-cls.pt format=tensorrt half=Truefrom 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("LibreResNet50-cls.onnx")result = model(SAMPLE_IMAGE) print(result.probs.top1)Checkpoints
Alle veröffentlichten Gewichtsdateien dieser Familie.
| Datei | Eingabe (px) | Lizenz der Gewichte |
|---|---|---|
| Classification | ||
| LibreResNet18-cls.pt | 224 | apache-2.0 |
| LibreResNet34-cls.pt | 224 | apache-2.0 |
| LibreResNet50-cls.pt | 224 | apache-2.0 |
| LibreResNet101-cls.pt | 224 | 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
- ResNet, Microsoft Research Asia
- Upstream-Lizenz
- Apache-2.0
- Upstream-Quelle
- github.com/huggingface/pytorch-image-models
- 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 architecture is the original Microsoft Research Asia design; the pretrained weights LibreYOLO ships are timm's resnet{18,34,50,101}.a1_in1k reproduction (the "ResNet Strikes Back" A1 recipe), trained by Ross Wightman and the timm contributors on ImageNet-1k and licensed Apache-2.0 there. LibreYOLO's module and attribute names mirror timm so the state dict loads unchanged and inference matches bit-identically.
Zitieren
@article{He2015,
author = {Kaiming He and Xiangyu Zhang and Shaoqing Ren and Jian Sun},
title = {Deep Residual Learning for Image Recognition},
journal = {arXiv preprint arXiv:1512.03385},
year = {2015}
}Aus dem Zitierblock der Autoren unter github.com/KaimingHe/deep-residual-networks#citation kopiert.