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.

bash
pip install libreyolo

Vorhersage

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).

Python
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)
CLI
libreyolo predict model=./LibreFOMOs-point.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=True

Das 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

Python
from libreyolo import LibreYOLO model = LibreYOLO("./LibreFOMOs-point.pt")model.train(    data="my-dataset.yaml",    epochs=40, batch=32, lr0=3e-4,)
CLI
# 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-4

imgsz 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.

Python
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"])
CLI
libreyolo val model=./LibreFOMOs-point.pt data=my-dataset.yaml

Export

AufgabeONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
pointpoint to ONNX: unterstütztpoint to TorchScript: unterstütztpoint to ExecuTorch: unterstütztpoint to TensorRT: unterstütztpoint to OpenVINO: unterstütztpoint to Paddle: nicht unterstütztpoint to MNN: nicht unterstütztpoint to RKNN: nicht unterstütztpoint to ncnn: unterstütztpoint to TFLite: nicht unterstütztpoint to CoreML: nicht unterstütztpoint 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.

Python
from libreyolo import LibreYOLO model = LibreYOLO("./LibreFOMOs-point.pt")model.export(format="onnx")model.export(format="tensorrt", half=True)
CLI
libreyolo export model=./LibreFOMOs-point.pt format=onnx
Exportierte Datei verwenden
from 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().

DateiEingabe (px)Lizenz der Gewichte
point
LibreFOMOs-point.ptmit
LibreFOMOm-point.ptmit
LibreFOMOl-point.ptmit

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
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.

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.