Ultralytics YOLO27 :
Get Started

Modèle de segmentation universelle (SAM)#

Évolution de SAM

Il s'agit du modèle SAM original de Meta. Pour découvrir des fonctionnalités plus avancées, consulte SAM 2 pour la segmentation vidéo ou SAM 3 pour la segmentation de concepts guidée par des invites textuelles et des exemples d'images.

How to use Segment Anything In Colab

Découvre les possibilités de la segmentation d’images avec le modèle de segmentation universelle, ou SAM. Ce modèle révolutionnaire a changé la donne en introduisant la segmentation d’images guidée par des invites avec des performances en temps réel, établissant ainsi de nouvelles normes dans ce domaine.

Présentation de SAM : le modèle de segmentation universelle#

Le modèle de segmentation universelle, ou SAM, est un modèle de segmentation d’images de pointe qui permet une segmentation guidée par des invites et offre une polyvalence inégalée pour les tâches d’analyse d’images. SAM est au cœur de l’initiative Segment Anything, un projet novateur qui introduit un nouveau modèle, une nouvelle tâche et un nouveau jeu de données pour la segmentation d’images.

La conception avancée de SAM lui permet de s’adapter à de nouvelles distributions d’images et à de nouvelles tâches sans connaissances préalables, une caractéristique appelée transfert zero-shot. Entraîné sur le vaste jeu 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é d’impressionnantes performances zero-shot, dépassant dans de nombreux cas les résultats précédents obtenus avec un apprentissage entièrement supervisé.

Exemple du jeu de données SA-1B avec des masques de segmentation automatique Exemples d’images SA-1B. Masques superposés aux images du jeu de données SA-1B récemment présenté. SA-1B contient 11 M d’images variées, haute résolution, sous licence et respectueuses de la vie privée, ainsi que 1,1 milliard de masques de segmentation de haute qualité. SAM a entièrement annoté ces masques automatiquement. Les évaluations humaines et de nombreuses expériences ont confirmé leur grande qualité et leur diversité. Pour la visualisation, les images sont regroupées selon le nombre de masques par image (en moyenne, il y a ∼100 masques par image).

Principales fonctionnalités du modèle de segmentation universelle (SAM)#

  • Tâche de segmentation guidée par des invites : SAM a été conçu pour effectuer des tâches de segmentation guidées par des invites. Il peut ainsi générer des masques de segmentation valides à partir de n’importe quelle invite, comme des indices spatiaux ou textuels permettant d’identifier un objet.
  • Architecture avancée : le modèle de segmentation universelle utilise un puissant encodeur d’images, un encodeur d’invites et un décodeur de masques léger. Cette architecture unique permet de formuler des invites de manière flexible, de calculer des masques en temps réel et de prendre en compte les ambiguïtés dans les tâches de segmentation.
  • Le jeu de données SA-1B : présenté par le projet Segment Anything, le jeu de données SA-1B contient plus d’un milliard de masques sur 11 millions d’images. Plus grand jeu de données de segmentation à ce jour, il fournit à SAM une source de données d’entraînement vaste et diversifiée.
  • Performances zero-shot : SAM affiche d’excellentes performances zero-shot pour diverses tâches de segmentation, ce qui en fait un outil immédiatement utilisable pour de nombreuses applications nécessitant peu d’ingénierie des invites.

Pour en savoir plus sur le modèle de segmentation universelle et le jeu de données SA-1B, consulte le dépôt GitHub Segment Anything et l’article de recherche Segment Anything.

SAM sur la plateforme Ultralytics

SAM alimente la fonctionnalité d’annotation intelligente sur la plateforme Ultralytics, qui permet de créer des masques intelligemment par clic pour étiqueter rapidement les jeux de données. Consulte le guide d’annotation pour en savoir plus.

Modèles disponibles, tâches prises en charge et modes de fonctionnement#

Ce tableau présente les modèles disponibles et leurs poids préentraînés, les tâches qu’ils prennent en charge ainsi que leur compatibilité avec différents modes de fonctionnement, tels que l’inférence, la validation, l’entraînement et l’exportation. Les modes pris en charge sont indiqués par l’émoji ✅ et les modes non pris en charge par l’émoji ❌.

Type de modèlePoids préentraînésTâches prises en chargeEntraînementValidationInférenceExport
SAM basesam_b.ptSegmentation d'instances❌❌✅❌
SAM largesam_l.ptSegmentation d'instances❌❌✅❌

Comment utiliser SAM : polyvalence et puissance pour la segmentation d’images#

Le modèle de segmentation universelle peut être utilisé pour de nombreuses tâches en aval qui dépassent le cadre de ses données d’entraînement. Il s’agit notamment de la détection des contours, de la génération de propositions d’objets, de la segmentation d’instances et de la prédiction préliminaire de masques à partir de texte. Grâce à l’ingénierie des invites, SAM peut rapidement s’adapter à de nouvelles tâches et distributions de données en zero-shot, ce qui en fait un outil polyvalent et puissant pour tous tes besoins en segmentation d’images.

Exemple de prédiction avec SAM#

Segmenter avec des invites

Segmenter une image à l’aide des invites fournies.

from ultralytics import SAM

# Charger un modèle
model = SAM("sam_b.pt")

# Afficher les informations du modèle (facultatif)
model.info()

# Exécuter l’inférence avec des bboxes comme invite
results = model("ultralytics/assets/zidane.jpg", bboxes=[439, 437, 524, 709])

# Exécuter l’inférence avec un seul point
results = model(points=[900, 370], labels=[1])

# Exécuter l’inférence avec plusieurs points
results = model(points=[[400, 370], [900, 370]], labels=[1, 1])

# Exécuter l’inférence avec une invite à plusieurs points par objet
results = model(points=[[[400, 370], [900, 370]]], labels=[[1, 1]])

# Exécuter l’inférence avec une invite de points négatifs
results = model(points=[[[400, 370], [900, 370]]], labels=[[1, 0]])
Tout segmenter

Segmenter l’image entière.

from ultralytics import SAM

# Charger un modèle
model = SAM("sam_b.pt")

# Afficher les informations du modèle (facultatif)
model.info()

# Exécuter l’inférence
model("path/to/image.jpg")
  • La logique consiste ici à segmenter l’image entière si tu ne fournis aucune invite (bboxes/points/masques).
Exemple avec SAMPredictor

Cette méthode te permet de définir l’image une seule fois, puis d’exécuter plusieurs inférences avec des invites sans relancer l’encodeur d’images.

import cv2

from ultralytics.models.sam import Predictor as SAMPredictor

# Créer SAMPredictor
overrides = {"conf": 0.25, "task": "segment", "mode": "predict", "imgsz": 1024, "model": "mobile_sam.pt"}
predictor = SAMPredictor(overrides=overrides)

# Définir l’image
predictor.set_image("ultralytics/assets/zidane.jpg")  # Définir le fichier image
predictor.set_image(cv2.imread("ultralytics/assets/zidane.jpg"))  # Définir avec np.ndarray
results = predictor(bboxes=[439, 437, 524, 709])

# Exécuter l’inférence avec une invite à un seul point
results = predictor(points=[900, 370], labels=[1])

# Exécuter l’inférence avec une invite à plusieurs points
results = predictor(points=[[400, 370], [900, 370]], labels=[1, 1])

# Exécuter l’inférence avec une invite de points négatifs
results = predictor(points=[[[400, 370], [900, 370]]], labels=[[1, 0]])

# Réinitialiser l’image
predictor.reset_image()

Tout segmenter avec des arguments supplémentaires.

from ultralytics.models.sam import Predictor as SAMPredictor

# Créer SAMPredictor
overrides = {"conf": 0.25, "task": "segment", "mode": "predict", "imgsz": 1024, "model": "mobile_sam.pt"}
predictor = SAMPredictor(overrides=overrides)

# Segmenter avec des arguments supplémentaires
results = predictor(source="ultralytics/assets/zidane.jpg", crop_n_layers=1, points_stride=64, min_mask_region_area=100)
Remarque

Tous les objets results renvoyés dans les exemples ci-dessus sont des objets Results qui permettent d’accéder facilement aux masques prédits et à l’image source.

Comparaison de SAM et YOLO#

Nous comparons ici le modèle SAM-b de Meta aux modèles de segmentation Ultralytics, notamment YOLO26n-seg :

ModèleTaille
(MB)
Paramètres
(M)
Vitesse (CPU)
(ms/im)
Meta SAM-b37593.741703
MobileSAM40.710.123802
FastSAM-s avec le réseau de base YOLOv823.911.858.0
Ultralytics YOLOv8n-seg7.1 (52.8x plus petit)3.4 (27.6x de moins)24.8 (1682x plus rapide)
Ultralytics YOLO11n-seg6.2 (60.5x plus petit)2.9 (32.3x de moins)24.3 (1716x plus rapide)
Ultralytics YOLO26n-seg6.7 (56.0x plus petit)2.7 (34.7x de moins)25.2 (1655x plus rapide)

Cette comparaison met en évidence les différences considérables de taille et de vitesse entre les variantes de SAM et les modèles de segmentation YOLO. SAM offre des capacités uniques de segmentation automatique, mais les modèles YOLO, en particulier YOLOv8n-seg, YOLO11n-seg et YOLO26n-seg, sont nettement plus petits, plus rapides et plus efficaces sur le plan des calculs.

Les vitesses de SAM ont été mesurées avec PyTorch, et celles de YOLO avec ONNX Runtime. Les tests ont été réalisés sur un Apple M4 Air de 2025 doté de 16 Go de RAM, avec torch==2.10.0, ultralytics==8.4.31 et onnxruntime==1.24.4. Pour reproduire ce test :

Exemple
from ultralytics import ASSETS, SAM, YOLO, FastSAM

# Évaluer SAM-b et MobileSAM
for file in ["sam_b.pt", "mobile_sam.pt"]:
    model = SAM(file)
    model.info()
    model(ASSETS)

# Profiler FastSAM-s
model = FastSAM("FastSAM-s.pt")
model.info()
model(ASSETS)

# Profiler les modèles YOLO (ONNX)
for file_name in ["yolov8n-seg.pt", "yolo11n-seg.pt", "yolo26n-seg.pt"]:
    model = YOLO(file_name)
    model.info()
    onnx_path = model.export(format="onnx", dynamic=True, nms=False)  # Tête sans NMS de YOLO26 ; sans effet pour YOLOv8/YOLO11
    model = YOLO(onnx_path)
    model(ASSETS)

Annotation automatique : une méthode rapide pour créer des jeux de données de segmentation#

L’annotation automatique est une fonctionnalité clé de SAM. Elle permet de générer un jeu de données de segmentation à l’aide d’un modèle de détection préentraîné. Cette fonctionnalité permet d’annoter rapidement et précisément un grand nombre d’images, sans avoir à effectuer un étiquetage manuel chronophage.

Générer un jeu de données de segmentation à l’aide d’un modèle de détection#

Pour annoter automatiquement ton jeu de données avec le framework Ultralytics, utilise la fonction auto_annotate comme indiqué ci-dessous :

Exemple
from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="sam_b.pt")
ArgumentTypeValeur par défautDescription
datastrobligatoireChemin vers le répertoire contenant les images à annoter ou à segmenter.
det_modelstr'yolo26x.pt'Chemin vers le modèle de détection YOLO pour la détection initiale des objets.
sam_modelstr'sam_b.pt'Chemin vers le modèle SAM pour la segmentation (prend en charge les poids SAM, SAM 2, MobileSAM et SAM 3).
devicestr''Périphérique de calcul (par exemple, 'cuda:0', 'cpu' ou '' pour la détection automatique du périphérique).
conffloat0.25Seuil de confiance de détection YOLO pour filtrer les détections peu fiables.
ioufloat0.45Seuil IoU pour la suppression non maximale afin de filtrer les boîtes qui se chevauchent.
imgszint640Taille d’entrée pour le redimensionnement des images (arrondie au multiple de 32 supérieur si nécessaire).
max_detint300Nombre maximal de détections par image pour limiter l’utilisation de la mémoire.
classeslist[int]NoneListe des indices de classes à détecter (par exemple, [0, 1] pour personne et vélo).
output_dirstrNoneRépertoire d’enregistrement des annotations (par défaut : répertoire frère de <data>_auto_annotate_labels).

La fonction auto_annotate prend le chemin d’accès à tes images et accepte des arguments facultatifs 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 où 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 de jeux de données de segmentation de haute qualité. Cette fonctionnalité est particulièrement utile aux chercheurs et aux développeurs qui travaillent sur 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 SAM t’est utile dans tes travaux de recherche ou de développement, pense à citer l’article :

Citation
@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 remercions Meta AI d’avoir créé et maintenu cette ressource précieuse pour la communauté de la vision par ordinateur.

FAQ#

  • Le modèle de segmentation universelle (SAM) de Meta est un modèle révolutionnaire de segmentation d’images conçu pour les tâches de segmentation guidée par des invites. Il s’appuie sur une architecture avancée, composée notamment d’encodeurs d’images et d’invites associés à un décodeur de masques léger, pour générer des masques de segmentation de haute qualité à partir de différentes invites, comme des indices spatiaux ou textuels. Entraîné sur le vaste jeu de données SA-1B, SAM excelle en zero-shot et s’adapte à de nouvelles distributions d’images et à de nouvelles tâches sans connaissances préalables.

  • Tu peux utiliser le modèle de segmentation universelle (SAM) pour segmenter des images en exécutant une inférence avec différentes invites, comme des boîtes englobantes ou des points. Voici un exemple avec Python :

    from ultralytics import SAM
    
    # Charger un modèle
    model = SAM("sam_b.pt")
    
    # Segmenter à l’aide d’une invite de boîte englobante
    model("ultralytics/assets/zidane.jpg", bboxes=[439, 437, 524, 709])
    
    # Segmenter avec une invite de points
    model("ultralytics/assets/zidane.jpg", points=[900, 370], labels=[1])
    
    # Segmenter avec une invite à plusieurs points
    model("ultralytics/assets/zidane.jpg", points=[[400, 370], [900, 370]], labels=[1, 1])
    
    # Segmenter avec une invite à plusieurs points par objet
    model("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 1]])
    
    # Segmenter avec une invite de points négatifs.
    model("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 0]])

    Tu peux aussi exécuter l’inférence avec SAM depuis l’interface en ligne de commande (CLI) :

    yolo predict model=sam_b.pt source=path/to/image.jpg

    Pour obtenir des instructions d’utilisation plus détaillées, consulte la section Segmentation.

  • Comparées aux modèles YOLO, les variantes de SAM telles que SAM-b, MobileSAM et FastSAM-s sont généralement plus volumineuses et plus lentes, mais offrent des capacités uniques de segmentation zero-shot. Par exemple, YOLO26n-seg est 56x plus petit et plus de 1650x plus rapide que le modèle SAM-b original de Meta sur CPU. Les modèles YOLO sont donc idéaux pour les applications qui nécessitent une segmentation rapide, légère et efficace en calcul, tandis que les modèles SAM excellent dans les tâches de segmentation flexible, guidée par des invites et zero-shot.

  • SAM d’Ultralytics propose une fonctionnalité d’annotation automatique qui permet de générer des jeux de données de segmentation à l’aide d’un modèle de détection préentraîné. Voici un exemple avec Python :

    from ultralytics.data.annotator import auto_annotate
    
    auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="sam_b.pt")

    Cette fonction prend le chemin d’accès à tes images et accepte des arguments facultatifs pour les modèles de détection et de segmentation SAM préentraînés, ainsi que pour spécifier l’appareil et le répertoire de sortie. Pour consulter le guide complet, voir Annotation automatique.

  • SAM est entraîné sur le vaste jeu 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 jeu de données de segmentation à ce jour. Il fournit des données d’entraînement variées et de haute qualité, garantissant des performances zero-shot impressionnantes dans diverses tâches de segmentation. Pour en savoir plus, consulte la section Jeux de données.

Commentaires