MiDaS
MiDaS ist eine monokulare relative Tiefenschätzung, die mit einem skalierungs- und verschiebungsinvarianten Loss auf gemischten Datensätzen trainiert wurde. Diese Arbeit etablierte das später von anderen Familien wiederverwendete Protokoll zur Zero-Shot-Tiefenübertragung. LibreYOLO unterstützt es für die Tiefenaufgabe: Vorhersage und Zero-Shot-Validierung ohne Trainingspfad.
- Aufgaben
- depth
- Größen
- s, l at 256 to 384 px
- Installation
pip install "libreyolo[midas]"- Supportstufe
- Nur Inferenz, seit v1.5.0. Nur Vorhersage, Validierung und Export. Trainingsfunktionen sind nicht verfügbar.
- Upstream
- MiDaS von Intel Intelligent Systems Lab (Intel ISL), MIT. Publikation, Quelle
- Lizenzen
- Code MIT, Gewichte MIT. Kommerzielle Nutzung
Installation
MiDaS benötigt das Extra midas für seine timm-Encoder.
pip install "libreyolo[midas]"Vorhersage
Die Checkpoints s und l werden von LibreYOLO-Mirrors unter der MIT-Lizenz des Herausgebers heruntergeladen und lokal zwischengespeichert.
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Lädt den gespiegelten Checkpoint bei der ersten Verwendung.model = LibreYOLO("LibreMiDaSl-depth.pt")result = model(SAMPLE_IMAGE, save=True) depth = result.depth_mapprint(depth.min, depth.max, depth.mean)libreyolo predict model=LibreMiDaSl-depth.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=Truefrom libreyolo import LibreYOLO, SAMPLE_IMAGE # EfficientNet-Lite3-Encoder, kleiner und schneller als DPT-Large der Größe l.model = LibreYOLO("LibreMiDaSs-depth.pt")result = model(SAMPLE_IMAGE, save=True)result.depth_map enthält eine dichte Karte der relativen inversen Tiefe: Höhere Werte bedeuten näher an der Kamera; die Werte haben weder eine metrische Einheit noch eine bildübergreifende Skala. save=True speichert eine farbcodierte Visualisierung der Karte; Results.plot() stellt die Tiefenkarte dar. Siehe Vorhersage für Quellen, Streaming und Ergebnisverarbeitung.
Varianten
Es gibt zwei Varianten mit unterschiedlichen Encodern, nicht nur verschiedene
Skalierungen desselben Encoders. s ist MiDaS v2.1 Small mit einem
EfficientNet-Lite3-Encoder. l ist DPT-Large mit einem ViT-L/16-Encoder und
dem von MiDaS für dichte Vorhersagen eingeführten DPT-Decoder. Auch ihre
Vorverarbeitung unterscheidet sich: s verwendet eine Seitenverhältnis-Skalierung
mit Obergrenze und die ImageNet-Normalisierung für Mittelwert und
Standardabweichung. l verwendet eine minimale Seitenverhältnis-Skalierung
mit Mittelwert und Standardabweichung 0.5. Wähle s für ein leichteres CNN
und l für die Accuracy des Transformer-Decoders.
Für diese Familie wird kein Training angeboten. LibreMiDaS.train() löst
immer NotImplementedError aus.
Validierung
val() führt den gemeinsamen Tiefenvalidator aus: Er richtet jede Vorhersage
mit einer bildweisen Least-Squares-Skalierung und -Verschiebung an ihrer Ground
Truth aus und meldet anschließend die üblichen relativen Zero-Shot-Tiefenmetriken
AbsRel, RMSE und die drei Delta-Schwellenwerte.
from libreyolo import LibreYOLO model = LibreYOLO("LibreMiDaSl-depth.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/abs_rel"])print(metrics["metrics/rmse"])print(metrics["metrics/delta1"])libreyolo val model=LibreMiDaSl-depth.pt data=my-dataset.yamlExport
| Aufgabe | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Depth | Depth to ONNX: unterstützt | Depth to TorchScript: unterstützt | Depth to ExecuTorch: unterstützt | Depth to TensorRT: unterstützt | Depth to OpenVINO: unterstützt | Depth to Paddle: nicht unterstützt | Depth to MNN: nicht unterstützt | Depth to RKNN: nicht unterstützt | Depth to ncnn: unterstützt | Depth to TFLite: nicht unterstützt | Depth to CoreML: nicht unterstützt | Depth to Core AI: nicht 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,
gibt dasselbe Results-Objekt zurück und enthält depth_map anstelle von Boxen.
from libreyolo import LibreYOLO model = LibreYOLO("LibreMiDaSl-depth.pt")model.export(format="onnx")model.export(format="tensorrt", half=True)libreyolo export model=LibreMiDaSl-depth.pt format=onnxlibreyolo export model=LibreMiDaSl-depth.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("LibreMiDaSl-depth.onnx")result = model(SAMPLE_IMAGE) print(result.depth_map.data.shape)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
- MiDaS, Intel Intelligent Systems Lab (Intel ISL)
- Upstream-Lizenz
- MIT
- Upstream-Quelle
- github.com/isl-org/MiDaS
- LibreYOLO-Code
- MIT
- Gewichte
- MIT, erneut unter huggingface.co/LibreYOLO veröffentlicht
- Einordnung
- The upstream repository and released weights declare MIT. LibreYOLO mirrors the s and l checkpoints under that publisher grant.
Zitieren
@ARTICLE {Ranftl2022,
author = "Ren\'{e} Ranftl and Katrin Lasinger and David Hafner and Konrad Schindler and Vladlen Koltun",
title = "Towards Robust Monocular Depth Estimation: Mixing Datasets for Zero-Shot Cross-Dataset Transfer",
journal = "IEEE Transactions on Pattern Analysis and Machine Intelligence",
year = "2022",
volume = "44",
number = "3"
}
@article{Ranftl2021,
author = {Ren\'{e} Ranftl and Alexey Bochkovskiy and Vladlen Koltun},
title = {Vision Transformers for Dense Prediction},
journal = {ICCV},
year = {2021},
}Aus dem Zitierblock der Autoren unter github.com/isl-org/MiDaS#citation kopiert.