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.
pip install libreyoloPredykcja
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).
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)libreyolo predict model=./LibreFOMOs-point.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=TrueWynik 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
from libreyolo import LibreYOLO model = LibreYOLO("./LibreFOMOs-point.pt")model.train( data="my-dataset.yaml", epochs=40, batch=32, lr0=3e-4,)# 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-4imgsz 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.
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.yamlEksport
| Zadanie | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| point | point to ONNX: obsługiwane | point to TorchScript: obsługiwane | point to ExecuTorch: obsługiwane | point to TensorRT: obsługiwane | point to OpenVINO: obsługiwane | point to Paddle: brak obsługi | point to MNN: brak obsługi | point to RKNN: brak obsługi | point to ncnn: obsługiwane | point to TFLite: brak obsługi | point to CoreML: brak obsługi | point 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.
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 # 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().
| Plik | Wejście (px) | Licencja wag |
|---|---|---|
| point | ||
| LibreFOMOs-point.pt | mit | |
| LibreFOMOm-point.pt | mit | |
| LibreFOMOl-point.pt | mit | |
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 źródłowy projektu
- docs.edgeimpulse.com/docs/edge-impulse-studio/learning-blocks/object-detection/fomo-object-detection-for-constrained-devices
- 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.