SAM 2: Segment Anything Model 2

Evolução do SAM

O SAM 2 expande o SAM original com capacidades de segmentação de vídeo. Para segmentação de conceitos prontos com prompts de texto e imagem exemplar, vê o SAM 3.

Inference with Segment Anything 2 In Colab

O SAM 2, o sucessor do Segment Anything Model (SAM) da Meta, é uma ferramenta de ponta projetada para segmentação abrangente de objetos tanto em imagens quanto em vídeos. Ele se destaca no manuseio de dados visuais complexos por meio de uma arquitetura de modelo unificada e responsiva a prompts que suporta processamento em tempo real e generalização zero-shot.

SAM 2 na Ultralytics Platform

Os modelos SAM 2.1 impulsionam a funcionalidade de anotação inteligente na Ultralytics Platform, permitindo segmentação baseada em cliques para uma rotulagem rápida de conjuntos de dados. Vê o guia de anotação para detalhes.

SAM 2 Example Results

Principais recursos



Watch: How to Run Inference with Meta's SAM2 using Ultralytics | Step-by-Step Guide 🎉

Arquitetura de Modelo Unificada

O SAM 2 combina as capacidades de segmentação de imagem e vídeo em um único modelo. Esta unificação simplifica a implementação e permite um desempenho consistente em diferentes tipos de mídia. Ele aproveita uma interface flexível baseada em prompts, permitindo que tu especifiques objetos de interesse através de vários tipos de prompts, como pontos, caixas delimitadoras ou máscaras.

Desempenho em Tempo Real

O modelo alcança velocidades de inferência em tempo real, processando aproximadamente 44 quadros por segundo. Isso torna o SAM 2 adequado para aplicações que requerem feedback imediato, como edição de vídeo e realidade aumentada.

Generalização Zero-Shot

O SAM 2 pode segmentar objetos que nunca encontrou antes, demonstrando uma forte generalização zero-shot. Isso é particularmente útil em domínios visuais diversos ou em evolução, onde categorias pré-definidas podem não cobrir todos os objetos possíveis.

Refinamento Interativo

Tu podes refinar iterativamente os resultados da segmentação fornecendo prompts adicionais, permitindo um controle preciso sobre a saída. Esta interatividade é essencial para ajustar resultados em aplicações como anotação de vídeo ou imagens médicas.

Manipulação Avançada de Desafios Visuais

O SAM 2 inclui mecanismos para gerir desafios comuns de segmentação de vídeo, como oclusão e reaparecimento de objetos. Ele usa um mecanismo de memória sofisticado para rastrear objetos entre quadros, garantindo continuidade mesmo quando os objetos estão temporariamente obscurecidos ou saem e reentram na cena.

Para uma compreensão mais profunda da arquitetura e capacidades do SAM 2, explora o artigo de pesquisa do SAM 2.

Desempenho e Detalhes Técnicos

O SAM 2 define um novo padrão na área, superando modelos anteriores em várias métricas:

MétricaSAM 2SOTA Anterior
Segmentação Interativa de VídeoMelhor-
Interações Humanas Necessárias3x menosLinha de base
Precisão de Segmentação de ImagemMelhoradoSAM
Velocidade de Inferência6x mais rápidoSAM

Arquitetura do Modelo

Componentes Principais

  • Codificador de Imagem e Vídeo: Utiliza uma arquitetura baseada em transformer para extrair recursos de alto nível tanto de imagens quanto de quadros de vídeo. Este componente é responsável por compreender o conteúdo visual a cada intervalo de tempo.
  • Codificador de Prompt: Processa prompts fornecidos pelo utilizador (pontos, caixas, máscaras) para guiar a tarefa de segmentação. Isso permite que o SAM 2 se adapte à entrada do utilizador e direcione objetos específicos dentro de uma cena.
  • Mecanismo de Memória: Inclui um codificador de memória, banco de memória e módulo de atenção de memória. Estes componentes armazenam e utilizam coletivamente informações de quadros passados, permitindo que o modelo mantenha um rastreamento de objetos consistente ao longo do tempo.
  • Descodificador de Máscara: Gera as máscaras de segmentação finais com base nos recursos de imagem codificados e prompts. Em vídeo, ele também usa contexto de memória para garantir um rastreamento preciso entre quadros.

SAM 2 Architecture Diagram

Mecanismo de Memória e Manipulação de Oclusão

O mecanismo de memória permite que o SAM 2 lide com dependências temporais e oclusões em dados de vídeo. À medida que os objetos se movem e interagem, o SAM 2 registra as suas características num banco de memória. Quando um objeto é ocluído, o modelo pode confiar nesta memória para prever a sua posição e aparência quando ele reaparece. O cabeçalho de oclusão lida especificamente com cenários onde os objetos não estão visíveis, prevendo a probabilidade de um objeto estar ocluído.

Resolução de Ambiguidade de Múltiplas Máscaras

Em situações com ambiguidade (por exemplo, objetos sobrepostos), o SAM 2 pode gerar múltiplas previsões de máscara. Esta funcionalidade é crucial para representar com precisão cenas complexas onde uma única máscara pode não descrever suficientemente as nuances da cena.

Conjunto de Dados SA-V

O conjunto de dados SA-V, desenvolvido para o treinamento do SAM 2, é um dos maiores e mais diversos conjuntos de dados de segmentação de vídeo disponíveis. Ele inclui:

  • 51.000+ Vídeos: Capturados em 47 países, fornecendo uma ampla gama de cenários do mundo real.
  • 600.000+ Anotações de Máscara: Anotações de máscara espaciotemporais detalhadas, referidas como "masklets", cobrindo objetos inteiros e partes.
  • Escala do Conjunto de Dados: Apresenta 4,5 vezes mais vídeos e 53 vezes mais anotações do que os maiores conjuntos de dados anteriores, oferecendo uma diversidade e complexidade sem precedentes.

Benchmarks

Segmentação de Objetos em Vídeo

O SAM 2 demonstrou desempenho superior em grandes benchmarks de segmentação de vídeo:

Conjunto de DadosJ&FJF
DAVIS 201782.579.885.2
YouTube-VOS81.278.983.5

Segmentação Interativa

Em tarefas de segmentação interativa, o SAM 2 mostra eficiência e precisão significativas:

Conjunto de DadosNoC@90AUC
DAVIS Interactive1.540.872

Instalação

Para instalar o SAM 2, usa o seguinte comando. Todos os modelos SAM 2 serão baixados automaticamente na primeira utilização.

pip install ultralytics

Como usar o SAM 2: Versatilidade na Segmentação de Imagem e Vídeo

A tabela a seguir detalha os modelos SAM 2 disponíveis, os seus pesos pré-treinados, tarefas suportadas e compatibilidade com diferentes modos de operação, como Inferência, Validação, Treinamento e Exportação.

Tipo de ModeloPesos Pré-treinadosTarefas SuportadasInferência (Inference)ValidaçãoTreinamentoExport
SAM 2 tinysam2_t.ptSegmentação de instância
SAM 2 smallsam2_s.ptSegmentação de instância
SAM 2 basesam2_b.ptSegmentação de instância
SAM 2 largesam2_l.ptSegmentação de instância
SAM 2.1 tinysam2.1_t.ptSegmentação de instância
SAM 2.1 smallsam2.1_s.ptSegmentação de instância
SAM 2.1 basesam2.1_b.ptSegmentação de instância
SAM 2.1 largesam2.1_l.ptSegmentação de instância

Exemplos de Predição com SAM 2

O SAM 2 pode ser utilizado numa vasta gama de tarefas, incluindo edição de vídeo em tempo real, imagens médicas e sistemas autónomos. A sua capacidade de segmentar dados visuais estáticos e dinâmicos torna-o uma ferramenta versátil para investigadores e programadores.

Segmentar com Prompts

Segmentar com Prompts

Usa prompts para segmentar objetos específicos em imagens ou vídeos.

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

Segmentar Tudo

Segmentar Tudo

Segmenta todo o conteúdo da imagem ou vídeo sem prompts específicos.

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")

Segmentar Vídeo e Rastrear objetos

Segmentar Vídeo

Segmenta todo o conteúdo do vídeo com prompts específicos e rastreia objetos.

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]])
  • Este exemplo demonstra como o SAM 2 pode ser usado para segmentar todo o conteúdo de uma imagem ou vídeo se nenhum prompt (bboxes/pontos/máscaras) for fornecido.

Segmentação Dinâmica Interativa e Rastreamento

O SAM2DynamicInteractivePredictor é uma extensão avançada do SAM2 que não requer treinamento, permitindo a interação dinâmica com múltiplos quadros e capacidades de aprendizado contínuo. Este preditor oferece suporte a atualizações de prompt em tempo real e gerenciamento de memória para um melhor desempenho de rastreamento em uma sequência de imagens. Comparado ao SAM2 original, o SAM2DynamicInteractivePredictor reconstrói o fluxo de inferência para aproveitar ao máximo os modelos SAM2 pré-treinados, sem a necessidade de treinamento adicional.

Resultados do exemplo do SAM 2

Principais recursos

Ele oferece três melhorias significativas:

  1. Interativo Dinâmico: Adicione novos prompts para mesclar/rastrear novas instâncias em quadros subsequentes a qualquer momento durante o processamento de vídeo.
  2. Aprendizado Contínuo: Adicione novos prompts para instâncias existentes para melhorar o desempenho do modelo ao longo do tempo.
  3. Suporte Independente a Múltiplas Imagens: Processe várias imagens independentes (não necessariamente de uma sequência de vídeo) com compartilhamento de memória e rastreamento de objetos entre imagens.

Principais Capacidades

  • Flexibilidade de Prompt: Aceita bounding boxes, pontos e máscaras como prompts.
  • Gerenciamento de Banco de Memória: Mantém um banco de memória dinâmico para armazenar estados de objetos em todos os quadros.
  • Rastreamento de Múltiplos Objetos: Suporta o rastreamento de vários objetos simultaneamente com IDs de objetos individuais.
  • Atualizações em Tempo Real: Permite adicionar novos prompts durante a inferência sem reprocessar quadros anteriores.
  • Processamento Independente de Imagem: Processe imagens isoladas com contexto de memória compartilhado para consistência de objetos entre imagens.
Adição Dinâmica de Objetos
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=[0], 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=[1],  # 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=[1],  # Same object ID
    update_memory=True,  # Update memory with new information
)
# Perform inference on new image
results = predictor(source="image7.jpg")
Nota

O SAM2DynamicInteractivePredictor foi projetado para funcionar com modelos SAM2 e suporta a adição/refinamento de categorias nativamente através de todos os prompts de caixa/ponto/máscara que o SAM2 suporta. É particularmente útil para cenários onde objetos aparecem ou mudam ao longo do tempo, como em tarefas de anotação de vídeo ou edição interativa.

Argumentos

NomeValor PadrãoTipo de DadosDescrição
max_obj_num3intO número máximo predefinido de categorias.
update_memoryFalseboolSe deve atualizar a memória com novos prompts.
obj_idsNoneList[int]Lista de IDs de objetos correspondentes aos prompts.

Casos de Uso

O SAM2DynamicInteractivePredictor é ideal para:

  • Fluxos de trabalho de anotação de vídeo onde novos objetos aparecem durante a sequência.
  • Edição interativa de vídeo que exige adição e refinamento de objetos em tempo real.
  • Aplicações de vigilância com necessidades de rastreamento dinâmico de objetos.
  • Imagens médicas para rastrear estruturas anatômicas em séries temporais.
  • Sistemas autônomos que exigem detecção e rastreamento adaptativo de objetos.
  • Datasets de múltiplas imagens para segmentação consistente de objetos entre imagens independentes.
  • Análise de coleções de imagens onde objetos precisam ser rastreados entre diferentes cenas.
  • Segmentação entre domínios aproveitando a memória de diversos contextos de imagem.
  • Anotação semiautomática para criação eficiente de datasets com intervenção manual mínima.

Comparação SAM vs YOLO

Aqui comparamos os modelos SAM 2 da Meta, incluindo a variante menor SAM2-t, com os modelos de segmentação da Ultralytics, incluindo o YOLO26n-seg:

ModeloTamanho
(MB)
Parâmetros
(M)
Velocidade (CPU)
(ms/im)
Meta SAM-b37593.741703
Meta SAM2-b16280.828867
Meta SAM2-t78.138.923430
MobileSAM40.710.123802
FastSAM-s com YOLOv8 backbone23.911.858.0
Ultralytics YOLOv8n-seg7.1 (11.0x menor)3.4 (11.4x menos)24.8 (945x mais rápido)
Ultralytics YOLO11n-seg6.2 (12.6x menor)2.9 (13.4x menos)24.3 (964x mais rápido)
Ultralytics YOLO26n-seg6.7 (11.7x menor)2.7 (14.4x menos)25.2 (930x mais rápido)

Esta comparação demonstra as diferenças substanciais nos tamanhos e velocidades dos modelos entre as variantes SAM e os modelos de segmentação YOLO. Embora o SAM forneça capacidades únicas de segmentação automática, os modelos YOLO, particularmente o YOLOv8n-seg, o YOLO11n-seg e o YOLO26n-seg, são significativamente mais pequenos, mais rápidos e mais eficientes computacionalmente.

Velocidades SAM medidas com PyTorch, velocidades YOLO medidas com ONNX Runtime. Testes realizados num Apple M4 Air de 2025 com 16GB de RAM usando torch==2.10.0, ultralytics==8.4.31 e onnxruntime==1.24.4. Para reproduzir este teste:

Exemplo
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 (ONNX)
for file_name in ["yolov8n-seg.pt", "yolo11n-seg.pt", "yolo26n-seg.pt"]:
    model = YOLO(file_name)
    model.info()
    onnx_path = model.export(format="onnx", dynamic=True)
    model = YOLO(onnx_path)
    model(ASSETS)

Auto-Anotação: Criação Eficiente de Dataset

A auto-anotação é um recurso poderoso do SAM 2, permitindo que usuários gerem datasets de segmentação de forma rápida e precisa aproveitando modelos pré-treinados. Esta capacidade é particularmente útil para criar datasets grandes e de alta qualidade sem esforço manual extensivo.

Como fazer Auto-Anotação com o SAM 2



Watch: Auto Annotation with Meta's Segment Anything 2 Model using Ultralytics | Data Labeling

Para auto-anotar seu dataset usando o SAM 2, siga este exemplo:

Exemplo de Auto-Anotação
from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="sam2_b.pt")
ArgumentoTipoPredefiniçãoDescrição
datastrobrigatórioCaminho para o diretório que contém as imagens de destino para anotação ou segmentação.
det_modelstr'yolo26x.pt'Caminho do modelo de deteção YOLO para a deteção inicial de objetos.
sam_modelstr'sam_b.pt'Caminho do modelo SAM para segmentação (suporta variantes SAM, SAM2 e modelos MobileSAM).
devicestr''Dispositivo de computação (por exemplo, 'cuda:0', 'cpu', ou '' para deteção automática de dispositivo).
conffloat0.25Limiar de confiança de deteção YOLO para filtrar deteções fracas.
ioufloat0.45Limiar IoU para Non-Maximum Suppression para filtrar caixas sobrepostas.
imgszint640Tamanho de entrada para redimensionar imagens (deve ser múltiplo de 32).
max_detint300Número máximo de deteções por imagem para eficiência de memória.
classeslist[int]NoneLista de índices de classe a detetar (por exemplo, [0, 1] para pessoa e bicicleta).
output_dirstrNoneDiretório de gravação para anotações (predefinição para './labels' relativo ao caminho dos dados).

Esta função facilita a criação rápida de datasets de segmentação de alta qualidade, ideal para pesquisadores e desenvolvedores que desejam acelerar seus projetos.

Limitações

Apesar de seus pontos fortes, o SAM 2 apresenta certas limitações:

  • Estabilidade de Rastreamento: O SAM 2 pode perder o rastreamento de objetos durante sequências extensas ou mudanças significativas de ponto de vista.
  • Confusão de Objetos: O modelo pode, às vezes, confundir objetos semelhantes, especialmente em cenas aglomeradas.
  • Eficiência com Múltiplos Objetos: A eficiência da segmentação diminui ao processar vários objetos simultaneamente devido à falta de comunicação entre objetos.
  • Precisão de Detalhes: Pode perder detalhes finos, especialmente com objetos que se movem rapidamente. Prompts adicionais podem resolver parcialmente esse problema, mas a suavidade temporal não é garantida.

Citações e Agradecimentos

Se o SAM 2 for uma parte crucial do seu trabalho de pesquisa ou desenvolvimento, por favor, cite-o usando a seguinte referência:

Citação
@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}
}

Estendemos nossa gratidão à Meta AI por suas contribuições à comunidade de IA com este modelo e dataset inovadores.

FAQ

O que é o SAM 2 e como ele melhora o Segment Anything Model (SAM) original?

O SAM 2, o sucessor do Segment Anything Model (SAM) da Meta, é uma ferramenta de ponta projetada para segmentação abrangente de objetos tanto em imagens quanto em vídeos. Ele se destaca no tratamento de dados visuais complexos através de uma arquitetura de modelo unificada e orientada por prompts que suporta processamento em tempo real e generalização zero-shot. O SAM 2 oferece várias melhorias em relação ao SAM original, incluindo:

  • Arquitetura de Modelo Unificada: Combina capacidades de segmentação de imagem e vídeo em um único modelo.
  • Desempenho em Tempo Real: Processa aproximadamente 44 quadros por segundo, tornando-o adequado para aplicações que exigem feedback imediato.
  • Generalização Zero-Shot: Segmenta objetos que nunca encontrou antes, útil em diversos domínios visuais.
  • Refinamento Interativo: Permite que os usuários refinem iterativamente os resultados da segmentação fornecendo prompts adicionais.
  • Tratamento Avançado de Desafios Visuais: Gerencia desafios comuns de segmentação de vídeo, como oclusão de objetos e reaparecimento.

Para mais detalhes sobre a arquitetura e capacidades do SAM 2, explore o artigo de pesquisa do SAM 2.

Como posso usar o SAM 2 para segmentação de vídeo em tempo real?

O SAM 2 pode ser utilizado para segmentação de vídeo em tempo real aproveitando sua interface orientada por prompts e capacidades de inferência em tempo real. Aqui está um exemplo básico:

Segmentar com Prompts

Usa prompts para segmentar objetos específicos em imagens ou vídeos.

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

Para um uso mais abrangente, consulte a seção Como usar o SAM 2.

Quais datasets são usados para treinar o SAM 2 e como eles melhoram seu desempenho?

O SAM 2 é treinado no dataset SA-V, um dos maiores e mais diversos datasets de segmentação de vídeo disponíveis. O dataset SA-V inclui:

  • 51.000+ Vídeos: Capturados em 47 países, fornecendo uma ampla gama de cenários do mundo real.
  • 600.000+ Anotações de Máscara: Anotações de máscara espaciotemporais detalhadas, referidas como "masklets", cobrindo objetos inteiros e partes.
  • Escala do Dataset: Apresenta 4,5 vezes mais vídeos e 53 vezes mais anotações do que os maiores datasets anteriores, oferecendo diversidade e complexidade sem precedentes.

Este dataset extenso permite que o SAM 2 alcance um desempenho superior nos principais benchmarks de segmentação de vídeo e aprimora suas capacidades de generalização zero-shot. Para mais informações, consulte a seção Dataset SA-V.

Como o SAM 2 lida com oclusões e reaparecimento de objetos na segmentação de vídeo?

O SAM 2 inclui um mecanismo de memória sofisticado para gerenciar dependências temporais e oclusões em dados de vídeo. O mecanismo de memória consiste em:

  • Codificador de Memória e Banco de Memória: Armazena características de quadros passados.
  • Módulo de Atenção de Memória: Utiliza informações armazenadas para manter o rastreamento consistente de objetos ao longo do tempo.
  • Cabeça de Oclusão: Lida especificamente com cenários onde os objetos não estão visíveis, prevendo a probabilidade de um objeto estar ocluído.

Este mecanismo garante continuidade mesmo quando os objetos estão temporariamente obscurecidos ou saem e reentram na cena. Para mais detalhes, consulte a seção Mecanismo de Memória e Tratamento de Oclusão.

Como o SAM 2 se compara a outros modelos de segmentação, como o YOLO26?

Os modelos SAM 2, como o SAM2-t e o SAM2-b da Meta, oferecem capacidades poderosas de segmentação zero-shot, mas são significativamente maiores e mais lentos em comparação aos modelos YOLO. Por exemplo, o YOLO26n-seg é aproximadamente 24 vezes menor e mais de 1145 vezes mais rápido que o SAM2-b na CPU. Embora o SAM 2 se destaque em cenários de segmentação versáteis, baseados em prompts e zero-shot, o YOLO26 é otimizado para velocidade, eficiência e aplicações em tempo real com inferência de ponta a ponta sem NMS, tornando-o mais adequado para implementação em ambientes com recursos limitados.

Comentários