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 en temps réel, établissant ainsi de nouvelles normes dans ce domaine.
Introduction à SAM: Le modèle Segment Anything
Le modèle Segment Anything, ou SAM, est un modèle de segmentation d'image de pointe qui permet une segmentation rapide, offrant une polyvalence inégalée dans les tâches d'analyse d'image. 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'image.
SAMLa conception avancée du logiciel lui permet de s'adapter à de nouvelles distributions d'images et à de nouvelles tâches sans connaissances préalables, une caractéristique 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 matière d'absence de clichés, surpassant dans de nombreux cas les résultats antérieurs entièrement supervisés.
SA-1B Exemples d'images. Images de l'ensemble de données : masques superposés de l'ensemble de données SA-1B récemment introduit. SA-1B contient 11 millions d'images diverses, à haute résolution, sous licence et protégeant la vie privée, 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, ils sont d'une grande qualité et d'une grande diversité. Les images sont regroupées en fonction du nombre de masques par image pour la visualisation (il y a ∼100 masques par image en moyenne).
Principales caractéristiques du modèle Segment Anything (SAM)
- Tâche de segmentation avec invite : SAM a été conçu pour effectuer une tâche de segmentation avec invite, ce qui lui permet de générer des masques de segmentation valides à partir de n'importe quelle invite, comme des indices spatiaux ou textuels identifiant un objet.
- Architecture avancée : Le modèle Segment Anything utilise un puissant encodeur d'images, un encodeur d'invites et un décodeur de masques léger. Cette architecture unique permet des invites flexibles, le calcul des masques en temps réel et la prise en compte de l'ambiguïté dans les tâches de segmentation.
- Le jeu de données SA-1B : Introduit par le projet Segment Anything, l'ensemble de données SA-1B comporte 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.
- Performance zéro-coup : SAM affiche une performance zéro-coup exceptionnelle pour 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 rapide.
Pour un examen approfondi du modèle Segment Anything et de l'ensemble de données SA-1B, veuillez visiter 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 émojis ✅ pour les modes pris en charge et des émojis ❌ pour les modes non pris en charge.
Type de modèle | Poids pré-entraînés | Tâches prises en charge | Inférence | Validation | Formation | Exportation |
---|---|---|---|---|---|---|
SAM base | sam_b.pt | Segmentation des instances | ✅ | ❌ | ❌ | ❌ |
SAM important | sam_l.pt | Segmentation des instances | ✅ | ❌ | ❌ | ❌ |
Comment utiliser SAM: Versatilité 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'apprentissage. Cela inclut la détection des bords, la génération de propositions d'objets, la segmentation d'instances et la prédiction préliminaire texte-masque. Grâce à une ingénierie rapide, SAM peut s'adapter rapidement à de nouvelles tâches et à de nouvelles distributions de données, ce qui en fait un outil polyvalent et puissant pour tous vos besoins en matière de segmentation d'images.
SAM exemple de prédiction
Segment avec messages-guides
Segmenter l'image à l'aide d'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'ensemble de l'image.
- La logique ici est de segmenter l'ensemble de l'image si vous ne passez pas d'invites (bboxes/points/masques).
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()
Segmenter tout 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)
Note
Tous les retours results
dans les exemples ci-dessus sont Résultats qui permet 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.
SAM comparaison vs YOLOv8
Nous comparons ici le plus petit modèle SAM de Meta, SAM-b, avec le plus petit modèle de segmentation de Ultralytics , YOLOv8n-seg :
Modèle | Taille (MB) |
Paramètres (M) |
Vitesse (CPU) (ms/im) |
---|---|---|---|
Meta SAM-b | 358 | 94.7 | 51096 |
MobileSAM | 40.7 | 10.1 | 46122 |
FastSAM-s avec YOLOv8 backbone | 23.7 | 11.8 | 115 |
Ultralytics YOLOv8n-seg | 6,7 (53,4x plus petit) | 3,4 (27,9x moins) | 59 (866x plus rapide) |
Cette comparaison montre les différences d'ordre de grandeur entre les tailles et les vitesses des modèles. Si le site SAM offre des possibilités uniques de segmentation automatique, il n'est pas un concurrent direct des modèles de segmentation YOLOv8 , qui sont plus petits, plus rapides et plus efficaces.
Les tests sont effectués sur un Apple M2 Macbook 2023 avec 16GB de RAM. Pour reproduire ce test :
Exemple
from ultralytics import ASSETS, SAM, YOLO, FastSAM
# Profile SAM-b, MobileSAM
for file in ["sam_b.pt", "mobile_sam.pt"]:
model = SAM(file)
model.info()
model(ASSETS)
# Profile FastSAM-s
model = FastSAM("FastSAM-s.pt")
model.info()
model(ASSETS)
# Profile YOLOv8n-seg
model = YOLO("yolov8n-seg.pt")
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, qui permet 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 fonction permet une annotation rapide et précise d'un grand nombre d'images, sans qu'il soit nécessaire de procéder à un étiquetage manuel fastidieux.
Générer un ensemble de données de segmentation à l'aide d'un modèle de détection
Pour auto-annoter votre jeu de données à l'aide du cadre Ultralytics , utilisez l'outil auto_annotate
comme indiqué ci-dessous :
Exemple
Argument | Type | Description | Défaut |
---|---|---|---|
data |
str |
Chemin d'accès au dossier contenant les images à annoter. | |
det_model |
str , optionnel |
Modèle de détection YOLO pré-entraîné. La valeur par défaut est "yolo11x.pt". | 'yolo11x.pt' |
sam_model |
str , optionnel |
Modèle de segmentation pré-entraîné SAM . La valeur par défaut est 'sam_b.pt'. | 'sam_b.pt' |
device |
str , optionnel |
Appareil sur lequel les modèles doivent être exécutés. La valeur par défaut est une chaîne vide (CPU ou GPU, si disponible). | |
conf |
float , optionnel |
Seuil de confiance pour le modèle de détection ; la valeur par défaut est 0,25. | 0.25 |
iou |
float , optionnel |
Seuil de l'IoU pour le filtrage des cases qui se chevauchent dans les résultats de la détection ; la valeur par défaut est de 0,45. | 0.45 |
imgsz |
int , optionnel |
Dimension de redimensionnement de l'image d'entrée ; la valeur par défaut est 640. | 640 |
max_det |
int , optionnel |
Limite les détections par image pour contrôler les sorties dans les scènes denses. | 300 |
classes |
list , optionnel |
Filtre les prédictions sur les identifiants de classe spécifiés, en ne renvoyant que les détections pertinentes. | None |
output_dir |
str , Aucun, facultatif |
Répertoire dans lequel enregistrer les résultats annotés. Par défaut, il s'agit d'un dossier "labels" situé dans le même répertoire que "data". | None |
Le auto_annotate
prend le chemin de vos images, avec des arguments optionnels pour spécifier les modèles de détection et de segmentation SAM pré-entraînés, 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 à l'aide de modèles pré-entraînés peut réduire considérablement le temps et les efforts nécessaires à la création d'ensembles de données de segmentation de haute qualité. Cette fonction est particulièrement utile pour les chercheurs et les développeurs confrontés à de grandes collections d'images, car elle leur permet de se concentrer sur le développement et l'évaluation de modèles plutôt que sur l'annotation manuelle.
Citations et remerciements
Si vous trouvez SAM utile dans votre travail de recherche ou de développement, pensez à 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 avoir créé et maintenu cette ressource précieuse pour la communauté de la vision par ordinateur.
FAQ
Qu'est-ce que le modèle Segment Anything (SAM) par Ultralytics?
Le modèle Segment Anything Model (SAM) de Ultralytics est un modèle de segmentation d'image révolutionnaire conçu pour les tâches de segmentation par incitation. Il s'appuie sur une architecture avancée, comprenant des encodeurs d'images et d'invites combinés à un décodeur de masque léger, pour générer des masques de segmentation de haute qualité à partir de diverses invites telles que des indices spatiaux ou textuels. Entraîné sur le vaste ensemble de données SA-1B, SAM excelle dans les performances "zero-shot", s'adaptant à de nouvelles distributions d'images et à de nouvelles tâches sans connaissances préalables. Pour en savoir plus , cliquez ici.
Comment puis-je utiliser le modèle Segment Anything (SAM) pour la segmentation d'images ?
Vous pouvez utiliser le modèle Segment Anything (SAM) pour la segmentation d'images en lançant une inférence avec diverses invites telles que des boîtes de délimitation 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 lancer l'inférence avec SAM dans l'interface de ligne de commande (CLI) :
Pour des instructions d'utilisation plus détaillées, consultez la section Segmentation.
Comment les sites SAM et YOLOv8 se comparent-ils en termes de performances ?
Par rapport à YOLOv8, les modèles SAM tels que SAM-b et FastSAM-s sont plus grands et plus lents, mais ils offrent des possibilités uniques de segmentation automatique. Par exemple, Ultralytics YOLOv8n -seg est 53,4 fois plus petit et 866 fois plus rapide que SAM-b. Cependant, les performances de SAM'zero-shot' le rendent très flexible et efficace dans diverses tâches non formées. Pour en savoir plus sur les comparaisons de performances entre SAM et YOLOv8 , cliquez ici.
Comment puis-je auto-annoter mon jeu de données en utilisant SAM?
Ultralytics SAM offre une fonction 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 dans : 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 facultatifs pour les modèles de détection et de segmentation SAM pré-entraînés, ainsi que les spécifications du périphérique et du répertoire de sortie. Pour un guide complet, voir Auto-Annotation.
Quels sont les ensembles de données utilisés pour former 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 sur 11 millions d'images. SA-1B est le plus grand ensemble de données de segmentation à ce jour. Il fournit des données d'entraînement diversifiées et de haute qualité, garantissant des performances impressionnantes dans des tâches de segmentation variées. Pour plus de détails, visitez la section Dataset.