FOMO

FOMO to lokalizator punktów oparty na siatce: każda komórka siatki o niskiej rozdzielczości jest klasyfikowana jako tło lub środek obiektu, bez regresji ramek ograniczających. LibreYOLO obsługuje go w zadaniu punktowym.

Zadania
point
Rozmiary
Instalacja
pip install libreyolo
Poziom obsługi
Obsługiwany, od wersji v. Dodatkowe trenowalne modele: testy CI pozostają zielone, a funkcje są dodawane w miarę możliwości.
Projekt źródłowy
FOMO (Faster Objects, More Objects), autorzy: Edge Impulse, licencja: MIT. Publikacja, kod źródłowy
Licencje
Kod: MIT, wagi: MIT. Użycie komercyjne

Instalacja

FOMO nie wymaga żadnego dodatku poza pakietem podstawowym.

bash
pip install libreyolo

Predykcja

W przeciwieństwie do każdej innej rodziny na tej stronie wagi LibreFOMO nie są pobierane automatycznie. LibreYOLO("LibreFOMOs-point.pt") szuka tego pliku na dysku i zgłasza ValueError z jego nazwą zamiast pobierać go z Hugging Face. Najpierw należy pobrać checkpoint z organizacji LibreYOLO i wczytać go ze ścieżki lokalnej albo wytrenować własny (zobacz sekcję Trenowanie poniżej).

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Wagi LibreFOMO nie są pobierane automatycznie (zobacz sekcję Checkpointy poniżej).# Wskaż checkpoint pobrany wcześniej na dysk lokalny.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

Wynik zawiera points zamiast boxes. Każdy wiersz ma postać x, y, class, confidence i jest dostępny jako result.points.data albo przez akcesory .xy, .xyn, .cls i .conf. Nie ma progu iou, ponieważ nie ma ramek do tłumienia. predict(..., nms_radius=1) określa minimalny odstęp w komórkach siatki, przy którym dwie detekcje mogą zostać zachowane. Nazwa pliku musi zawierać sufiks zadania punktowego FOMO -point, aby loader go rozpoznał. Więcej informacji o źródłach, streamingu i obsłudze wyników zawiera strona predykcji.

Warianty

Trzy rozmiary, s, m i l, używają coraz szerszych backbone w stylu MobileNetV2 przy odpowiednio większych, stałych rozdzielczościach wejściowych, każdy z pojedynczą głowicą klasyfikacyjną 1x1. Ta rodzina nie ma tutaj tabeli benchmarku. Rozmiar pliku checkpointu w poniższej tabeli jest obecnie najbardziej czytelną opublikowaną wskazówką dla poszczególnych rozmiarów.

Trenowanie

Python
from libreyolo import LibreYOLO model = LibreYOLO("./LibreFOMOs-point.pt")model.train(    data="my-dataset.yaml",    epochs=40, batch=32, lr0=3e-4,)
CLI
# Należy podać imgsz: wartość domyślna CLI to 640, a checkpoint s# przyjmuje tylko własną natywną wartość 96.libreyolo train model=./LibreFOMOs-point.pt data=my-dataset.yaml imgsz=96 epochs=40 batch=32 lr0=3e-4

imgsz nie jest dowolnym wyborem. Domyślnie przyjmuje natywną rozdzielczość wczytanego checkpointu, a przekazanie innej wartości zgłasza ValueError z oczekiwanym rozmiarem. Rozmiary te wynoszą 96 dla s, 192 dla m i 224 dla l. CLI domyślnie ustawia imgsz na 640, dlatego polecenie libreyolo train musi jawnie podać wartość zgodną z checkpointem.

Poza tym bez zmian konfiguracji trener wykonuje 40 epok z batchem 32, optymalizatorem Adam przy lr0=3e-4, bez zaniku wag i z klasą pierwszego planu ważoną 100 razy silniej niż tło w funkcji straty cross-entropy dla każdej komórki, ponieważ w typowej scenie prawie każda komórka siatki jest tłem. EMA i mieszana precyzja są domyślnie wyłączone. Nie jest stosowana żadna augmentacja geometryczna ani kolorystyczna używana w innych częściach LibreYOLO: mosaic, mixup, przesunięcie HSV, odbicie, obrót, przesunięcie przestrzenne i ścinanie mają wartość zero.

Tą ścieżką wytrenowano opublikowane checkpointy LibreFOMO, od zera na COCO.

Informacje o zbiorach danych i loggerach zawiera strona trenowania.

Walidacja

val() wybiera walidator na poziomie siatki zbudowany dla tej rodziny. Oprócz kluczy metrics/precision, metrics/recall i metrics/mAP@ z dopasowaniem punktów, współdzielonych z innymi zadaniami punktowymi, przeszukuje progi pewności i wartości nms_radius, a najlepszą kombinację F1 publikuje pod kluczami metrics/grid_F1, metrics/grid_precision, metrics/grid_recall i metrics/grid_mean_distance. Próg i promień, które ją uzyskały, znajdują się pod decode/threshold i 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

Eksport

ZadanieONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
pointpoint to ONNX: obsługiwanepoint to TorchScript: obsługiwanepoint to ExecuTorch: obsługiwanepoint to TensorRT: obsługiwanepoint to OpenVINO: obsługiwanepoint to Paddle: brak obsługipoint to MNN: brak obsługipoint to RKNN: brak obsługipoint to ncnn: obsługiwanepoint to TFLite: brak obsługipoint to CoreML: brak obsługipoint to Core AI: obsługiwane

Wyeksportowany artefakt jest ponownie ładowany przez LibreYOLO() na podstawie rozszerzenia pliku, więc plik .onnx lub .engine zachowuje się jak checkpoint i zwraca ten sam obiekt Results. Obsługiwane jest także uruchomienie grafu w samym środowisku uruchomieniowym bez zainstalowanego LibreYOLO, ale wtedy należy samodzielnie napisać przetwarzanie wstępne i końcowe.

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
Użycie wyeksportowanego pliku
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Fabryka wybiera ścieżkę na podstawie rozszerzenia pliku, więc wyeksportowany artefakt# ładuje się jak każdy checkpoint i zwraca ten sam obiekt Results.model = LibreYOLO("./LibreFOMOs-point.onnx")result = model(SAMPLE_IMAGE) print(result.points.xy)

Checkpointy

Wszystkie opublikowane pliki wag dla tej rodziny. Żaden nie jest pobierany automatycznie. Należy pobrać wybrany plik z podanej strony Hugging Face i przekazać jego lokalną ścieżkę do LibreYOLO().

PlikWejście (px)Licencja wag
point
LibreFOMOs-point.ptmit
LibreFOMOm-point.ptmit
LibreFOMOl-point.ptmit

Każdy z powyższych plików jest obecnie dostępny w organizacji LibreYOLO i pobierany przy pierwszym użyciu.

Licencja

Sprawdź licencję w repozytorium konkretnych pobieranych wag na Hugging Face. Każdy checkpoint w organizacji LibreYOLO ma licencję, która nie zawsze jest taka sama w całej rodzinie. To repozytorium jest źródłem rozstrzygającym, a poniższe podsumowanie opisuje stan z chwili ostatniej weryfikacji tej strony.

To opis obowiązujących licencji, a nie porada prawna. Jeśli odpowiedź ma znaczenie komercyjne, przeczytaj licencje i zasięgnij własnej porady prawnej.

Oryginalna praca
FOMO (Faster Objects, More Objects), Edge Impulse
Licencja projektu źródłowego
MIT
Kod LibreYOLO
MIT
Wagi
MIT, ponownie opublikowane w huggingface.co/LibreYOLO
Interpretacja
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.

Nie istnieje repozytorium kodu źródłowego FOMO, do którego można podać odnośnik. Edge Impulse opisuje technikę we wpisie na blogu i dokumentacji produktu, ale nie opublikowało kodu trenowania ani inferencji FOMO. Architektura i trenowanie są własną implementacją tego opublikowanego opisu w LibreYOLO, a checkpointy LibreFOMO wytrenowano od zera na COCO. Zarówno kod, jak i te wagi podlegają więc własnej licencji MIT projektu LibreYOLO. Nazwa FOMO i opisywana przez nią technika pozostają własnością Edge Impulse.

Zweryfikowano z LibreYOLO v1.5.0. Tabele obsługi, checkpointy i wyniki benchmarków na tej stronie są generowane na podstawie wydanej biblioteki i opublikowanych wag, a nie wpisywane ręcznie.