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 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
model('ultralytics/assets/zidane.jpg', bboxes=[439, 437, 524, 709])

# Run inference with points prompt
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'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])
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)

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 FastSAM, SAM, YOLO

# 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 Périphérique sur lequel les modèles sont 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.

mots-clés : Segmenter n'importe quoi, Modèle Segmenter n'importe quoi, SAM, Meta SAM, segmentation d'images, segmentation prompte, performance zéro-coup, jeu de données SA-1B, architecture avancée, auto-annotation, Ultralytics, modèles pré-entraînés, SAM base, SAM large, segmentation d'instances, vision par ordinateur, IA, intelligence artificielle, apprentissage automatique, annotation de données, masques de segmentation, modèle de détection, YOLO modèle de détection, bibtex, Meta AI.



Créé le 2023-11-12, Mis à jour le 2024-01-16
Auteurs : glenn-jocher (9), ChaoningZhang (1), Laughing-q (1)

Commentaires