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.
- 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.
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.
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)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.
| Fichier | Entrée (px) | Licence des poids |
|---|---|---|
| Instance segmentation | ||
| LibreMobileSAM.pt | apache-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.