IA na 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 Dollár, Christoph Feichtenhofer
[ Paper
] [ Project
] [ Demo
] [ Dataset
] [ Blog
] [ BibTeX
]
Segment Anything Model 2 (SAM 2) é um modelo básico para resolver a segmentação visual imediata em imagens e vídeos. Estendemos o SAM ao vídeo considerando as imagens como um vídeo com um único quadro. O design do modelo é uma arquitetura simples de transformador com memória de streaming para processamento de vídeo em tempo real. Construímos um mecanismo de dados model-in-the-loop, que melhora o modelo e os dados por meio da interação do usuário, para coletar nosso conjunto de dados SA-V , o maior conjunto de dados de segmentação de vídeo até o momento. O SAM 2 treinado com nossos dados oferece forte desempenho em uma ampla variedade de tarefas e domínios visuais.
30/09/2024 – Lançado o SAM 2.1 Developer Suite (novos pontos de verificação, código de treinamento, demonstração na web)
pip uninstall SAM-2
, extraia o código mais recente deste repositório (com git pull
) e, em seguida, reinstale o repositório seguindo a instalação abaixo.training/README.md
para saber como começar.demo/README.md
para obter detalhes. O SAM 2 precisa ser instalado antes do uso. O código requer python>=3.10
, bem como torch>=2.3.1
e torchvision>=0.18.1
. Siga as instruções aqui para instalar as dependências PyTorch e TorchVision. Você pode instalar o SAM 2 em uma máquina GPU usando:
git clone https://github.com/facebookresearch/sam2.git && cd sam2
pip install -e .
Se você estiver instalando no Windows, é altamente recomendável usar o Windows Subsystem for Linux (WSL) com Ubuntu.
Para usar o preditor SAM 2 e executar os notebooks de exemplo, jupyter
e matplotlib
são necessários e podem ser instalados por:
pip install -e " .[notebooks] "
Observação:
pip
seguindo https://pytorch.org/. Se você tiver uma versão do PyTorch inferior a 2.3.1 em seu ambiente atual, o comando de instalação acima tentará atualizá-lo para a versão mais recente do PyTorch usando pip
.nvcc
. Se ainda não estiver disponível em sua máquina, instale os kits de ferramentas CUDA com uma versão que corresponda à sua versão PyTorch CUDA.Failed to build the SAM 2 CUDA extension
durante a instalação, você pode ignorá-la e ainda usar o SAM 2 (algumas funcionalidades de pós-processamento podem ser limitadas, mas não afetam os resultados na maioria dos casos). Consulte INSTALL.md
para perguntas frequentes sobre possíveis problemas e soluções.
Primeiro, precisamos baixar um ponto de verificação do modelo. Todos os pontos de verificação do modelo podem ser baixados executando:
cd checkpoints &&
./download_ckpts.sh &&
cd ..
ou individualmente de:
(observe que estes são os pontos de verificação aprimorados indicados como SAM 2.1; consulte a descrição do modelo para obter detalhes.)
Então o SAM 2 pode ser usado em algumas linhas como segue para previsão de imagem e vídeo.
O SAM 2 tem todos os recursos do SAM em imagens estáticas e fornecemos APIs de previsão de imagens que se assemelham muito ao SAM para casos de uso de imagens. A classe SAM2ImagePredictor
possui uma interface fácil para solicitação de imagens.
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 os exemplos em image_predictor_example.ipynb (também no Colab aqui) para casos de uso de imagens estáticas.
O SAM 2 também oferece suporte à geração automática de máscaras em imagens, assim como o SAM. Consulte automatic_mask_generator_example.ipynb (também no Colab aqui) para geração automática de máscaras em imagens.
Para segmentação e rastreamento imediatos em vídeos, fornecemos um preditor de vídeo com APIs, por exemplo, para adicionar prompts e propagar masklets ao longo de um vídeo. O SAM 2 suporta inferência de vídeo em vários objetos e usa um estado de inferência para acompanhar as interações em cada vídeo.
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 os exemplos em video_predictor_example.ipynb (também no Colab aqui) para obter detalhes sobre como adicionar prompts de clique ou caixa, fazer refinamentos e rastrear vários objetos em vídeos.
Alternativamente, os modelos também podem ser carregados do Hugging Face (requer pip install huggingface_hub
).
Para previsão de imagem:
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 previsão 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 ):
...
A tabela abaixo mostra os pontos de verificação aprimorados do SAM 2.1 lançados em 29 de setembro de 2024.
Modelo | Tamanho (M) | Velocidade (FPS) | Teste SA-V (J&F) | MOSE val (J&F) | LVOS v2 (J&F) |
---|---|---|---|---|---|
sam2.1_hiera_tiny (configuração, ponto de verificação) | 38,9 | 47,2 | 76,5 | 71,8 | 77,3 |
sam2.1_hiera_small (configuração, ponto de verificação) | 46 | 43,3 (53,0 compilado*) | 76,6 | 73,5 | 78,3 |
sam2.1_hiera_base_plus (configuração, ponto de verificação) | 80,8 | 34,8 (43,8 compilado*) | 78,2 | 73,7 | 78,2 |
sam2.1_hiera_large (configuração, ponto de verificação) | 224,4 | 24,2 (30,2 compilado*) | 79,5 | 74,6 | 80,6 |
Os pontos de verificação anteriores do SAM 2 lançados em 29 de julho de 2024 podem ser encontrados da seguinte forma:
Modelo | Tamanho (M) | Velocidade (FPS) | Teste SA-V (J&F) | MOSE val (J&F) | LVOS v2 (J&F) |
---|---|---|---|---|---|
sam2_hiera_tiny (configuração, ponto de verificação) | 38,9 | 47,2 | 75,0 | 70,9 | 75,3 |
sam2_hiera_small (configuração, ponto de verificação) | 46 | 43,3 (53,0 compilado*) | 74,9 | 71,5 | 76,4 |
sam2_hiera_base_plus (configuração, ponto de verificação) | 80,8 | 34,8 (43,8 compilado*) | 74,7 | 72,8 | 75,8 |
sam2_hiera_large (configuração, ponto de verificação) | 224,4 | 24,2 (30,2 compilado*) | 76,0 | 74,6 | 79,8 |
* Compile o modelo definindo compile_image_encoder: True
na configuração.
Consulte sav_dataset/README.md para obter detalhes.
Você pode treinar ou ajustar o SAM 2 em conjuntos de dados personalizados de imagens, vídeos ou ambos. Por favor, verifique o README do treinamento sobre como começar.
Lançamos o código frontend + backend para a demonstração da web do SAM 2 (uma versão implantável localmente semelhante a https://sam2.metademolab.com/demo). Consulte o README da demonstração da web para obter detalhes.
Os pontos de verificação do modelo SAM 2, o código de demonstração do SAM 2 (front-end e back-end) e o código de treinamento do SAM 2 são licenciados sob Apache 2.0, no entanto, o Inter Font e o Noto Color Emoji usados no código de demonstração do SAM 2 são disponibilizados em a licença SIL Open Font, versão 1.1.
Veja contribuições e o código de conduta.
O projeto SAM 2 foi possível com a ajuda de vários colaboradores (em ordem alfabética):
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 terceiros: usamos um algoritmo de componente conectado baseado em GPU adaptado de cc_torch
(com sua licença em LICENSE_cctorch
) como uma etapa opcional de pós-processamento para as previsões de máscara.
Se você usar o conjunto de dados SAM 2 ou SA-V em sua pesquisa, use a seguinte 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 }
}