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.

Segment interactif dynamique et suivi

SAM2DynamicInteractivePredictor est une extension avancée de SAM2, sans entraînement, qui permet une interaction dynamique avec plusieurs images et des capacités d'apprentissage continu. Ce prédicteur prend en charge les mises à jour des invites 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 pour tirer le meilleur parti des 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 : Ajoutez de nouvelles invites pour fusionner/suivre de nouvelles instances dans les images suivantes à tout moment pendant le traitement vidéo
  2. Apprentissage continu : Ajoutez de nouvelles invites pour les instances existantes afin d'améliorer les performances du modèle au fil du temps
  3. Prise en charge multi-images indépendante : Traitez plusieurs images indépendantes (pas nécessairement issues d'une séquence vidéo) avec partage de mémoire et suivi d'objets inter-images

Capacités principales

  • Flexibilité des invites : Accepte les boîtes englobantes, les points et les masques comme invites
  • Gestion de la banque de mémoire : Maintient une banque de mémoire dynamique pour stocker les états des objets à travers les images
  • Suivi multi-objets : Prend en charge le suivi de plusieurs objets simultanément avec des ID d'objet 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 d'images indépendant : Traitez des images autonomes avec un contexte de mémoire partagée pour la cohérence des objets inter-images

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(source="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(source="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 prend en charge l'ajout/l'affinage de catégories par tous les invites de type boîte/point/masque nativement prises en charge par SAM2. Il est particulièrement utile dans les scénarios où les objets apparaissent ou changent au fil du temps, comme dans l'annotation vidéo ou les tâches d'édition interactive.

Arguments

Nom Valeur par défaut Type de données Description
max_obj_num 3 str Le nombre maximal de catégories prédéfini
update_memory False bool Faut-il mettre à jour la mémoire avec de nouvelles invites ?
obj_ids None List[int] Liste des ID d'objet correspondant aux invites

Cas d'utilisation

SAM2DynamicInteractivePredictor est idéal pour :

  • Flux de travail d'annotation vidéo où de nouveaux objets apparaissent pendant la séquence
  • Montage vidéo interactif nécessitant l'ajout et l'affinage d'objets en temps réel
  • Applications de surveillance avec des besoins de suivi d'objets dynamiques
  • Imagerie médicale pour le suivi des structures anatomiques à travers les séries temporelles
  • Systèmes autonomes nécessitant une détection et un suivi d'objets adaptatifs
  • Ensembles de données multi-images pour une segmentation d'objets cohérente à travers des images indépendantes
  • Analyse de collection d'images où les objets doivent être suivis à travers différentes scènes
  • Segmentation inter-domaines tirant parti de la mémoire de divers contextes d'image
  • Annotation semi-automatique pour une création efficace d'ensembles 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 5 jours

Commentaires