Passer au contenu

SAM 2.1

Nous venons d'ajouter la prise en charge du modèle SAM2.1, plus précis. Veuillez l'essayer !

SAM 2 : Segment Anything Model 2

Inférence avec Segment Anything 2 dans Colab

SAM 2, le successeur de Segment Anything Model (SAM) de Meta, est un outil de pointe conçu pour la segmentation complète d'objets dans les images et les vidéos. Il excelle dans le traitement de données visuelles complexes grâce à une architecture de modèle unifiée et incitable qui prend en charge le traitement en temps réel et la généralisation zéro-shot.

Exemples de résultats de SAM 2

Principales caractéristiques



Regarder : Comment exécuter l'inférence avec SAM2 de Meta en utilisant Ultralytics | Guide étape par étape 🎉

Architecture de modèle unifiée

SAM 2 combine les capacités de segmentation d'images et de vidéos dans un seul modèle. Cette unification simplifie le déploiement et permet une performance cohérente sur différents types de médias. Il exploite une interface flexible basée sur des invites, permettant aux utilisateurs de spécifier les objets d'intérêt par le biais de différents types d'invites, tels que des points, des boîtes englobantes ou des masques.

Performance en temps réel

Le modèle atteint des vitesses d'inférence en temps réel, traitant environ 44 images par seconde. Cela rend SAM 2 adapté aux applications nécessitant une rétroaction immédiate, telles que le montage vidéo et la réalité augmentée.

Généralisation zéro-shot

SAM 2 peut segmenter des objets qu'il n'a jamais rencontrés auparavant, démontrant une forte généralisation zéro-shot. Ceci est particulièrement utile dans les domaines visuels divers ou en évolution où les catégories prédéfinies peuvent ne pas couvrir tous les objets possibles.

Affinement interactif

Les utilisateurs peuvent affiner de manière itérative les résultats de segmentation en fournissant des invites supplémentaires, permettant un contrôle précis sur la sortie. Cette interactivité est essentielle pour affiner les résultats dans des applications telles que l'annotation vidéo ou l'imagerie médicale.

Gestion avancée des défis visuels

SAM 2 inclut des mécanismes pour gérer les défis courants de la segmentation vidéo, tels que l'occlusion et la réapparition d'objets. Il utilise un mécanisme de mémoire sophistiqué pour suivre les objets à travers les images, assurant la continuité même lorsque les objets sont temporairement masqués ou sortent et rentrent dans la scène.

Pour une compréhension plus approfondie de l'architecture et des capacités de SAM 2, consultez le document de recherche sur SAM 2.

Performance et détails techniques

SAM 2 établit une nouvelle référence dans le domaine, surpassant les modèles précédents sur diverses métriques :

Métrique SAM 2 SOTA précédente
Segmentation vidéo interactive Meilleur -
Interactions humaines requises 3x moins Référence
Précision de la segmentation d'image Améliorée SAM
Vitesse d'inférence 6x plus rapide SAM

Architecture du modèle

Composants principaux

  • Encodeur d'images et de vidéos : Utilise une architecture basée sur un transformateur pour extraire des caractéristiques de haut niveau à partir d'images et de trames vidéo. Ce composant est responsable de la compréhension du contenu visuel à chaque pas de temps.
  • Encodeur d'invites : Traite les invites fournies par l'utilisateur (points, boîtes, masques) pour guider la tâche de segmentation. Cela permet à SAM 2 de s'adapter à l'entrée de l'utilisateur et de cibler des objets spécifiques dans une scène.
  • Mécanisme de mémoire : Comprend un encodeur de mémoire, une banque de mémoire et un module d’attention de la mémoire. Ces composants stockent et utilisent collectivement les informations des trames passées, ce qui permet au modèle de maintenir un suivi d’objet cohérent dans le temps.
  • Décodeur de masques : Génère les masques de segmentation finaux en fonction des caractéristiques d'image et des invites encodées. En vidéo, il utilise également le contexte de la mémoire pour assurer un suivi précis à travers les trames.

Schéma de l'architecture de SAM 2

Mécanisme de mémoire et gestion des occlusions

Le mécanisme de mémoire permet à SAM 2 de gérer les dépendances temporelles et les occlusions dans les données vidéo. Lorsque les objets se déplacent et interagissent, SAM 2 enregistre leurs caractéristiques dans une banque de mémoire. Lorsqu'un objet devient occlus, le modèle peut s'appuyer sur cette mémoire pour prédire sa position et son apparence lorsqu'il réapparaît. La tête d'occlusion gère spécifiquement les scénarios où les objets ne sont pas visibles, en prédisant la probabilité qu'un objet soit occlus.

Résolution de l'ambiguïté multi-masque

Dans les situations ambiguës (par exemple, les objets qui se chevauchent), SAM 2 peut générer plusieurs prédictions de masque. Cette fonctionnalité est essentielle pour représenter avec précision les scènes complexes où un seul masque pourrait ne pas suffire à décrire les nuances de la scène.

Ensemble de données SA-V

L'ensemble de données SA-V, développé pour l'entraînement de SAM 2, est l'un des ensembles de données de segmentation vidéo les plus vastes et les plus diversifiés disponibles. Il comprend :

  • Plus de 51 000 vidéos : Capturées dans 47 pays, offrant un large éventail de scénarios réels.
  • Plus de 600 000 annotations de masques : Annotations de masques spatio-temporelles détaillées, appelées "masklets", couvrant des objets entiers et des parties.
  • Échelle de l'ensemble de données : Il contient 4,5 fois plus de vidéos et 53 fois plus d'annotations que les précédents ensembles de données les plus importants, offrant une diversité et une complexité sans précédent.

Bancs d'essai

Segmentation vidéo d'objets

SAM 2 a démontré des performances supérieures sur les principaux benchmarks de segmentation vidéo :

Ensemble de données J&F J F
DAVIS 2017 82.5 79.8 85.2
YouTube-VOS 81.2 78.9 83.5

Segmentation interactive

Dans les tâches de segmentation interactive, SAM2 fait preuve d'une efficacité et d'une précision remarquables :

Ensemble de données NoC@90 AUC
DAVIS Interactive 1.54 0.872

Installation

Pour installer SAM2, utilisez la commande suivante. Tous les modèles SAM2 seront automatiquement téléchargés lors de la première utilisation.

pip install ultralytics

Comment utiliser SAM 2 : La polyvalence dans la segmentation d'images et de vidéos

Le tableau suivant détaille les modèles SAM2 disponibles, leurs poids pré-entraînés, les tâches prises en charge et leur compatibilité avec différents modes de fonctionnement tels que l'Inférence, la Validation, l'Entraînement et l'Exportation.

Type de modèle Poids pré-entraînés Tâches prises en charge Inférence Validation Entraînement Exporter
SAM2 tiny sam2_t.pt Segmentation d'instance
SAM2 small sam2_s.pt Segmentation d'instance
SAM2 base sam2_b.pt Segmentation d'instance
SAM2 large sam2_l.pt Segmentation d'instance
SAM2.1 tiny sam2.1_t.pt Segmentation d'instance
SAM2.1 small sam2.1_s.pt Segmentation d'instance
SAM2.1 base sam2.1_b.pt Segmentation d'instance
SAM 2.1 large sam2.1_l.pt Segmentation d'instance

Exemples de prédiction SAM 2

SAM2 peut être utilisé dans un large éventail de tâches, notamment l'édition vidéo en temps réel, l'imagerie médicale et les systèmes autonomes. Sa capacité à segmenter les données visuelles statiques et dynamiques en fait un outil polyvalent pour les chercheurs et les développeurs.

Segmenter avec des invites

Segmenter avec des invites

Utilisez des invites pour segmenter des objets spécifiques dans des images ou des vidéos.

from ultralytics import SAM

# Load a model
model = SAM("sam2.1_b.pt")

# Display model information (optional)
model.info()

# Run inference with bboxes prompt
results = model("path/to/image.jpg", bboxes=[100, 100, 200, 200])

# 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]])

Tout segmenter

Tout segmenter

Segmentez l'ensemble du contenu de l'image ou de la vidéo sans invites spécifiques.

from ultralytics import SAM

# Load a model
model = SAM("sam2.1_b.pt")

# Display model information (optional)
model.info()

# Run inference
model("path/to/video.mp4")
# Run inference with a SAM 2 model
yolo predict model=sam2.1_b.pt source=path/to/video.mp4

Segmenter une vidéo et suivre les objets

Segmenter une vidéo

Segmenter l'ensemble du contenu vidéo avec des invites spécifiques et suivre les objets.

from ultralytics.models.sam import SAM2VideoPredictor

# Create SAM2VideoPredictor
overrides = dict(conf=0.25, task="segment", mode="predict", imgsz=1024, model="sam2_b.pt")
predictor = SAM2VideoPredictor(overrides=overrides)

# Run inference with single point
results = predictor(source="test.mp4", points=[920, 470], labels=[1])

# Run inference with multiple points
results = predictor(source="test.mp4", points=[[920, 470], [909, 138]], labels=[1, 1])

# Run inference with multiple points prompt per object
results = predictor(source="test.mp4", points=[[[920, 470], [909, 138]]], labels=[[1, 1]])

# Run inference with negative points prompt
results = predictor(source="test.mp4", points=[[[920, 470], [909, 138]]], labels=[[1, 0]])
  • Cet exemple montre comment SAM2 peut être utilisé pour segmenter l'ensemble du contenu d'une image ou d'une vidéo si aucune invite (bboxes/points/masques) n'est fournie.

Segmentation et suivi interactifs dynamiques

SAM2DynamicInteractivePredictor est une extension de SAM2 qui permet une interaction dynamique avec des images multiples et des capacités d'apprentissage continu. Ce prédicteur prend en charge les mises à jour en temps réel et la gestion de la mémoire pour améliorer les performances de suivi sur une séquence d'images. Comparé au SAM2 original, SAM2DynamicInteractivePredictor reconstruit le flux d'inférence afin d'utiliser au mieux les modèles SAM2 pré-entraînés sans nécessiter d'entraînement supplémentaire.

Exemples de résultats de SAM 2

Principales caractéristiques

Il offre trois améliorations significatives :

  1. Interactif dynamique: Ajout de nouvelles invites pour la fusion/le suivi de nouvelles instances dans les images suivantes, à tout moment pendant le traitement de la vidéo.
  2. Apprentissage continu: Ajouter de nouvelles invites pour les instances existantes afin d'améliorer les performances du modèle au fil du temps.
  3. Prise en charge d'images multiples indépendantes: Traitement de plusieurs images indépendantes (pas nécessairement à partir d'une séquence vidéo) avec partage de la mémoire et suivi des objets entre les images.

Capacités de base

  • Flexibilité des invites: Accepte les boîtes englobantes, les points et les masques en tant qu'invites.
  • Gestion de la banque de mémoire: Maintient une banque de mémoire dynamique pour stocker les états des objets à travers les cadres.
  • Suivi de plusieurs objets: Prise en charge du suivi simultané de plusieurs objets avec des identifiants individuels.
  • Mises à jour en temps réel: Permet d'ajouter de nouvelles invites pendant l'inférence sans retraiter les images précédentes.
  • Traitement indépendant des images: Traitement d'images indépendantes avec un contexte de mémoire partagée pour la cohérence des objets d'une image à l'autre.

Ajout dynamique d'objets

from ultralytics.models.sam import SAM2DynamicInteractivePredictor

# Create SAM2DynamicInteractivePredictor
overrides = dict(conf=0.01, task="segment", mode="predict", imgsz=1024, model="sam2_t.pt", save=False)
predictor = SAM2DynamicInteractivePredictor(overrides=overrides, max_obj_num=10)

# Define a category by box prompt
predictor.inference(img="image1.jpg", bboxes=[[100, 100, 200, 200]], obj_ids=[1], update_memory=True)

# Detect this particular object in a new image
results = predictor(source="image2.jpg")

# Add new category with a new object ID
results = predictor(
    source="image4.jpg",
    bboxes=[[300, 300, 400, 400]],  # New object
    obj_ids=[2],  # New object ID
    update_memory=True,  # Add to memory
)
# Perform inference
results = predictor.inference(img="image5.jpg")

# Add refinement prompts to the same category to boost performance
# This helps when object appearance changes significantly
results = predictor(
    source="image6.jpg",
    points=[[150, 150]],  # Refinement point
    labels=[1],  # Positive point
    obj_ids=[2],  # Same object ID
    update_memory=True,  # Update memory with new information
)
# Perform inference on new image
results = predictor(source="image7.jpg")

Remarque

L'argument SAM2DynamicInteractivePredictor est conçu pour fonctionner avec les modèles SAM2 , et permet d'ajouter/affiner des catégories à l'aide de tous les éléments suivants Invites boîte/point/masque que SAM2 prend en charge de manière native. Il est particulièrement utile pour les scénarios dans lesquels les objets apparaissent ou changent au fil du temps, comme dans les tâches d'annotation vidéo ou d'édition interactive.

Arguments

Nom Valeur par défaut Type de données Description
max_obj_num 3 str Le nombre maximum de catégories prédéfini
update_memory False bool Mise à jour ou non de la mémoire avec les nouvelles invites
obj_ids None List[int] Liste des ID d'objets correspondant aux invites

Cas d'utilisation

SAM2DynamicInteractivePredictor est idéal pour :

  • Flux d'annotation vidéo où de nouveaux objets apparaissent au cours de la séquence
  • Montage vidéo interactif nécessitant l'ajout et le raffinement d'objets en temps réel
  • Applications de surveillance nécessitant un suivi dynamique des objets
  • Imagerie médicale pour le suivi des structures anatomiques dans le temps
  • Systèmes autonomes nécessitant une détection et un suivi adaptatifs des objets
  • Ensembles de données multi-images pour une segmentation cohérente des objets sur des images indépendantes
  • Analyse de la collecte d'images lorsque des objets doivent être suivis dans différentes scènes
  • Segmentation inter-domaine tirant parti de la mémoire de divers contextes d'images
  • Annotation semi-automatique pour une création efficace de jeux de données avec une intervention manuelle minimale

Comparaison de SAM 2 vs YOLO

Ici, nous comparons les modèles SAM 2 de Meta, y compris la plus petite variante SAM2-t, avec le plus petit modèle de segmentation d'Ultralytics, YOLO11n-seg :

Modèle Taille
(Mo)
Paramètres
(M)
Vitesse (CPU)
(ms/im)
Meta SAM-b 375 93.7 49401
Meta SAM2-b 162 80.8 31901
Meta SAM2-t 78.1 38.9 25997
MobileSAM 40.7 10.1 25381
FastSAM-s avec backbone YOLOv8 23.7 11.8 55.9
Ultralytics YOLOv8n-seg 6.7 (11.7x plus petit) 3.4 (11.4x moins) 24,5 (1061x plus rapide)
Ultralytics YOLO11n-seg 5,9 (13,2x plus petit) 2,9 (13,4x moins) 30,1 (864x plus rapide)

Cette comparaison démontre les différences substantielles de taille et de vitesse des modèles entre les variantes 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 et YOLO11n-seg, sont considérablement plus petits, plus rapides et plus efficaces sur le plan computationnel.

Tests effectués sur un Apple M4 Pro 2025 avec 24 Go de RAM en utilisant torch==2.6.0 et ultralytics==8.3.90. Pour reproduire ce test :

Exemple

from ultralytics import ASSETS, SAM, YOLO, FastSAM

# Profile SAM2-t, SAM2-b, SAM-b, MobileSAM
for file in ["sam_b.pt", "sam2_b.pt", "sam2_t.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
for file_name in ["yolov8n-seg.pt", "yolo11n-seg.pt"]:
    model = YOLO(file_name)
    model.info()
    model(ASSETS)

Auto-annotation : Création efficace d'ensembles de données

L'auto-annotation est une fonctionnalité puissante de SAM2, permettant aux utilisateurs de générer des ensembles de données de segmentation rapidement et avec précision en exploitant des modèles pré-entraînés. Cette capacité est particulièrement utile pour créer de grands ensembles de données de haute qualité sans effort manuel important.

Comment effectuer une auto-annotation avec SAM 2



Regarder : Annotation automatique avec le modèle Segment Anything 2 de Meta en utilisant Ultralytics | Étiquetage de données

Pour auto-annoter votre ensemble de données en utilisant SAM2, suivez cet exemple :

Exemple d'auto-annotation

from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolo11x.pt", sam_model="sam2_b.pt")
Argument Type Par défaut Description
data str requis Chemin d'accès au répertoire contenant les images cibles pour l'annotation ou la segmentation.
det_model str 'yolo11x.pt' Chemin du modèle de détection YOLO pour la détection d'objets initiale.
sam_model str 'sam_b.pt' Chemin d'accès au modèle SAM pour la segmentation (prend en charge les variantes SAM, SAM2 et les modèles mobile_sam).
device str '' Dispositif de calcul (par exemple, « cuda:0 », « cpu » ou « » pour la détection automatique du dispositif).
conf float 0.25 Seuil de confiance de détection YOLO pour filtrer les détections faibles.
iou float 0.45 Seuil IoU pour la suppression non maximale afin de filtrer les boîtes qui se chevauchent.
imgsz int 640 Taille d'entrée pour le redimensionnement des images (doit être un multiple de 32).
max_det int 300 Nombre maximal de détections par image pour l’efficacité de la mémoire.
classes list[int] None Liste des indices de classe à détecter (par exemple, [0, 1] pour les personnes et les vélos).
output_dir str None Répertoire d'enregistrement des annotations (par défaut, '.\labels' par rapport au chemin des données).

Cette fonction facilite la création rapide d'ensembles de données de segmentation de haute qualité, idéale pour les chercheurs et les développeurs visant à accélérer leurs projets.

Limites

Malgré ses atouts, SAM 2 présente certaines limites :

  • Stabilité du suivi : SAM 2 peut perdre la trace des objets lors de séquences prolongées ou de changements de point de vue importants.
  • Confusion d'objets : Le modèle peut parfois confondre des objets d'apparence similaire, en particulier dans les scènes encombrées.
  • Efficacité avec plusieurs objets : L'efficacité de la segmentation diminue lors du traitement simultané de plusieurs objets en raison du manque de communication inter-objets.
  • Précision des détails : Peut manquer des détails fins, en particulier avec des objets en mouvement rapide. Des invites supplémentaires peuvent partiellement résoudre ce problème, mais la fluidité temporelle n'est pas garantie.

Citations et remerciements

Si SAM 2 est un élément essentiel de votre travail de recherche ou de développement, veuillez le citer en utilisant la référence suivante :

@article{ravi2024sam2,
  title={SAM 2: Segment Anything in Images and Videos},
  author={Ravi, Nikhila and Gabeur, Valentin and Hu, Yuan-Ting and Hu, Ronghang and Ryali, Chaitanya and Ma, Tengyu and Khedr, Haitham and R{\"a}dle, Roman and Rolland, Chloe and Gustafson, Laura and Mintun, Eric and Pan, Junting and Alwala, Kalyan Vasudev and Carion, Nicolas and Wu, Chao-Yuan and Girshick, Ross and Doll{\'a}r, Piotr and Feichtenhofer, Christoph},
  journal={arXiv preprint},
  year={2024}
}

Nous remercions Meta AI pour ses contributions à la communauté de l'IA avec ce modèle et cet ensemble de données révolutionnaires.

FAQ

Qu'est-ce que SAM 2 et comment améliore-t-il le modèle Segment Anything (SAM) original ?

SAM 2, le successeur du Segment Anything Model (SAM) de Meta, est un outil de pointe conçu pour la segmentation complète d'objets dans les images et les vidéos. Il excelle dans la gestion de données visuelles complexes grâce à une architecture de modèle unifiée et incitable qui prend en charge le traitement en temps réel et la généralisation zéro-shot. SAM 2 offre plusieurs améliorations par rapport au SAM original, notamment :

  • Architecture de modèle unifiée : Combine les capacités de segmentation d'images et de vidéos dans un seul modèle.
  • Performance en temps réel : Traite environ 44 images par seconde, ce qui le rend adapté aux applications nécessitant un retour d'information immédiat.
  • Généralisation zéro-shot : Segmente des objets qu'il n'a jamais rencontrés auparavant, ce qui est utile dans divers domaines visuels.
  • Affinement interactif : Permet aux utilisateurs d'affiner itérativement les résultats de segmentation en fournissant des invites supplémentaires.
  • Gestion avancée des défis visuels : Gère les défis courants de la segmentation vidéo tels que l'occlusion et la réapparition d'objets.

Pour plus de détails sur l'architecture et les capacités de SAM 2, consultez le document de recherche SAM 2.

Comment puis-je utiliser SAM 2 pour la segmentation vidéo en temps réel ?

SAM 2 peut être utilisé pour la segmentation vidéo en temps réel en tirant parti de son interface incitable et de ses capacités d'inférence en temps réel. Voici un exemple de base :

Segmenter avec des invites

Utilisez des invites pour segmenter des objets spécifiques dans des images ou des vidéos.

from ultralytics import SAM

# Load a model
model = SAM("sam2_b.pt")

# Display model information (optional)
model.info()

# Segment with bounding box prompt
results = model("path/to/image.jpg", bboxes=[100, 100, 200, 200])

# Segment with point prompt
results = model("path/to/image.jpg", points=[150, 150], labels=[1])

Pour une utilisation plus complète, consultez la section Comment utiliser SAM 2.

Quels ensembles de données sont utilisés pour entraîner SAM 2, et comment améliorent-ils ses performances ?

SAM 2 est entraîné sur l'ensemble de données SA-V, l'un des ensembles de données de segmentation vidéo les plus vastes et les plus diversifiés disponibles. L'ensemble de données SA-V comprend :

  • Plus de 51 000 vidéos : Capturées dans 47 pays, offrant un large éventail de scénarios réels.
  • Plus de 600 000 annotations de masques : Annotations de masques spatio-temporelles détaillées, appelées "masklets", couvrant des objets entiers et des parties.
  • Échelle de l'ensemble de données : Comporte 4,5 fois plus de vidéos et 53 fois plus d'annotations que les ensembles de données les plus volumineux précédents, offrant une diversité et une complexité sans précédent.

Cet ensemble de données étendu permet à SAM 2 d'obtenir des performances supérieures sur les principaux benchmarks de segmentation vidéo et améliore ses capacités de généralisation zéro-shot. Pour plus d'informations, consultez la section Ensemble de données SA-V.

Comment SAM 2 gère-t-il les occlusions et les réapparitions d'objets dans la segmentation vidéo ?

SAM 2 comprend un mécanisme de mémoire sophistiqué pour gérer les dépendances temporelles et les occlusions dans les données vidéo. Le mécanisme de mémoire se compose de :

  • Encodeur de mémoire et banque de mémoire : Stocke les caractéristiques des images précédentes.
  • Module d'attention de la mémoire : Utilise les informations stockées pour maintenir un suivi cohérent des objets au fil du temps.
  • Tête d'occlusion : Gère spécifiquement les scénarios où les objets ne sont pas visibles, en prédisant la probabilité qu'un objet soit occulté.

Ce mécanisme assure une continuité même lorsque les objets sont temporairement masqués ou quittent et réintègrent la scène. Pour plus de détails, consultez la section Mécanisme de mémoire et gestion de l'occlusion.

Comment SAM 2 se compare-t-il à d'autres modèles de segmentation comme YOLO11 ?

Les modèles SAM 2, tels que SAM2-t et SAM2-b de Meta, offrent de puissantes capacités de segmentation zero-shot, mais sont considérablement plus grands et plus lents que les modèles YOLO11. Par exemple, YOLO11n-seg est environ 13 fois plus petit et plus de 860 fois plus rapide que SAM2-b. Bien que SAM 2 excelle dans les scénarios de segmentation polyvalents, basés sur des invites et zero-shot, YOLO11 est optimisé pour la vitesse, l'efficacité et les applications en temps réel, ce qui le rend mieux adapté au déploiement dans des environnements aux ressources limitées.



📅 Créé il y a 1 an ✏️ Mis à jour il y a 4 jours

Commentaires