MobileSAM

MobileSAM remplace l'encodeur d'image ViT-H de SAM par un encodeur TinyViT distillé, si bien que le même flux de travail guidé par prompts de point et de boîte tourne sur du matériel plus léger. LibreYOLO en embarque un portage natif via une factory LibreSAM dédiée, distincte de la factory de détecteurs LibreYOLO().

Tâches
instance segmentation
Tailles
tiny 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
MobileSAM par Kyung Hee University, Apache-2.0. Article, source
Licences
Code Apache-2.0, poids Apache-2.0. Usage commercial

Installation

MobileSAM demande l'extra sam : le téléchargement des poids propre à LibreYOLO passe toujours par l'outillage de snapshot Hugging Face de transformers, même si l'inférence tourne sur un décodeur natif, hors transformers.

bash
pip install "libreyolo[sam]"

Prédire

LibreSAM(...) (ou le LibreMobileSAM(...) propre à la famille) est un point d'entrée distinct de LibreYOLO(...) : il renvoie un segmenteur guidé par prompts plutôt qu'un détecteur, parce qu'ici une passe avant n'a aucun sens sans prompt spatial. Il n'existe pas de commande CLI libreyolo predict pour cette famille ; utilisez l'API Python.

Prompts de point et de boîte
from libreyolo import LibreSAM, SAMPLE_IMAGE # MobileSAM a une seule taille, "tiny": aucun autre alias n'est utile.model = LibreSAM("mobilesam") # Un prompt de point: [x, y] en pixels, label 1 = premier plan.result = model.predict(SAMPLE_IMAGE, points=[640, 420], labels=[1])print(result.masks.xy)      # un polygone par masqueprint(result.boxes.xyxy)    # boîte ajustée dérivée du masque # Un prompt de boîte au lieu d'un point.result = model.predict(SAMPLE_IMAGE, bboxes=[300, 200, 900, 700]) # Sans aucun prompt, l'image entière est segmentée (un générateur# automatique de masques simplifié, pas celui de référence).result = model.predict(SAMPLE_IMAGE)
Encoder une fois, envoyer plusieurs prompts
from libreyolo import LibreMobileSAM, SAMPLE_IMAGE model = LibreMobileSAM() # L'encodeur d'image est la partie coûteuse. set_image() le lance une# fois; chaque predict() ensuite 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 de point accepte [x, y] pour un objet, [[x, y], ...] pour plusieurs, ou des tableaux numpy ; labels marque chaque point 1 (premier plan) ou 0 (arrière-plan) et vaut par défaut tout en premier plan. Un prompt de boîte prend [x1, y1, x2, y2] ou une liste de boîtes, un masque par boîte. Omettre les deux prompts segmente l'image entière en soumettant une grille dense de prompts et en gardant les masques confiants qui ne se recouvrent pas ; ce mode « tout segmenter » est simplifié par rapport au générateur automatique de masques de référence et peut sous-segmenter les scènes chargées, si bien qu'un vrai prompt de point ou de boîte reste le chemin précis. conf filtre sur la qualité de masque prédite (IoU), pas sur une confiance de détection : passez 0.0 pour conserver tous les candidats. multimask=True renvoie les trois masques d'ambiguïté tout-contre-partie de SAM pour chaque prompt au lieu du seul meilleur. device= déplace le modèle et, si une session set_image() est active, son embedding mis en cache. Chaque masque porte l'id de classe 0, nommé "object", puisqu'un masque guidé par prompts n'a pas d'ensemble de classes fixe. train(), val(), export() et track() lèvent tous NotImplementedError pour cette famille : MobileSAM est en prédiction seule dans LibreYOLO. Voir la prédiction pour les types de sources.

Variantes

Une seule taille, tiny, à une entrée fixe de 1024 px : MobileSAM livre un unique encodeur TinyViT plutôt que l'échelle base/large/huge proposée par SAM-1.

Checkpoints

Tous les fichiers de poids publiés de cette famille.

FichierEntrée (px)Licence des poids
Instance segmentation
LibreMobileSAM.ptapache-2.0

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
MobileSAM, Kyung Hee University
Licence du projet d'origine
Apache-2.0
Source du projet d'origine
github.com/ChaoningZhang/MobileSAM
Code de LibreYOLO
MIT
Poids
Apache-2.0, republiés sur huggingface.co/LibreYOLO
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 carries a native port of the TinyViT image encoder, prompt encoder, two-way transformer and mask decoder rather than vendoring upstream files unmodified, checked for bit-exact parity against the original Apache-2.0 implementation, with a NOTICE recording that provenance. The converted checkpoint is hosted as LibreMobileSAM.pt on the LibreYOLO Hugging Face org, tagged Apache-2.0 there as well.

Citation

@article{mobile_sam,
  title={Faster Segment Anything: Towards Lightweight SAM for Mobile Applications},
  author={Zhang, Chaoning and Han, Dongshen and Qiao, Yu and Kim, Jung Uk and Bae, Sung-Ho and Lee, Seungkyu and Hong, Choong Seon},
  journal={arXiv preprint arXiv:2306.14289},
  year={2023}
}

Copié depuis le bloc de citation des auteurs sur github.com/ChaoningZhang/MobileSAM#bibtex-of-our-mobilesam.

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.