FOMO
FOMO è un localizzatore di punti basato su griglia: ogni cella di una griglia a bassa risoluzione viene classificata come sfondo o come centro di un oggetto, senza nessuna regressione dei bounding box. LibreYOLO lo supporta per il task point.
- Task
- point
- Dimensioni
- Installa
pip install libreyolo- Livello di supporto
- Supportato, dalla v. Modelli addestrabili di supporto: mantenuti funzionanti nella CI, ricevono nuove funzionalità quando possibile.
- Licenze
- Codice MIT, pesi MIT. Uso commerciale
Installazione
FOMO non richiede nessun extra oltre al pacchetto base.
pip install libreyoloPredizione
A differenza di ogni altra famiglia di questo sito, i pesi di LibreFOMO non si
scaricano da soli: LibreYOLO("LibreFOMOs-point.pt") cerca quel file su disco
e solleva un ValueError che lo nomina, invece di prenderlo da Hugging Face.
Scarica prima un checkpoint dall'organizzazione LibreYOLO
e caricalo indicando il percorso locale, oppure addestrane uno tuo (vedi
Addestramento sotto).
from libreyolo import LibreYOLO, SAMPLE_IMAGE # I pesi di LibreFOMO non si scaricano da soli (vedi Checkpoint sotto).# Puntalo a un checkpoint che hai già scaricato in locale.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=TrueIl risultato porta un payload points invece di boxes: ogni riga è
x, y, classe, confidenza, disponibile come result.points.data oppure
attraverso gli accessor .xy, .xyn, .cls e .conf. Non c'è nessuna soglia
iou da impostare, perché non ci sono box da sopprimere; predict(..., nms_radius=1) controlla di quante celle della griglia devono essere distanti
due rilevamenti perché sopravvivano entrambi, e il nome del file deve portare
il suffisso di task -point di FOMO perché il loader lo riconosca. Vedi
predizione per sorgenti, streaming e gestione dei risultati.
Varianti
Tre taglie, s, m e l, usano backbone in stile MobileNetV2 via via più
larghi, a risoluzioni di input fisse corrispondentemente maggiori, ciascuno
dietro un'unica testa di classificazione 1x1. Questa famiglia qui non ha
nessuna tabella di benchmark; la dimensione del file del checkpoint nella
tabella sotto è il segnale per taglia più chiaro tra quelli pubblicati finora.
Addestramento
from libreyolo import LibreYOLO model = LibreYOLO("./LibreFOMOs-point.pt")model.train( data="my-dataset.yaml", epochs=40, batch=32, lr0=3e-4,)# imgsz va passato: la CLI lo imposta a 640 di default, e il# checkpoint s accetta solo i suoi 96 nativi.libreyolo train model=./LibreFOMOs-point.pt data=my-dataset.yaml imgsz=96 epochs=40 batch=32 lr0=3e-4imgsz non è una scelta libera: di default vale la risoluzione nativa del
checkpoint caricato, e passare un valore diverso solleva un ValueError che
nomina la dimensione attesa. Quelle dimensioni sono 96 per s, 192 per m e
224 per l. La CLI imposta imgsz a 640 di default, quindi un comando
libreyolo train deve impostarlo esplicitamente perché corrisponda al
checkpoint.
Se non tocchi altro, il trainer esegue 40 epoche con batch 32 usando Adam a
lr0=3e-4, senza weight decay e con la classe di primo piano pesata 100x
rispetto allo sfondo nella loss di cross-entropy per cella, dato che in una
scena tipica quasi ogni cella della griglia è sfondo. EMA e precisione mista
sono entrambe disattivate di default, e non viene applicata nessuna delle
augmentation geometriche o di colore usate altrove in LibreYOLO: mosaic, mixup,
jitter HSV, flip, rotazione, traslazione e shear sono tutti a zero.
È il percorso con cui sono stati addestrati i checkpoint LibreFOMO pubblicati, da zero su COCO.
Vedi addestramento per dataset e logger.
Validazione
val() instrada verso un validatore a livello di griglia costruito per questa
famiglia. Oltre alle chiavi metrics/precision, metrics/recall e
metrics/mAP@ basate sull'abbinamento dei punti e condivise con gli altri task
point, esplora soglie di confidenza e valori di nms_radius e pubblica la
combinazione con l'F1 migliore sotto metrics/grid_F1,
metrics/grid_precision, metrics/grid_recall e
metrics/grid_mean_distance, più la soglia e il raggio che l'hanno prodotta
sotto decode/threshold e 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.yamlEsportazione
| Task | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| point | point to ONNX: supportato | point to TorchScript: supportato | point to ExecuTorch: supportato | point to TensorRT: supportato | point to OpenVINO: supportato | point to Paddle: non supportato | point to MNN: non supportato | point to RKNN: non supportato | point to ncnn: supportato | point to TFLite: non supportato | point to CoreML: non supportato | point to Core AI: supportato |
Un artefatto esportato si ricarica attraverso LibreYOLO() in base al suffisso
del file, quindi un file .onnx o .engine si comporta come un checkpoint e
restituisce lo stesso Results. È supportata anche l'esecuzione del grafo in
un runtime nudo, senza LibreYOLO installato, ma allora il preprocessing e il
postprocessing tocca scriverli a te.
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 # La factory instrada in base al suffisso del file, quindi un artefatto# esportato si carica come qualsiasi checkpoint e restituisce lo stesso# oggetto Results.model = LibreYOLO("./LibreFOMOs-point.onnx")result = model(SAMPLE_IMAGE) print(result.points.xy)Checkpoint
Tutti i file di pesi pubblicati per questa famiglia. Nessuno di questi si
scarica automaticamente: prendi il file che ti serve dalla pagina Hugging Face
collegata e passa il suo percorso locale a LibreYOLO().
| File | Ingresso (px) | Licenza dei pesi |
|---|---|---|
| point | ||
| LibreFOMOs-point.pt | mit | |
| LibreFOMOm-point.pt | mit | |
| LibreFOMOl-point.pt | mit | |
Oggi tutti i file elencati sopra sono presenti nell<link>organizzazione LibreYOLO</link> e vengono scaricati al primo utilizzo.
Licenza
Controlla la licenza nel repository Hugging Face degli specifici pesi che scarichi. Ogni checkpoint nell<link>organizzazione LibreYOLO</link> ne include una e non è sempre la stessa per tutta la famiglia. Quel repository è la fonte autorevole; il riepilogo seguente descrive le condizioni applicabili al momento dellultima verifica di questa pagina.
Questa è una descrizione delle licenze coinvolte, non una consulenza legale. Se la risposta è importante a fini commerciali, leggi personalmente le licenze e chiedi una consulenza indipendente.
- Lavoro originale
- FOMO (Faster Objects, More Objects), Edge Impulse
- Licenza upstream
- MIT
- Sorgente upstream
- docs.edgeimpulse.com/docs/edge-impulse-studio/learning-blocks/object-detection/fomo-object-detection-for-constrained-devices
- Codice LibreYOLO
- MIT
- Pesi
- MIT, ripubblicati su huggingface.co/LibreYOLO
- Interpretazione
- 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.
Non c'è nessun repository di codice upstream di FOMO da collegare: Edge Impulse descrive la tecnica in un post del blog e nella documentazione del suo prodotto, ma non ha rilasciato il codice di addestramento o di inferenza di FOMO. L'architettura e l'addestramento presenti qui sono l'implementazione che LibreYOLO ha fatto di quella descrizione pubblicata, e i checkpoint LibreFOMO pubblicati sono addestrati da zero su COCO, quindi sia il codice sia questi pesi sono MIT, di LibreYOLO. Il nome FOMO e la tecnica che descrive restano di Edge Impulse.