Skip to content

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 zéro-coup. 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 d'images, surpassant dans de nombreux cas les résultats antérieurs entièrement supervisés.

Image de l'échantillon du jeu de données SA-1B Exemples d'images. Images de l'ensemble de données masques superposés de l'ensemble de données SA-1B nouvellement 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 façon 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 par 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 avec une tâche de segmentation avec invite à l'esprit, 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 emploie 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.
  • L'ensemble 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-temps : SAM affiche une performance zéro-temps 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, visite le site Web de Segment Anything et consulte 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 spécifiques pré-entraînés, les tâches qu'ils prennent en charge et leur compatibilité avec différents modes de fonctionnement comme Inference, Validation, Training et Export, indiqués par des emojis ✅ pour les modes pris en charge et des emojis ❌ pour les modes non pris en charge.

Type de modèlePoids pré-entraînésTâches prises en chargeInférenceValidationFormationExporter
SAM basesam_b.ptSegmentation des instances
SAM grandsam_l.ptSegmentation 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 comprend la détection des bords, la génération de propositions d'objets, la segmentation des 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 tes besoins en matière de segmentation d'images.

SAM exemple de prédiction

Segment avec messages-guides

Segmente l'image à l'aide des instructions 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]])

Segmente tout

Segmente 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 tu ne passes pas d'invites (bboxes/points/masques).

Exemple de SAMPredictor

De cette façon, tu peux définir l'image une fois et exécuter l'inférence des invites plusieurs fois sans avoir à 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()

Segmente 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 renvoyés results dans les exemples ci-dessus sont Résultats qui permet d'accéder facilement aux masques prédits et à l'image source.

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èleTaille
(MB)
Paramètres
(M)
Vitesse (CPU)
(ms/im)
Meta SAM-b35894.751096
MobileSAM40.710.146122
FastSAM-s avec YOLOv8 backbone23.711.8115
Ultralytics YOLOv8n-seg6,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. Alors que SAM présente des capacité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 Macbook Apple M2 2023 avec 16 Go de mémoire vive. 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 fonction 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, en contournant le besoin d'un étiquetage manuel fastidieux.

Génère ton ensemble de données de segmentation à l'aide d'un modèle de détection

Pour auto-annoter ton jeu de données à l'aide du cadre Ultralytics , utilise l'outil auto_annotate 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")
ArgumentTypeDescriptionDéfaut
datastrChemin d'accès à un dossier contenant des images à annoter.
det_modelstroptionnelModèle de détection YOLO pré-entraîné. La valeur par défaut est 'yolo11x.pt'.'yolo11x.pt'
sam_modelstroptionnelModèle de segmentation pré-entraîné SAM . La valeur par défaut est 'sam_b.pt'.'sam_b.pt'
devicestroptionnelAppareil 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).
conffloatoptionnelSeuil de confiance pour le modèle de détection ; la valeur par défaut est 0,25.0.25
ioufloatoptionnelSeuil de l'IoU pour filtrer les cases qui se chevauchent dans les résultats de la détection ; la valeur par défaut est 0,45.0.45
imgszintoptionnelDimension de redimensionnement de l'image d'entrée ; la valeur par défaut est 640.640
max_detintoptionnelLimite les détections par image pour contrôler les sorties dans les scènes denses.300
classeslistoptionnelFiltre les prédictions sur les identifiants de classe spécifiés, en ne renvoyant que les détections pertinentes.None
output_dirstr, Aucun, optionnelRépertoire où enregistrer les résultats annotés. Par défaut, il s'agit d'un dossier "labels" dans le même répertoire que "data".None

Le auto_annotate prend le chemin de tes images, avec des arguments optionnels pour spécifier les modèles de détection et de segmentation SAM pré-entraînés, l'appareil sur lequel exécuter les modèles, et le répertoire de sortie pour enregistrer les résultats annotés.

L'annotation automatique à 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 bénéfique pour les chercheurs et les développeurs qui ont affaire à 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 tu trouves SAM utile dans ton travail de recherche ou de développement, pense à 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 la performance zéro-shot, s'adaptant à de nouvelles distributions d'images et à de nouvelles tâches sans connaissances préalables. Pour en savoir plus, clique ici.

Comment puis-je utiliser le modèle Segment Anything (SAM) pour la segmentation d'images ?

Tu peux utiliser le modèle Segment Anything (SAM) pour la segmentation d'images en effectuant une inférence avec différentes 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]])

Tu peux aussi lancer 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, visite la section Segmentation.

Comment les sites SAM et YOLOv8 se comparent-ils en termes de performance ?

Comparés à YOLOv8, les modèles SAM comme SAM-b et FastSAM-s sont plus grands et plus lents mais 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 , clique ici.

Comment puis-je auto-annoter mon jeu de données à l'aide de 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 à tes 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 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 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 de haute qualité et diversifiées, garantissant des performances impressionnantes de zéro-coup dans des tâches de segmentation variées. Pour plus de détails, visite la section Dataset.

📅 C réé il y a 1 an ✏️ Mis à jour il y a 18 jours

Commentaires