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-shot : SAM affiche une performance zéro-shot 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èle Poids pré-entraînés Tâches prises en charge Inférence Validation Formation Exporter
SAM base sam_b.pt Segmentation des instances
SAM grand sam_l.pt Segmentation des instances

Comment utiliser SAM: Versatilité et puissance dans la segmentation d'images

Le modèle Segment Anything peut être employé 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 points prompt
results = model("ultralytics/assets/zidane.jpg", points=[900, 370], labels=[1])

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'images 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])
results = predictor(points=[900, 370], labels=[1])

# 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 retours 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èle Taille Paramètres Vitesse (CPU)
Meta's SAM-b 358 MB 94.7 M 51096 ms/im
MobileSAM 40.7 MB 10.1 M 46122 ms/im
FastSAM-s avec YOLOv8 backbone 23.7 MB 11.8 M 115 ms/im
Ultralytics YOLOv8n-seg 6.7 MB (53.4x plus petit) 3,4 M (27,9x moins) 59 ms/im (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 SAM, YOLO, FastSAM

# Profile SAM-b
model = SAM("sam_b.pt")
model.info()
model("ultralytics/assets")

# Profile MobileSAM
model = SAM("mobile_sam.pt")
model.info()
model("ultralytics/assets")

# Profile FastSAM-s
model = FastSAM("FastSAM-s.pt")
model.info()
model("ultralytics/assets")

# Profile YOLOv8n-seg
model = YOLO("yolov8n-seg.pt")
model.info()
model("ultralytics/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="yolov8x.pt", sam_model="sam_b.pt")
Argument Type Description Défaut
données str Chemin d'accès à un dossier contenant des images à annoter.
det_model str, optionnel Modèle de détection de YOLO pré-entraîné. La valeur par défaut est 'yolov8x.pt'. 'yolov8x.pt'
sam_modèle str, optionnel Modèle de segmentation pré-entraîné SAM . La valeur par défaut est 'sam_b.pt'. 'sam_b.pt'
appareil 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).
répertoire_de_sortie str, None, optionnel Ré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". Aucun

Le auto_annotate prend le chemin d'accès à 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])

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.


Cette FAQ a pour but de répondre aux questions les plus courantes concernant le modèle Segment Anything (SAM) de Ultralytics, d'améliorer la compréhension des utilisateurs et de faciliter l'utilisation efficace des produits Ultralytics . Pour plus d'informations, consulte les sections correspondantes dont les liens figurent dans le texte.



Créé le 2023-11-12, Mis à jour le 2024-07-18
Auteurs : Laughing-q (1), glenn-jocher (15), Burhan-Q (1), ChaoningZhang (1)

Commentaires