Modèle Segment Anything (SAM)
Bienvenue à la frontière de la segmentation d'images avec le modèle Segment Anything, ou SAM. Ce modèle révolutionnaire a changé la donne en introduisant la segmentation d'images amorçable avec des performances en temps réel, établissant de nouvelles normes dans le domaine.
Introduction à SAM : Le modèle Segment Anything
Le modèle Segment Anything, ou SAM, est un modèle de segmentation d'images de pointe qui permet une segmentation amorçable, offrant une polyvalence inégalée dans les tâches d'analyse d'images. SAM est au cœur de l'initiative Segment Anything, un projet révolutionnaire qui introduit un nouveau modèle, une nouvelle tâche et un nouvel ensemble de données pour la segmentation d'images.
La conception avancée de SAM lui permet de s'adapter à de nouvelles distributions et tâches d'images sans connaissance préalable, une fonctionnalité connue sous le nom de transfert zero-shot. Entraîné sur le vaste ensemble de données SA-1B, qui contient plus d'un milliard de masques répartis sur 11 millions d'images soigneusement sélectionnées, SAM a affiché des performances impressionnantes en zero-shot, dépassant dans de nombreux cas les résultats entièrement supervisés précédents.
Exemples d'images SA-1B. Images de l'ensemble de données avec des masques superposés provenant du nouvel ensemble de données SA-1B. SA-1B contient 11 millions d'images diverses, haute résolution, sous licence et protégeant la confidentialité, ainsi que 1,1 milliard de masques de segmentation de haute qualité. Ces masques ont été annotés de manière entièrement automatique par SAM et, comme l'ont vérifié les évaluations humaines et de nombreuses expériences, sont de haute qualité et diversifiés. Les images sont regroupées par nombre de masques par image pour la visualisation (il y a en moyenne ∼100 masques par image).
Principales caractéristiques du modèle Segment Anything (SAM)
- Tâche de segmentation amorçable : SAM a été conçu avec une tâche de segmentation amorçable à l'esprit, lui permettant de générer des masques de segmentation valides à partir de n'importe quelle invite donnée, telle que des indices spatiaux ou textuels identifiant un objet.
- Architecture avancée : Le modèle Segment Anything utilise un puissant encodeur d'image, un encodeur d'invite et un décodeur de masque léger. Cette architecture unique permet un amorçage flexible, un calcul de masque en temps réel et une sensibilisation à l'ambiguïté dans les tâches de segmentation.
- L'ensemble de données SA-1B : Présenté par le projet Segment Anything, l'ensemble de données SA-1B contient plus d'un milliard de masques sur 11 millions d'images. En tant que plus grand ensemble de données de segmentation à ce jour, il fournit à SAM une source de données d'entraînement diversifiée et à grande échelle.
- Performances en zero-shot : SAM affiche des performances exceptionnelles en zero-shot dans diverses tâches de segmentation, ce qui en fait un outil prêt à l'emploi pour diverses applications avec un besoin minimal d'ingénierie d'invite.
Pour un examen approfondi du modèle Segment Anything et de l'ensemble de données SA-1B, veuillez consulter le site web Segment Anything et consulter le document de recherche Segment Anything.
Modèles disponibles, tâches prises en charge et modes de fonctionnement
Ce tableau présente les modèles disponibles avec leurs poids pré-entraînés spécifiques, les tâches qu'ils prennent en charge et leur compatibilité avec différents modes de fonctionnement tels que l'Inférence, la Validation, l'Entraînement et l'Exportation, indiqués par des emojis ✅ pour les modes pris en charge et des emojis ❌ pour les modes non pris en charge.
Type de modèle | Poids pré-entraînés | Tâches prises en charge | Inférence | Validation | Entraînement | Exporter |
---|---|---|---|---|---|---|
SAM base | sam_b.pt | Segmentation d'instance | ✅ | ❌ | ❌ | ❌ |
SAM large | sam_l.pt | Segmentation d'instance | ✅ | ❌ | ❌ | ❌ |
Comment utiliser SAM : Polyvalence et puissance dans la segmentation d'images
Le modèle Segment Anything peut être utilisé pour une multitude de tâches en aval qui vont au-delà de ses données d'entraînement. Cela comprend la détection des contours, la génération de propositions d'objets, la segmentation d'instance et la prédiction préliminaire de texte à masque. Grâce à l'ingénierie des invites, SAM peut rapidement s'adapter à de nouvelles tâches et distributions de données de manière zéro-shot, ce qui en fait un outil polyvalent et puissant pour tous vos besoins en matière de segmentation d'images.
Exemple de prédiction SAM
Segmenter avec des invites
Segmenter l'image avec les invites données.
from ultralytics import SAM
# Load a model
model = SAM("sam_b.pt")
# Display model information (optional)
model.info()
# Run inference with bboxes prompt
results = model("ultralytics/assets/zidane.jpg", bboxes=[439, 437, 524, 709])
# Run inference with single point
results = model(points=[900, 370], labels=[1])
# Run inference with multiple points
results = model(points=[[400, 370], [900, 370]], labels=[1, 1])
# Run inference with multiple points prompt per object
results = model(points=[[[400, 370], [900, 370]]], labels=[[1, 1]])
# Run inference with negative points prompt
results = model(points=[[[400, 370], [900, 370]]], labels=[[1, 0]])
Tout segmenter
Segmenter l'image entière.
from ultralytics import SAM
# Load a model
model = SAM("sam_b.pt")
# Display model information (optional)
model.info()
# Run inference
model("path/to/image.jpg")
# Run inference with a SAM model
yolo predict model=sam_b.pt source=path/to/image.jpg
- La logique ici est de segmenter l'image entière si vous ne passez aucune invite (bboxes/points/masks).
Exemple de SAMPredictor
De cette façon, vous pouvez définir l'image une fois et exécuter l'inférence des invites plusieurs fois sans exécuter l'encodeur d'image plusieurs fois.
from ultralytics.models.sam import Predictor as SAMPredictor
# Create SAMPredictor
overrides = dict(conf=0.25, task="segment", mode="predict", imgsz=1024, model="mobile_sam.pt")
predictor = SAMPredictor(overrides=overrides)
# Set image
predictor.set_image("ultralytics/assets/zidane.jpg") # set with image file
predictor.set_image(cv2.imread("ultralytics/assets/zidane.jpg")) # set with np.ndarray
results = predictor(bboxes=[439, 437, 524, 709])
# Run inference with single point prompt
results = predictor(points=[900, 370], labels=[1])
# Run inference with multiple points prompt
results = predictor(points=[[400, 370], [900, 370]], labels=[1, 1])
# Run inference with negative points prompt
results = predictor(points=[[[400, 370], [900, 370]]], labels=[[1, 0]])
# Reset image
predictor.reset_image()
Tout segmenter avec des arguments supplémentaires.
from ultralytics.models.sam import Predictor as SAMPredictor
# Create SAMPredictor
overrides = dict(conf=0.25, task="segment", mode="predict", imgsz=1024, model="mobile_sam.pt")
predictor = SAMPredictor(overrides=overrides)
# Segment with additional args
results = predictor(source="ultralytics/assets/zidane.jpg", crop_n_layers=1, points_stride=64)
Remarque
Tous les results
renvoyés dans les exemples Résultats ci-dessus sont des objets qui permettent d'accéder facilement aux masques prédits et à l'image source.
- Plus d'arguments supplémentaires pour
Segment everything
voirPredictor/generate
Référence.
Comparaison de SAM vs YOLO
Ici, nous comparons le modèle SAM-b de Meta avec le plus petit modèle de segmentation d'Ultralytics, YOLO11n-seg :
Modèle | Taille (Mo) |
Paramètres (M) |
Vitesse (CPU) (ms/im) |
---|---|---|---|
Meta SAM-b | 375 | 93.7 | 49401 |
MobileSAM | 40.7 | 10.1 | 25381 |
FastSAM-s avec backbone YOLOv8 | 23.7 | 11.8 | 55.9 |
Ultralytics YOLOv8n-seg | 6.7 (11.7x plus petit) | 3.4 (11.4x moins) | 24,5 (1061x plus rapide) |
Ultralytics YOLO11n-seg | 5,9 (13,2x plus petit) | 2,9 (13,4x moins) | 30,1 (864x plus rapide) |
Cette comparaison démontre les différences substantielles de taille et de vitesse des modèles entre les variantes SAM et les modèles de segmentation YOLO. Bien que SAM offre des capacités de segmentation automatique uniques, les modèles YOLO, en particulier YOLOv8n-seg et YOLO11n-seg, sont considérablement plus petits, plus rapides et plus efficaces sur le plan computationnel.
Tests effectués sur un Apple M4 Pro 2025 avec 24 Go de RAM en utilisant torch==2.6.0
et ultralytics==8.3.90
. Pour reproduire ce test :
Exemple
from ultralytics import ASSETS, SAM, YOLO, FastSAM
# Profile SAM2-t, SAM2-b, SAM-b, MobileSAM
for file in ["sam_b.pt", "sam2_b.pt", "sam2_t.pt", "mobile_sam.pt"]:
model = SAM(file)
model.info()
model(ASSETS)
# Profile FastSAM-s
model = FastSAM("FastSAM-s.pt")
model.info()
model(ASSETS)
# Profile YOLO models
for file_name in ["yolov8n-seg.pt", "yolo11n-seg.pt"]:
model = YOLO(file_name)
model.info()
model(ASSETS)
Auto-Annotation : Un chemin rapide vers les ensembles de données de segmentation
L'auto-annotation est une fonctionnalité clé de SAM, permettant aux utilisateurs de générer un ensemble de données de segmentation à l'aide d'un modèle de détection pré-entraîné. Cette fonctionnalité permet une annotation rapide et précise d'un grand nombre d'images, évitant ainsi le besoin d'un étiquetage manuel fastidieux.
Générez votre ensemble de données de segmentation à l'aide d'un modèle de détection
Pour auto-annoter votre ensemble de données avec le framework Ultralytics, utilisez la auto_annotate
fonction comme indiqué ci-dessous :
Exemple
from ultralytics.data.annotator import auto_annotate
auto_annotate(data="path/to/images", det_model="yolo11x.pt", sam_model="sam_b.pt")
Argument | Type | Par défaut | Description |
---|---|---|---|
data |
str |
requis | Chemin d'accès au répertoire contenant les images cibles pour l'annotation ou la segmentation. |
det_model |
str |
'yolo11x.pt' |
Chemin du modèle de détection YOLO pour la détection d'objets initiale. |
sam_model |
str |
'sam_b.pt' |
Chemin d'accès au modèle SAM pour la segmentation (prend en charge les variantes SAM, SAM2 et les modèles mobile_sam). |
device |
str |
'' |
Dispositif de calcul (par exemple, « cuda:0 », « cpu » ou « » pour la détection automatique du dispositif). |
conf |
float |
0.25 |
Seuil de confiance de détection YOLO pour filtrer les détections faibles. |
iou |
float |
0.45 |
Seuil IoU pour la suppression non maximale afin de filtrer les boîtes qui se chevauchent. |
imgsz |
int |
640 |
Taille d'entrée pour le redimensionnement des images (doit être un multiple de 32). |
max_det |
int |
300 |
Nombre maximal de détections par image pour l’efficacité de la mémoire. |
classes |
list[int] |
None |
Liste des indices de classe à détecter (par exemple, [0, 1] pour les personnes et les vélos). |
output_dir |
str |
None |
Répertoire d'enregistrement des annotations (par défaut, '.\labels' par rapport au chemin des données). |
L'argument auto_annotate
La fonction prend le chemin d'accès à vos images, avec des arguments optionnels pour spécifier les modèles de détection pré-entraînés et de segmentation SAM, le dispositif sur lequel exécuter les modèles et le répertoire de sortie pour enregistrer les résultats annotés.
L'auto-annotation avec des modèles pré-entraînés peut considérablement réduire le temps et les efforts nécessaires à la création d'ensembles de données de segmentation de haute qualité. Cette fonctionnalité est particulièrement avantageuse pour les chercheurs et les développeurs qui traitent de grandes collections d'images, car elle leur permet de se concentrer sur le développement et l'évaluation des modèles plutôt que sur l'annotation manuelle.
Citations et remerciements
Si vous trouvez SAM utile dans vos travaux de recherche ou de développement, veuillez envisager de citer notre article :
@misc{kirillov2023segment,
title={Segment Anything},
author={Alexander Kirillov and Eric Mintun and Nikhila Ravi and Hanzi Mao and Chloe Rolland and Laura Gustafson and Tete Xiao and Spencer Whitehead and Alexander C. Berg and Wan-Yen Lo and Piotr Dollár and Ross Girshick},
year={2023},
eprint={2304.02643},
archivePrefix={arXiv},
primaryClass={cs.CV}
}
Nous tenons à exprimer notre gratitude à Meta AI pour la création et la maintenance de cette ressource précieuse pour la communauté de la vision par ordinateur.
FAQ
Qu'est-ce que le modèle Segment Anything (SAM) d'Ultralytics ?
Le modèle Segment Anything Model (SAM) d'Ultralytics est un modèle de segmentation d'image révolutionnaire conçu pour les tâches de segmentation guidée. Il exploite une architecture avancée, comprenant des encodeurs d'image et de prompt combinés à un décodeur de masque léger, pour générer des masques de segmentation de haute qualité à partir de divers prompts tels que des repères spatiaux ou textuels. Entraîné sur le vaste ensemble de données SA-1B, SAM excelle dans la performance zero-shot, s'adaptant à de nouvelles distributions d'images et à de nouvelles tâches sans connaissance préalable.
Comment puis-je utiliser le modèle Segment Anything (SAM) pour la segmentation d'images ?
Vous pouvez utiliser le Segment Anything Model (SAM) pour la segmentation d'images en exécutant l'inférence avec divers prompts tels que des boîtes englobantes ou des points. Voici un exemple utilisant python :
from ultralytics import SAM
# Load a model
model = SAM("sam_b.pt")
# Segment with bounding box prompt
model("ultralytics/assets/zidane.jpg", bboxes=[439, 437, 524, 709])
# Segment with points prompt
model("ultralytics/assets/zidane.jpg", points=[900, 370], labels=[1])
# Segment with multiple points prompt
model("ultralytics/assets/zidane.jpg", points=[[400, 370], [900, 370]], labels=[[1, 1]])
# Segment with multiple points prompt per object
model("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 1]])
# Segment with negative points prompt.
model("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 0]])
Vous pouvez également exécuter l'inférence avec SAM dans l'interface de ligne de commande (CLI) :
yolo predict model=sam_b.pt source=path/to/image.jpg
Pour des instructions d'utilisation plus détaillées, consultez la section Segmentation.
Comment les modèles SAM et YOLO se comparent-ils en termes de performances ?
Comparées aux modèles YOLO, les variantes SAM telles que SAM-b, SAM2-t, MobileSAM et FastSAM-s sont généralement plus grandes et plus lentes, mais offrent des capacités uniques de segmentation zero-shot. Par exemple, Ultralytics YOLOv8n-seg est 11,7 fois plus petit et 1069 fois plus rapide que le modèle SAM-b original de Meta, ce qui souligne l'avantage significatif de YOLO en termes de vitesse et d'efficacité. De même, le nouveau YOLO11n-seg offre une taille encore plus réduite et maintient une vitesse d'inférence impressionnante. Cela rend les modèles YOLO idéaux pour les applications nécessitant une segmentation rapide, légère et efficace sur le plan computationnel, tandis que les modèles SAM excellent dans les tâches de segmentation flexibles, promptables et zero-shot.
Comment puis-je auto-annoter mon ensemble de données à l'aide de SAM ?
Le SAM d'Ultralytics offre une fonctionnalité d'auto-annotation qui permet de générer des ensembles de données de segmentation à l'aide d'un modèle de détection pré-entraîné. Voici un exemple en python :
from ultralytics.data.annotator import auto_annotate
auto_annotate(data="path/to/images", det_model="yolov8x.pt", sam_model="sam_b.pt")
Cette fonction prend le chemin d'accès à vos images et des arguments optionnels pour les modèles de détection pré-entraînés et de segmentation SAM, ainsi que les spécifications du dispositif et du répertoire de sortie. Pour un guide complet, consultez Auto-Annotation.
Quels ensembles de données sont utilisés pour entraîner le modèle Segment Anything (SAM) ?
SAM est entraîné sur le vaste ensemble de données SA-1B qui comprend plus d'un milliard de masques répartis sur 11 millions d'images. SA-1B est le plus grand ensemble de données de segmentation à ce jour, fournissant des données d'entraînement diverses et de haute qualité, garantissant des performances zero-shot impressionnantes dans des tâches de segmentation variées. Pour plus de détails, consultez la section Ensemble de données.