FOMO
FOMO ist ein rasterbasierter Punktlokalisierer: Jede Zelle eines niedrig aufgelösten Rasters wird als Hintergrund oder Objektzentrum klassifiziert, ohne Bounding-Box-Regression. LibreYOLO unterstützt das Modell für die Punktaufgabe.
- Aufgaben
- point
- Größen
- Installation
pip install libreyolo- Supportstufe
- Unterstützt, seit v. Ergänzende trainierbare Modelle: Die CI bleibt grün, Funktionen kommen bei Gelegenheit hinzu.
- Upstream
- FOMO (Faster Objects, More Objects) von Edge Impulse, MIT. Publikation, Quelle
- Lizenzen
- Code MIT, Gewichte MIT. Kommerzielle Nutzung
Installation
FOMO benötigt neben dem Basispaket kein Zusatzpaket.
pip install libreyoloVorhersage
Anders als bei jeder anderen Familie auf dieser Website werden LibreFOMO-Gewichte
nicht automatisch heruntergeladen: LibreYOLO("LibreFOMOs-point.pt") sucht
auf dem Datenträger nach dieser Datei und löst einen ValueError aus, der sie
benennt, statt sie von Hugging Face abzurufen. Lade zunächst einen Checkpoint
von der LibreYOLO-Organisation herunter und
lade ihn über seinen lokalen Pfad. Alternativ kannst du einen eigenen trainieren
(siehe Training unten).
from libreyolo import LibreYOLO, SAMPLE_IMAGE # LibreFOMO-Gewichte werden nicht automatisch geladen (siehe Checkpoints unten).# Verweise hier auf einen bereits lokal heruntergeladenen Checkpoint.model = LibreYOLO("./LibreFOMOs-point.pt")result = model(SAMPLE_IMAGE, save=True) for point in result.points: print(point.cls, point.conf, point.xy)libreyolo predict model=./LibreFOMOs-point.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=TrueDas Ergebnis enthält eine points-Nutzlast statt boxes: Jede Zeile besteht
aus x, y, class, confidence und ist als result.points.data oder über die
Zugriffsfunktionen .xy, .xyn, .cls und .conf verfügbar. Es gibt keinen
iou-Schwellenwert, weil keine Boxen unterdrückt werden. Mit
predict(..., nms_radius=1) steuerst du, wie viele Rasterzellen zwei
Erkennungen auseinanderliegen müssen, damit beide erhalten bleiben. Der
Dateiname muss das FOMO-Aufgabensuffix -point enthalten, damit der Loader ihn
erkennt. Unter Vorhersage findest du Quellen, Streaming und
die Verarbeitung von Ergebnissen.
Varianten
Die drei Größen s, m und l verwenden zunehmend breitere Backbones im
MobileNetV2-Stil mit entsprechend größeren festen Eingabeauflösungen. Dahinter
liegt jeweils ein einzelner 1x1-Klassifizierungs-Head. Für diese Familie gibt
es hier keine Benchmark-Tabelle. Die Dateigröße der Checkpoints in der
folgenden Tabelle ist derzeit das deutlichste veröffentlichte Signal pro Größe.
Training
from libreyolo import LibreYOLO model = LibreYOLO("./LibreFOMOs-point.pt")model.train( data="my-dataset.yaml", epochs=40, batch=32, lr0=3e-4,)# imgsz muss übergeben werden: Die CLI nutzt standardmäßig 640, der# s-Checkpoint akzeptiert nur seine native Größe 96.libreyolo train model=./LibreFOMOs-point.pt data=my-dataset.yaml imgsz=96 epochs=40 batch=32 lr0=3e-4imgsz ist nicht frei wählbar. Standardmäßig wird die native Auflösung des
geladenen Checkpoints verwendet. Die Übergabe eines anderen Werts löst einen
ValueError aus, der die erwartete Größe nennt. Diese Größen sind 96 für s,
192 für m und 224 für l. Die CLI verwendet standardmäßig 640 für imgsz.
Ein Befehl libreyolo train muss den Wert deshalb ausdrücklich passend zum
Checkpoint festlegen.
Ansonsten läuft der Trainer ohne Änderungen 40 Epochen mit Batch 32, Adam bei
lr0=3e-4, ohne Weight Decay und mit einer gegenüber dem Hintergrund um den
Faktor 100 gewichteten Vordergrundklasse im zellweisen Cross-Entropy-Loss. In
einer typischen Szene gehört nahezu jede Rasterzelle zum Hintergrund. EMA und
Mixed Precision sind standardmäßig deaktiviert. Keine der sonst in LibreYOLO
verwendeten geometrischen oder farblichen Augmentierungen wird angewendet:
Mosaic, Mixup, HSV-Jitter, Spiegelung, Rotation, Translation und Scherung sind
alle null.
Über diesen Pfad wurden die veröffentlichten LibreFOMO-Checkpoints von Grund auf neu auf COCO trainiert.
Unter Training findest du Datensätze und Logger.
Validierung
val() verwendet einen für diese Familie entwickelten Validator auf
Rasterebene. Neben den Schlüsseln metrics/precision, metrics/recall und
metrics/mAP@ aus dem Punktabgleich, die auch andere Punktaufgaben verwenden,
testet er Confidence-Schwellenwerte und Werte für nms_radius. Die Kombination
mit dem besten F1-Wert wird unter metrics/grid_F1, metrics/grid_precision,
metrics/grid_recall und metrics/grid_mean_distance veröffentlicht. Der
zugehörige Schwellenwert und Radius stehen unter decode/threshold und
decode/nms_radius.
from libreyolo import LibreYOLO model = LibreYOLO("./LibreFOMOs-point.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/grid_F1"])print(metrics["metrics/grid_precision"], metrics["metrics/grid_recall"])libreyolo val model=./LibreFOMOs-point.pt data=my-dataset.yamlExport
| Aufgabe | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| point | point to ONNX: unterstützt | point to TorchScript: unterstützt | point to ExecuTorch: unterstützt | point to TensorRT: unterstützt | point to OpenVINO: unterstützt | point to Paddle: nicht unterstützt | point to MNN: nicht unterstützt | point to RKNN: nicht unterstützt | point to ncnn: unterstützt | point to TFLite: nicht unterstützt | point to CoreML: nicht unterstützt | point 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. Du kannst den Graphen auch in einer
einfachen Runtime ohne LibreYOLO ausführen. Dann musst du die Vor- und
Nachverarbeitung selbst implementieren.
from libreyolo import LibreYOLO model = LibreYOLO("./LibreFOMOs-point.pt")model.export(format="onnx")model.export(format="tensorrt", half=True)libreyolo export model=./LibreFOMOs-point.pt format=onnxfrom 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("./LibreFOMOs-point.onnx")result = model(SAMPLE_IMAGE) print(result.points.xy)Checkpoints
Alle veröffentlichten Gewichtsdateien dieser Familie. Keine davon wird
automatisch heruntergeladen. Rufe die gewünschte Datei von der verlinkten
Hugging-Face-Seite ab und übergib ihren lokalen Pfad an LibreYOLO().
| Datei | Eingabe (px) | Lizenz der Gewichte |
|---|---|---|
| point | ||
| LibreFOMOs-point.pt | mit | |
| LibreFOMOm-point.pt | mit | |
| LibreFOMOl-point.pt | 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
- FOMO (Faster Objects, More Objects), Edge Impulse
- Upstream-Lizenz
- MIT
- Upstream-Quelle
- docs.edgeimpulse.com/docs/edge-impulse-studio/learning-blocks/object-detection/fomo-object-detection-for-constrained-devices
- LibreYOLO-Code
- MIT
- Gewichte
- MIT, erneut unter huggingface.co/LibreYOLO veröffentlicht
- Einordnung
- FOMO is a technique Edge Impulse introduced through a blog post and its product documentation, not a code release, so there is no upstream repository or license to inherit. LibreYOLO's architecture is an original MobileNetV2-style reimplementation of the published description, and the LibreFOMO checkpoints are trained from scratch on COCO, so both the code and these weights are MIT, LibreYOLO's own. They are also not auto-downloaded: LibreYOLO("LibreFOMOs-point.pt") looks for that file locally and raises rather than fetching it, so get the checkpoint from the Hugging Face repository first. The name FOMO and the technique it describes remain Edge Impulse's.
Es gibt kein Upstream-Code-Repository für FOMO, das verlinkt werden könnte. Edge Impulse beschreibt die Methode in einem Blogbeitrag und seiner Produktdokumentation, hat aber keinen Trainings- oder Inferenzcode für FOMO veröffentlicht. Die Architektur und das Training hier sind die eigene Implementierung dieser veröffentlichten Beschreibung durch LibreYOLO. Die veröffentlichten LibreFOMO-Checkpoints wurden von Grund auf neu auf COCO trainiert. Code und Gewichte stehen daher unter der LibreYOLO-eigenen MIT-Lizenz. Der Name FOMO und die dadurch bezeichnete Methode gehören weiterhin zu Edge Impulse.