Meet YOLO26: next-gen vision AI.

Link to this sectionSegment Anything Model (SAM)#

Évolution de SAM

Ceci est le modèle SAM original de Meta. Pour des capacités améliorées, consulte SAM 2 pour la segmentation vidéo ou SAM 3 pour la segmentation de concepts sollicitables avec des invites d'exemples de texte et d'images.

Comment utiliser Segment Anything dans Colab

Bienvenue à la frontière de la segmentation d'image avec le Segment Anything Model, ou SAM. Ce modèle révolutionnaire a changé la donne en introduisant la segmentation d'image sollicitable avec des performances en temps réel, établissant de nouvelles normes dans le domaine.

Link to this sectionIntroduction à SAM : Le Segment Anything Model#

Le Segment Anything Model, ou SAM, est un modèle de segmentation d'image de pointe qui permet une segmentation sollicitable, offrant une polyvalence inégalée dans les tâches d'analyse d'image. SAM constitue le cœur de l'initiative Segment Anything, un projet révolutionnaire qui introduit un nouveau modèle, une nouvelle tâche et un nouveau jeu de données pour la segmentation d'image.

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 fonctionnalité connue sous le nom de 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é des performances zero-shot impressionnantes, surpassant dans de nombreux cas les résultats précédents entièrement supervisés.

Exemple de jeu de données SA-1B avec des masques de segmentation automatiques Images d'exemple SA-1B. Masques superposés sur les images du jeu de données nouvellement introduit SA-1B. 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 vérifié par des évaluations humaines et de nombreuses expériences, ils 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).

Link to this sectionFonctionnalités clés du Segment Anything Model (SAM)#

  • Tâche de segmentation sollicitable : SAM a été conçu avec une tâche de segmentation sollicitable à 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 Segment Anything Model utilise un encodeur d'image puissant, un encodeur d'invite et un décodeur de masque léger. Cette architecture unique permet une sollicitation flexible, un calcul de masque en temps réel et une sensibilisation à l'ambiguïté dans les tâches de segmentation.
  • Le jeu de données SA-1B : Introduit par le projet Segment Anything, le jeu de données SA-1B présente plus d'un milliard de masques sur 11 millions d'images. En tant que plus grand jeu de données de segmentation à ce jour, il fournit à SAM une source de données d'entraînement diversifiée et à grande échelle.
  • Performances Zero-Shot : SAM affiche des performances zero-shot exceptionnelles sur diverses tâches de segmentation, ce qui en fait un outil prêt à l'emploi pour diverses applications avec un besoin minimal de prompt engineering.

Pour un aperçu détaillé du Segment Anything Model et du jeu de données SA-1B, visite le GitHub de Segment Anything et consulte l'article de recherche Segment Anything.

SAM sur la plateforme Ultralytics

SAM alimente la fonctionnalité d'annotation intelligente sur la plateforme Ultralytics, permettant un masquage intelligent basé sur le clic pour un étiquetage rapide des jeux de données. Consulte le guide d'annotation pour plus de détails.

Link to this sectionModè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èlePoids pré-entraînésTâches prises en chargeInférenceValidationEntraînementExporter (Export)
SAM basesam_b.ptSegmentation d'instance
SAM largesam_l.ptSegmentation d'instance

Link to this sectionComment utiliser SAM : Polyvalence et puissance dans la segmentation d'image#

Le Segment Anything Model peut être utilisé pour une multitude de tâches en aval qui vont au-delà de ses données d'entraînement. Cela inclut la détection de contours, la génération de propositions d'objets, la segmentation d'instance et la prédiction préliminaire texte-à-masque. Avec le prompt engineering, SAM peut s'adapter rapidement aux nouvelles tâches et distributions de données de manière zero-shot, s'établissant comme un outil polyvalent et puissant pour tous tes besoins en segmentation d'image.

Link to this sectionExemple de prédiction SAM#

Segmenter avec des invites

Segmenter l'image avec des 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]])
Segmenter tout

Segmenter toute l'image.

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")
  • La logique ici est de segmenter toute l'image si tu ne passes aucune invite (bbox/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 exécuter l'encodeur d'image plusieurs fois.

import cv2

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)
Remarque

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

  • Pour plus d'arguments supplémentaires pour Segment everything, consulte la référence Predictor/generate.

Link to this sectionComparaison de SAM vs YOLO#

Ici, nous comparons le modèle SAM-b de Meta avec les modèles de segmentation Ultralytics incluant YOLO26n-seg :

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

Cette comparaison démontre les différences substantielles de tailles et de vitesses de modèle entre les variantes de 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, YOLO11n-seg et YOLO26n-seg, sont nettement plus petits, plus rapides et plus efficaces sur le plan informatique.

Vitesses de SAM mesurées avec PyTorch, vitesses de YOLO mesurées avec ONNX Runtime. Tests effectués sur un Apple M4 Air 2025 avec 16 Go de RAM en utilisant 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

# 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 YOLO models (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)
    model = YOLO(onnx_path)
    model(ASSETS)

Link to this sectionAuto-Annotation : Un chemin rapide vers les jeux de données de segmentation#

L'auto-annotation est une fonctionnalité clé de SAM, permettant aux utilisateurs de générer un jeu de données de segmentation en utilisant 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 le besoin d'un étiquetage manuel chronophage.

Link to this sectionGénère ton jeu de données de segmentation en utilisant un modèle de détection#

Pour auto-annoter 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")
ArgumentTypeDéfautDescription
datastrrequisChemin vers le répertoire contenant les images cibles pour l'annotation ou la segmentation.
det_modelstr'yolo26x.pt'Chemin du modèle de détection YOLO pour la détection d'objet initiale.
sam_modelstr'sam_b.pt'Chemin du modèle SAM pour la segmentation (prend en charge les poids SAM, SAM 2, MobileSAM et SAM 3).
devicestr''Appareil de calcul (par ex., 'cuda:0', 'cpu', ou '' pour la détection automatique de l'appareil).
conffloat0.25Seuil de confiance de détection YOLO pour filtrer les détections faibles.
ioufloat0.45Seuil IoU pour la suppression non-maximale (NMS) afin de filtrer les boîtes qui se chevauchent.
imgszint640Taille d'entrée pour le redimensionnement des images (doit être un multiple de 32).
max_detint300Nombre maximum de détections par image pour l'efficacité de la mémoire.
classeslist[int]NoneListe des indices de classe à détecter (par ex., [0, 1] pour personne et vélo).
output_dirstrNoneRépertoire de sauvegarde pour les annotations (par défaut : dossier frère <data>_auto_annotate_labels).

La fonction auto_annotate prend le chemin vers tes images, avec des arguments optionnels pour spécifier les modèles de détection et de segmentation SAM pré-entraînés, le périphérique 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 réduire considérablement le temps et les efforts nécessaires pour créer des jeux de données de segmentation de haute qualité. Cette fonctionnalité est particulièrement avantageuse pour les chercheurs et développeurs traitant de grandes collections d'images, car elle leur permet de se concentrer sur le développement et l'évaluation du modèle plutôt que sur l'annotation manuelle.

Link to this sectionCitations et remerciements#

Si SAM t'est utile dans tes travaux de recherche ou de développement, pense à citer notre 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 tenons à exprimer notre gratitude à Meta AI pour avoir créé et maintenu cette ressource précieuse pour la communauté du computer vision.

Link to this sectionFAQ#

Link to this sectionQu'est-ce que le Segment Anything Model (SAM) par Ultralytics ?#

Le Segment Anything Model (SAM) par Ultralytics est un modèle de segmentation d'image révolutionnaire conçu pour des tâches de segmentation par prompt. Il s'appuie sur une architecture avancée, incluant 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 indices spatiaux ou textuels. Entraîné sur l'immense SA-1B dataset, SAM excelle dans les performances zero-shot, s'adaptant à de nouvelles distributions d'images et tâches sans connaissances préalables.

Link to this sectionComment puis-je utiliser le Segment Anything Model (SAM) pour la segmentation d'image ?#

Tu peux utiliser le Segment Anything Model (SAM) pour la segmentation d'image en exécutant l'inférence avec divers prompts tels que des boîtes englobantes ou des points. Voici un exemple en 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]])

Alternativement, tu peux exécuter l'inférence avec SAM via l'interface en 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.

Link to this sectionComment les modèles SAM et YOLO se comparent-ils en termes de performances ?#

Par rapport aux modèles YOLO, les variantes de SAM comme SAM-b, 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, YOLO26n-seg est 56x plus petit et plus de 1650x plus rapide que le modèle SAM-b original de Meta sur CPU. Cela rend les modèles YOLO idéaux pour les applications nécessitant une segmentation rapide, légère et efficace en calcul, tandis que les modèles SAM excellent dans les tâches de segmentation flexibles, promptables et zero-shot.

Link to this sectionComment puis-je auto-annoter mon jeu de données en utilisant SAM ?#

Le SAM d'Ultralytics propose une fonctionnalité d'auto-annotation qui permet de générer des jeux de données de segmentation en utilisant 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="yolo26x.pt", sam_model="sam_b.pt")

Cette fonction prend le chemin de tes images et des arguments optionnels 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.

Link to this sectionQuels jeux de données sont utilisés pour entraîner le Segment Anything Model (SAM) ?#

SAM est entraîné sur le vaste SA-1B dataset, qui comprend plus d'un milliard de masques sur 11 millions d'images. SA-1B est le plus grand jeu de données de segmentation à ce jour, fournissant des training data de haute qualité et diversifiés, assurant une performance zero-shot impressionnante dans des tâches de segmentation variées. Pour plus de détails, visite la section Dataset.

Commentaires