SAM

SAM (Segment Anything) transforme un clic sur un point ou une bounding box en masque d'objet. LibreYOLO le charge au moyen d'une fabrique LibreSAM dédiée, distincte de la fabrique de détecteurs LibreYOLO(), car un modèle guidable nécessite une signature d'appel différente.

Tâches
instance segmentation
Tailles
base, large, huge at 1024 px
Installer
pip install libreyolo
Niveau de support
Niveau parallèle, depuis v. Une interface produit distincte avec sa propre factory et son propre contrat.
Origine
SAM (Segment Anything) par Meta AI Research (FAIR), Apache-2.0. Article, source
Licences
Code MIT, poids Apache-2.0. Usage commercial

Installer

SAM nécessite l'extra sam, qui installe transformers et timm.

bash
pip install "libreyolo[sam]"

Prédire

LibreSAM(...) est un point d'entrée distinct de LibreYOLO(...)\u00a0: il renvoie un segmenteur guidable plutôt qu'un détecteur, car une passe forward n'a ici aucun sens sans prompt spatial. Il n'existe aucune commande CLI libreyolo predict pour cette famille\u00a0; utilisez l'API Python.

Prompts par point et bounding box
from libreyolo import LibreSAM, SAMPLE_IMAGE # "base" télécharge automatiquement facebook/sam-vit-base à la première utilisation.# Autres tailles : "large", "huge" (ainsi que "b"/"l"/"h").model = LibreSAM("base") # Un prompt par point : [x, y] en pixels, étiquette 1 = premier plan.result = model.predict(SAMPLE_IMAGE, points=[640, 420], labels=[1])print(result.masks.xy)      # un polygone par masqueprint(result.boxes.xyxy)    # bounding box ajustée dérivée du masque # Un prompt par bounding box à la place d'un point.result = model.predict(SAMPLE_IMAGE, bboxes=[300, 200, 900, 700]) # Sans prompt, l'image entière est segmentée (générateur de masques# automatique simplifié, différent de la version de référence exhaustive).result = model.predict(SAMPLE_IMAGE)
Encoder une fois, guider plusieurs fois
from libreyolo import LibreSAM, SAMPLE_IMAGE model = LibreSAM("base") # L'encodeur d'image est la partie coûteuse. set_image() ne l'exécute qu'une fois ;# chaque appel predict() suivant réutilise l'embedding mis en cache.model.set_image(SAMPLE_IMAGE)a = model.predict(points=[640, 420], labels=[1])b = model.predict(bboxes=[300, 200, 900, 700])model.reset_image()

Un prompt par point accepte [x, y] pour un objet, [[x, y], ...] pour plusieurs objets ou des tableaux numpy\u00a0; labels associe à chaque point la valeur 1 (premier plan) ou 0 (arrière-plan), tous les points étant au premier plan par défaut. Un prompt par bounding box prend [x1, y1, x2, y2] ou une liste de bounding boxes, avec un masque par bounding box. Si vous omettez les deux prompts, l'image entière est segmentée en appliquant des prompts sur une grille dense et en conservant les masques fiables qui ne se chevauchent pas\u00a0; ce mode «\u00a0tout segmenter\u00a0» est simplifié par rapport au générateur automatique de masques de référence et peut sous-segmenter les scènes encombrées. Un véritable prompt par point ou bounding box est donc la méthode précise. conf filtre selon la qualité de masque prédite (IoU), et non selon une confiance de détection\u00a0: transmettez 0.0 pour conserver chaque candidat. multimask=True renvoie, pour chaque prompt, les trois masques d'ambiguïté objet complet ou partie de SAM plutôt que le seul meilleur masque. device= déplace le modèle et, si une session set_image() est active, son embedding mis en cache. Chaque masque porte l'identifiant de classe 0, nommé "object", puisqu'un masque guidable ne dispose d'aucun ensemble de classes fixe. train(), val(), export() et track() lèvent tous NotImplementedError pour cette famille\u00a0: dans LibreYOLO, SAM sert uniquement à la prédiction et le suivi vidéo est hors périmètre. Consultez la prédiction pour les types de sources.

Variantes

Trois tailles d'encodeur d'image ViT\u00a0: base, large et huge, toutes avec une entrée fixe de 1024\u00a0px. Aucun benchmark d'exactitude ou de latence n'est encore publié pour cette famille. Le choix d'une taille met donc directement en balance le poids de l'encodeur et la qualité du masque\u00a0: base est la plus rapide à encoder, huge la plus lourde.

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
SAM (Segment Anything), Meta AI Research (FAIR)
Licence du projet d'origine
Apache-2.0
Code de LibreYOLO
MIT
Poids
Apache-2.0, distribués par leurs auteurs. LibreYOLO ne les héberge pas et n'en fournit pas de miroir.
Interprétation
Apache-2.0 is a permissive license, so this code and these weights can be used in commercial and closed-source products. It asks you to keep the license text and attribution notices with any copy you redistribute, and it grants a patent license. LibreYOLO does not mirror SAM-1 weights on its own Hugging Face org: LibreSAM downloads the base, large and huge checkpoints directly from Meta's own facebook/sam-vit-base, facebook/sam-vit-large and facebook/sam-vit-huge repositories, each tagged Apache-2.0 there as well.

LibreYOLO n'héberge pas sa propre copie des poids de SAM-1. LibreSAM("base"), "large" et "huge" les téléchargent directement depuis les dépôts facebook/sam-vit-base, facebook/sam-vit-large et facebook/sam-vit-huge de Meta sur Hugging Face, chacun y étant étiqueté Apache-2.0 indépendamment de LibreYOLO.

Citation

@article{kirillov2023segany,
  title={Segment Anything},
  author={Kirillov, Alexander and Mintun, Eric and Ravi, Nikhila and Mao, Hanzi and Rolland, Chloe and Gustafson, Laura and Xiao, Tete and Whitehead, Spencer and Berg, Alexander C. and Lo, Wan-Yen and Doll{\'a}r, Piotr and Girshick, Ross},
  journal={arXiv:2304.02643},
  year={2023}
}

Copié depuis le bloc de citation des auteurs sur github.com/facebookresearch/segment-anything#citing-segment-anything.

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.