L'IA chez Meta, FAIR
Nikhila Ravi, Valentin Gabeur, Yuan-Ting Hu, Ronghang Hu, Chaitanya Ryali, Tengyu Ma, Haitham Khedr, Roman Rädle, Chloe Rolland, Laura Gustafson, Eric Mintun, Junting Pan, Kalyan Vasudev Alwala, Nicolas Carion, Chao-Yuan Wu, Ross Girshick, Piotr Dollar, Christoph Feichtenhofer
[ Paper
] [ Project
] [ Demo
] [ Dataset
] [ Blog
] [ BibTeX
]
Segment Anything Model 2 (SAM 2) est un modèle de base permettant de résoudre la segmentation visuelle rapide des images et des vidéos. Nous étendons SAM à la vidéo en considérant les images comme une vidéo avec une seule image. La conception du modèle est une architecture de transformateur simple avec une mémoire de streaming pour le traitement vidéo en temps réel. Nous construisons un moteur de données de modèle dans la boucle, qui améliore le modèle et les données via l'interaction de l'utilisateur, pour collecter notre ensemble de données SA-V , le plus grand ensemble de données de segmentation vidéo à ce jour. SAM 2 formé sur nos données offre de solides performances dans un large éventail de tâches et de domaines visuels.
30/09/2024 – SAM 2.1 Developer Suite (nouveaux points de contrôle, code de formation, démo Web) est publié
pip uninstall SAM-2
, extrayez le dernier code de ce dépôt (avec git pull
), puis réinstallez le dépôt après l'installation ci-dessous.training/README.md
pour savoir comment commencer.demo/README.md
pour plus de détails. SAM 2 doit être installé avant utilisation. Le code nécessite python>=3.10
, ainsi que torch>=2.3.1
et torchvision>=0.18.1
. Veuillez suivre les instructions ici pour installer les dépendances PyTorch et TorchVision. Vous pouvez installer SAM 2 sur une machine GPU en utilisant :
git clone https://github.com/facebookresearch/sam2.git && cd sam2
pip install -e .
Si vous effectuez l'installation sous Windows, il est fortement recommandé d'utiliser le sous-système Windows pour Linux (WSL) avec Ubuntu.
Pour utiliser le prédicteur SAM 2 et exécuter les exemples de notebooks, jupyter
et matplotlib
sont requis et peuvent être installés par :
pip install -e " .[notebooks] "
Note:
pip
en suivant https://pytorch.org/. Si vous disposez d'une version de PyTorch inférieure à 2.3.1 dans votre environnement actuel, la commande d'installation ci-dessus tentera de la mettre à niveau vers la dernière version de PyTorch à l'aide pip
.nvcc
. S'il n'est pas déjà disponible sur votre ordinateur, veuillez installer les kits d'outils CUDA avec une version qui correspond à votre version PyTorch CUDA.Failed to build the SAM 2 CUDA extension
lors de l'installation, vous pouvez l'ignorer et continuer à utiliser SAM 2 (certaines fonctionnalités de post-traitement peuvent être limitées, mais cela n'affecte pas les résultats dans la plupart des cas). Veuillez consulter INSTALL.md
pour consulter la FAQ sur les problèmes potentiels et les solutions.
Tout d’abord, nous devons télécharger un modèle de point de contrôle. Tous les points de contrôle du modèle peuvent être téléchargés en exécutant :
cd checkpoints &&
./download_ckpts.sh &&
cd ..
ou individuellement auprès de :
(notez qu'il s'agit des points de contrôle améliorés désignés par SAM 2.1 ; voir la description du modèle pour plus de détails.)
Ensuite, SAM 2 peut être utilisé en quelques lignes comme suit pour la prédiction d’images et de vidéos.
SAM 2 possède toutes les fonctionnalités de SAM sur les images statiques et nous fournissons des API de prédiction d'images qui ressemblent beaucoup à SAM pour les cas d'utilisation d'images. La classe SAM2ImagePredictor
possède une interface simple pour l'invite d'image.
import torch
from sam2 . build_sam import build_sam2
from sam2 . sam2_image_predictor import SAM2ImagePredictor
checkpoint = "./checkpoints/sam2.1_hiera_large.pt"
model_cfg = "configs/sam2.1/sam2.1_hiera_l.yaml"
predictor = SAM2ImagePredictor ( build_sam2 ( model_cfg , checkpoint ))
with torch . inference_mode (), torch . autocast ( "cuda" , dtype = torch . bfloat16 ):
predictor . set_image ( < your_image > )
masks , _ , _ = predictor . predict ( < input_prompts > )
Veuillez vous référer aux exemples dans image_predictor_example.ipynb (également dans Colab ici) pour les cas d'utilisation d'images statiques.
SAM 2 prend également en charge la génération automatique de masques sur les images, tout comme SAM. Veuillez consulter automatic_mask_generator_example.ipynb (également dans Colab ici) pour la génération automatique de masques dans les images.
Pour une segmentation et un suivi rapides dans les vidéos, nous fournissons un prédicteur vidéo avec des API, par exemple pour ajouter des invites et propager des masques tout au long d'une vidéo. SAM 2 prend en charge l'inférence vidéo sur plusieurs objets et utilise un état d'inférence pour suivre les interactions dans chaque vidéo.
import torch
from sam2 . build_sam import build_sam2_video_predictor
checkpoint = "./checkpoints/sam2.1_hiera_large.pt"
model_cfg = "configs/sam2.1/sam2.1_hiera_l.yaml"
predictor = build_sam2_video_predictor ( model_cfg , checkpoint )
with torch . inference_mode (), torch . autocast ( "cuda" , dtype = torch . bfloat16 ):
state = predictor . init_state ( < your_video > )
# add new prompts and instantly get the output on the same frame
frame_idx , object_ids , masks = predictor . add_new_points_or_box ( state , < your_prompts > ):
# propagate the prompts to get masklets throughout the video
for frame_idx , object_ids , masks in predictor . propagate_in_video ( state ):
...
Veuillez vous référer aux exemples dans video_predictor_example.ipynb (également dans Colab ici) pour plus de détails sur la façon d'ajouter des invites de clic ou de boîte, d'apporter des améliorations et de suivre plusieurs objets dans les vidéos.
Alternativement, les modèles peuvent également être chargés à partir de Hugging Face (nécessite pip install huggingface_hub
).
Pour la prédiction d'image :
import torch
from sam2 . sam2_image_predictor import SAM2ImagePredictor
predictor = SAM2ImagePredictor . from_pretrained ( "facebook/sam2-hiera-large" )
with torch . inference_mode (), torch . autocast ( "cuda" , dtype = torch . bfloat16 ):
predictor . set_image ( < your_image > )
masks , _ , _ = predictor . predict ( < input_prompts > )
Pour la prédiction vidéo :
import torch
from sam2 . sam2_video_predictor import SAM2VideoPredictor
predictor = SAM2VideoPredictor . from_pretrained ( "facebook/sam2-hiera-large" )
with torch . inference_mode (), torch . autocast ( "cuda" , dtype = torch . bfloat16 ):
state = predictor . init_state ( < your_video > )
# add new prompts and instantly get the output on the same frame
frame_idx , object_ids , masks = predictor . add_new_points_or_box ( state , < your_prompts > ):
# propagate the prompts to get masklets throughout the video
for frame_idx , object_ids , masks in predictor . propagate_in_video ( state ):
...
Le tableau ci-dessous présente les points de contrôle SAM 2.1 améliorés publiés le 29 septembre 2024.
Modèle | Taille (M) | Vitesse (FPS) | Test SA-V (J&F) | MOSE val (J&F) | LVOS v2 (J&F) |
---|---|---|---|---|---|
sam2.1_hiera_tiny (configuration, point de contrôle) | 38,9 | 47.2 | 76,5 | 71,8 | 77.3 |
sam2.1_hiera_small (configuration, point de contrôle) | 46 | 43,3 (53,0 compilé*) | 76,6 | 73,5 | 78.3 |
sam2.1_hiera_base_plus (configuration, point de contrôle) | 80,8 | 34,8 (43,8 compilé*) | 78.2 | 73,7 | 78.2 |
sam2.1_hiera_large (configuration, point de contrôle) | 224,4 | 24,2 (30,2 compilé*) | 79,5 | 74,6 | 80,6 |
Les précédents points de contrôle SAM 2 publiés le 29 juillet 2024 se trouvent comme suit :
Modèle | Taille (M) | Vitesse (FPS) | Test SA-V (J&F) | MOSE val (J&F) | LVOS v2 (J&F) |
---|---|---|---|---|---|
sam2_hiera_tiny (configuration, point de contrôle) | 38,9 | 47.2 | 75,0 | 70,9 | 75.3 |
sam2_hiera_small (configuration, point de contrôle) | 46 | 43,3 (53,0 compilé*) | 74,9 | 71,5 | 76,4 |
sam2_hiera_base_plus (configuration, point de contrôle) | 80,8 | 34,8 (43,8 compilé*) | 74,7 | 72,8 | 75,8 |
sam2_hiera_large (configuration, point de contrôle) | 224,4 | 24,2 (30,2 compilé*) | 76,0 | 74,6 | 79,8 |
* Compilez le modèle en définissant compile_image_encoder: True
dans le fichier config.
Voir sav_dataset/README.md pour plus de détails.
Vous pouvez entraîner ou affiner SAM 2 sur des ensembles de données personnalisés d'images, de vidéos ou les deux. Veuillez consulter le fichier README de la formation pour savoir comment commencer.
Nous avons publié le code frontend + backend pour la démo Web SAM 2 (une version déployable localement similaire à https://sam2.metademolab.com/demo). Veuillez consulter la démo Web README pour plus de détails.
Les points de contrôle du modèle SAM 2, le code de démonstration SAM 2 (front-end et back-end) et le code de formation SAM 2 sont sous licence Apache 2.0, mais les Inter Font et Noto Color Emoji utilisés dans le code de démonstration SAM 2 sont disponibles sous la licence SIL Open Font, version 1.1.
Voir contribution et code de conduite.
Le projet SAM 2 a été rendu possible grâce à l'aide de nombreux contributeurs (par ordre alphabétique) :
Karen Bergan, Daniel Bolya, Alex Bosenberg, Kai Brown, Vispi Cassod, Christopher Chedeau, Ida Cheng, Luc Dahlin, Shoubhik Debnath, Rene Martinez Doehner, Grant Gardner, Sahir Gomez, Rishi Godugu, Baishan Guo, Caleb Ho, Andrew Huang, Somya Jain, Bob Kamma, Amanda Kallet, Jake Kinney, Alexander Kirillov, Shiva Koduvayur, Devansh Kukreja, Robert Kuo, Aohan Lin, Parth Malani, Jitendra Malik, Mallika Malhotra, Miguel Martin, Alexander Miller, Sasha Mitts, William Ngan, George Orlin, Joelle Pineau, Kate Saenko, Rodrick Shepard, Azita Shokrpour, David Soofian, Jonathan Torres, Jenny Truong, Sagar Vaze, Meng Wang, Claudette Ward, Pengchuan Zhang.
Code tiers : nous utilisons un algorithme de composants connectés basé sur GPU adapté de cc_torch
(avec sa licence dans LICENSE_cctorch
) comme étape facultative de post-traitement pour les prédictions de masque.
Si vous utilisez SAM 2 ou l'ensemble de données SA-V dans votre recherche, veuillez utiliser l'entrée BibTeX 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 arXiv:2408.00714 } ,
url = { https://arxiv.org/abs/2408.00714 } ,
year = { 2024 }
}