FOMO

FOMO est un localisateur de points fondé sur une grille : chaque cellule d'une grille basse résolution est classée comme fond ou comme centre d'objet, sans aucune régression de bounding box. LibreYOLO le prend en charge pour la tâche point.

Tâches
point
Tailles
Installer
pip install libreyolo
Niveau de support
Pris en charge, depuis v. Modèles entraînables complémentaires : maintenus au vert dans la CI, avec des fonctionnalités ajoutées selon les occasions.
Origine
FOMO (Faster Objects, More Objects) par Edge Impulse, MIT. Article, source
Licences
Code MIT, poids MIT. Usage commercial

Installation

FOMO ne demande aucun extra au-delà du paquet de base.

bash
pip install libreyolo

Prédire

Contrairement à toutes les autres familles de ce site, les poids LibreFOMO ne sont pas téléchargés automatiquement : LibreYOLO("LibreFOMOs-point.pt") cherche ce fichier sur le disque et lève une ValueError qui le nomme, au lieu d'aller le chercher sur Hugging Face. Téléchargez d'abord un checkpoint depuis l'organisation LibreYOLO et chargez-le par son chemin local, ou entraînez le vôtre (voir Entraîner ci-dessous).

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Les poids LibreFOMO ne se téléchargent pas seuls (voir Checkpoints).# Visez ici un checkpoint déjà téléchargé en local.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

Le résultat porte une charge utile points au lieu de boxes : chaque ligne vaut x, y, class, confidence, disponible via result.points.data ou par les accesseurs .xy, .xyn, .cls et .conf. Il n'y a aucun seuil iou à régler, puisqu'il n'y a pas de boîtes à supprimer ; predict(..., nms_radius=1) fixe le nombre de cellules de la grille qui doit séparer deux détections pour qu'elles survivent toutes les deux, et le nom de fichier doit porter le suffixe de tâche -point de FOMO pour que le chargeur le reconnaisse. Voir la prédiction pour les sources, le streaming et le traitement des résultats.

Variantes

Trois tailles, s, m et l, emploient des backbones de style MobileNetV2 de plus en plus larges, à des résolutions d'entrée fixes d'autant plus grandes, chacun derrière une unique tête de classification 1x1. Cette famille ne porte pas de table de benchmark ici ; la taille du fichier de checkpoint dans la table ci-dessous est le signal par taille le plus clair publié à ce jour.

Entraîner

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 doit être passé : la CLI le met à 640 par défaut, et le# checkpoint s n'accepte que son 96 natif.libreyolo train model=./LibreFOMOs-point.pt data=my-dataset.yaml imgsz=96 epochs=40 batch=32 lr0=3e-4

imgsz n'est pas un choix libre : il prend par défaut la résolution native du checkpoint chargé, et passer une autre valeur lève une ValueError qui nomme la taille attendue. Ces tailles sont 96 pour s, 192 pour m et 224 pour l. La CLI met imgsz à 640 par défaut, donc une commande libreyolo train doit la fixer explicitement pour correspondre au checkpoint.

Laissé à ses réglages par défaut, l'entraîneur fait 40 époques avec un batch de 32 et Adam à lr0=3e-4, sans weight decay, et une classe d'avant-plan pondérée 100x par rapport au fond dans la loss d'entropie croisée par cellule, puisque presque toutes les cellules de la grille sont du fond dans une scène typique. L'EMA et la précision mixte sont toutes deux désactivées par défaut, et aucune des augmentations géométriques ou colorimétriques employées ailleurs dans LibreYOLO n'est appliquée : mosaic, mixup, jitter HSV, flip, rotation, translation et cisaillement sont tous à zéro.

C'est le parcours avec lequel les checkpoints LibreFOMO publiés ont été entraînés, à partir de zéro sur COCO.

Voir l'entraînement pour les datasets et les loggers.

Valider

val() bascule vers un validateur au niveau de la grille conçu pour cette famille. À côté des clés d'appariement de points metrics/precision, metrics/recall et metrics/mAP@ partagées avec les autres tâches point, il balaie les seuils de confiance et les valeurs de nms_radius, puis publie la combinaison au meilleur F1 sous metrics/grid_F1, metrics/grid_precision, metrics/grid_recall et metrics/grid_mean_distance, ainsi que le seuil et le rayon qui l'ont produite sous decode/threshold et 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

Exporter

TâcheONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
pointpoint to ONNX : pris en chargepoint to TorchScript : pris en chargepoint to ExecuTorch : pris en chargepoint to TensorRT : pris en chargepoint to OpenVINO : pris en chargepoint to Paddle : non pris en chargepoint to MNN : non pris en chargepoint to RKNN : non pris en chargepoint to ncnn : pris en chargepoint to TFLite : non pris en chargepoint to CoreML : non pris en chargepoint to Core AI : pris en charge

Un artefact exporté se recharge via LibreYOLO() selon son extension de fichier, si bien qu'un fichier .onnx ou .engine se comporte comme un checkpoint et renvoie le même Results. Exécuter le graphe dans un runtime nu, sans LibreYOLO installé, est aussi pris en charge, mais le prétraitement et le post-traitement sont alors à votre charge.

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
Utiliser le fichier exporté
from libreyolo import LibreYOLO, SAMPLE_IMAGE # La factory s'appuie sur l'extension du fichier, donc un artefact# exporté se charge comme un checkpoint et renvoie le même Results.model = LibreYOLO("./LibreFOMOs-point.onnx")result = model(SAMPLE_IMAGE) print(result.points.xy)

Checkpoints

Tous les fichiers de poids publiés de cette famille. Aucun ne se télécharge automatiquement : récupérez le fichier voulu sur la page Hugging Face liée et passez son chemin local à LibreYOLO().

FichierEntrée (px)Licence des poids
point
LibreFOMOs-point.ptmit
LibreFOMOm-point.ptmit
LibreFOMOl-point.ptmit

Tous les fichiers ci-dessus sont actuellement disponibles dans l<link>organisation LibreYOLO</link> et sont téléchargés à la première utilisation.

Licence

Vérifiez la licence dans le dépôt Hugging Face des poids précis que vous téléchargez. Chaque checkpoint de l<link>organisation LibreYOLO</link> en possède une, et elles ne sont pas toujours identiques au sein dune même famille. Ce dépôt fait autorité ; le résumé ci-dessous décrit les conditions applicables lors de la dernière vérification de cette page.

Ceci décrit les licences concernées et ne constitue pas un conseil juridique. Si la réponse a une importance commerciale, lisez vous-même les licences et consultez votre propre avocat.

Travail d'origine
FOMO (Faster Objects, More Objects), Edge Impulse
Licence du projet d'origine
MIT
Code de LibreYOLO
MIT
Poids
MIT, republiés sur huggingface.co/LibreYOLO
Interprétation
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.

Il n'existe aucun dépôt de code amont vers lequel pointer pour FOMO : Edge Impulse décrit la technique dans un billet de blog et dans la documentation de son produit, mais n'a publié ni code d'entraînement ni code d'inférence pour FOMO. L'architecture et l'entraînement présentés ici sont l'implémentation propre à LibreYOLO de cette description publiée, et les checkpoints LibreFOMO publiés sont entraînés à partir de zéro sur COCO, si bien que le code comme ces poids sont sous licence MIT et appartiennent à LibreYOLO. Le nom FOMO et la technique qu'il désigne restent ceux d'Edge Impulse.

Vérifié avec LibreYOLO v1.5.0. Les tableaux de support, les checkpoints et les chiffres de benchmark de cette page sont générés à partir de la bibliothèque publiée et des poids publiés, et non rédigés à la main.