IA en Meta, JUSTO
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 Dollár, Christoph Feichtenhofer
[ Paper
] [ Project
] [ Demo
] [ Dataset
] [ Blog
] [ BibTeX
]
Segment Anything Model 2 (SAM 2) es un modelo básico para resolver la segmentación visual rápida en imágenes y videos. Extendemos SAM al video considerando las imágenes como un video con un solo cuadro. El diseño del modelo es una arquitectura de transformador simple con memoria de transmisión para procesamiento de video en tiempo real. Creamos un motor de datos de modelo en bucle, que mejora el modelo y los datos a través de la interacción del usuario, para recopilar nuestro conjunto de datos SA-V , el conjunto de datos de segmentación de video más grande hasta la fecha. SAM 2 entrenado con nuestros datos proporciona un rendimiento sólido en una amplia gama de tareas y dominios visuales.
30/09/2024: se lanza SAM 2.1 Developer Suite (nuevos puntos de control, código de capacitación, demostración web)
pip uninstall SAM-2
, extraiga el código más reciente de este repositorio (con git pull
) y luego reinstale el repositorio siguiendo la instalación a continuación.training/README.md
para saber cómo empezar.demo/README.md
para obtener más detalles. SAM 2 debe instalarse primero antes de su uso. El código requiere python>=3.10
, así como torch>=2.3.1
y torchvision>=0.18.1
. Siga las instrucciones aquí para instalar las dependencias de PyTorch y TorchVision. Puede instalar SAM 2 en una máquina con GPU usando:
git clone https://github.com/facebookresearch/sam2.git && cd sam2
pip install -e .
Si está instalando en Windows, se recomienda encarecidamente utilizar el Subsistema de Windows para Linux (WSL) con Ubuntu.
Para utilizar el predictor SAM 2 y ejecutar los cuadernos de ejemplo, se requieren jupyter
y matplotlib
, que se pueden instalar mediante:
pip install -e " .[notebooks] "
Nota:
pip
siguiendo https://pytorch.org/. Si tiene una versión de PyTorch inferior a 2.3.1 en su entorno actual, el comando de instalación anterior intentará actualizarla a la última versión de PyTorch usando pip
.nvcc
. Si aún no está disponible en su máquina, instale los kits de herramientas CUDA con una versión que coincida con su versión PyTorch CUDA.Failed to build the SAM 2 CUDA extension
durante la instalación, puede ignorarlo y seguir usando SAM 2 (algunas funciones de posprocesamiento pueden ser limitadas, pero no afectan los resultados en la mayoría de los casos). Consulte INSTALL.md
para obtener preguntas frecuentes sobre posibles problemas y soluciones.
Primero, necesitamos descargar un punto de control modelo. Todos los puntos de control del modelo se pueden descargar ejecutando:
cd checkpoints &&
./download_ckpts.sh &&
cd ..
o individualmente desde:
(tenga en cuenta que estos son los puntos de control mejorados denominados SAM 2.1; consulte la Descripción del modelo para obtener más detalles).
Luego, SAM 2 se puede utilizar en unas pocas líneas de la siguiente manera para la predicción de imágenes y videos.
SAM 2 tiene todas las capacidades de SAM en imágenes estáticas y proporcionamos API de predicción de imágenes que se parecen mucho a SAM para casos de uso de imágenes. La clase SAM2ImagePredictor
tiene una interfaz sencilla para solicitar imágenes.
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 > )
Consulte los ejemplos en image_predictor_example.ipynb (también en Colab aquí) para conocer casos de uso de imágenes estáticas.
SAM 2 también admite la generación automática de máscaras en imágenes como SAM. Consulte automatic_mask_generator_example.ipynb (también en Colab aquí) para la generación automática de máscaras en imágenes.
Para una segmentación y seguimiento rápidos en videos, proporcionamos un predictor de video con API, por ejemplo, para agregar indicaciones y propagar máscaras a lo largo de un video. SAM 2 admite la inferencia de video en múltiples objetos y utiliza un estado de inferencia para realizar un seguimiento de las interacciones en cada video.
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 ):
...
Consulte los ejemplos en video_predictor_example.ipynb (también en Colab aquí) para obtener detalles sobre cómo agregar mensajes de clic o cuadros, realizar mejoras y rastrear múltiples objetos en videos.
Alternativamente, los modelos también se pueden cargar desde Hugging Face (requiere pip install huggingface_hub
).
Para predicción de imágenes:
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 > )
Para predicción de vídeo:
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 ):
...
La siguiente tabla muestra los puntos de control mejorados de SAM 2.1 lanzados el 29 de septiembre de 2024.
Modelo | Talla (M) | Velocidad (FPS) | Prueba SA-V (J&F) | MOSE val (J&F) | LVOS v2 (J&F) |
---|---|---|---|---|---|
sam2.1_hiera_tiny (configuración, punto de control) | 38,9 | 47.2 | 76,5 | 71,8 | 77,3 |
sam2.1_hiera_small (configuración, punto de control) | 46 | 43,3 (53,0 compilados*) | 76,6 | 73,5 | 78,3 |
sam2.1_hiera_base_plus (configuración, punto de control) | 80,8 | 34,8 (43,8 compilados*) | 78.2 | 73,7 | 78.2 |
sam2.1_hiera_large (configuración, punto de control) | 224,4 | 24,2 (30,2 compilados*) | 79,5 | 74,6 | 80,6 |
Los puntos de control anteriores de SAM 2 publicados el 29 de julio de 2024 se pueden encontrar de la siguiente manera:
Modelo | Talla (M) | Velocidad (FPS) | Prueba SA-V (J&F) | MOSE val (J&F) | LVOS v2 (J&F) |
---|---|---|---|---|---|
sam2_hiera_tiny (configuración, punto de control) | 38,9 | 47.2 | 75.0 | 70,9 | 75,3 |
sam2_hiera_small (configuración, punto de control) | 46 | 43,3 (53,0 compilados*) | 74,9 | 71,5 | 76,4 |
sam2_hiera_base_plus (configuración, punto de control) | 80,8 | 34,8 (43,8 compilados*) | 74,7 | 72,8 | 75,8 |
sam2_hiera_large (configuración, punto de control) | 224,4 | 24,2 (30,2 compilados*) | 76.0 | 74,6 | 79,8 |
* Compile el modelo configurando compile_image_encoder: True
en la configuración.
Consulte sav_dataset/README.md para obtener más detalles.
Puede entrenar o ajustar SAM 2 en conjuntos de datos personalizados de imágenes, vídeos o ambos. Consulte el archivo README de capacitación sobre cómo comenzar.
Hemos publicado el código frontend + backend para la demostración web de SAM 2 (una versión implementable localmente similar a https://sam2.metademolab.com/demo). Consulte el archivo README de demostración web para obtener más detalles.
Los puntos de control del modelo SAM 2, el código de demostración de SAM 2 (front-end y back-end) y el código de entrenamiento de SAM 2 tienen licencia bajo Apache 2.0; sin embargo, Inter Font y Noto Color Emoji utilizados en el código de demostración de SAM 2 están disponibles en la licencia SIL Open Font, versión 1.1.
Ver contribución y código de conducta.
El proyecto SAM 2 fue posible gracias a la ayuda de muchos contribuyentes (en orden alfabético):
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.
Código de terceros: utilizamos un algoritmo de componentes conectados basado en GPU adaptado de cc_torch
(con su licencia en LICENSE_cctorch
) como paso de posprocesamiento opcional para las predicciones de máscara.
Si utiliza SAM 2 o el conjunto de datos SA-V en su investigación, utilice la siguiente entrada BibTeX.
@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 }
}