Ir para o conteúdo

SAM 2.1

Acabamos de adicionar suporte para o modelo SAM2.1 mais preciso. Por favor, experimente!

SAM 2: Segment Anything Model 2

Inferência com Segment Anything 2 no Colab

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

Resultados de Exemplo do SAM 2

Principais Características



Assista: Como Executar a Inferência com o SAM2 da Meta usando Ultralytics | Guia Passo a Passo 🎉

Arquitetura de Modelo Unificada

O SAM 2 combina os recursos de segmentação de imagem e vídeo em um único modelo. Essa unificação simplifica a implantação e permite um desempenho consistente em diferentes tipos de mídia. Ele aproveita uma interface flexível baseada em prompts, permitindo que os usuários especifiquem objetos de interesse por meio de vários tipos de prompts, como pontos, caixas delimitadoras ou máscaras.

Desempenho em Tempo Real

O modelo atinge velocidades de inferência em tempo real, processando aproximadamente 44 quadros por segundo. Isso torna o SAM 2 adequado para aplicações que exigem 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 as categorias pré-definidas podem não cobrir todos os objetos possíveis.

Refinamento Interativo

Os usuários podem refinar iterativamente os resultados da segmentação, fornecendo prompts adicionais, permitindo um controle preciso sobre a saída. Essa interatividade é essencial para ajustar os resultados em aplicações como anotação de vídeo ou imagem médica.

Manuseio Avançado de Desafios Visuais

O SAM 2 inclui mecanismos para gerenciar 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 em todos os frames, garantindo a continuidade, mesmo quando os objetos são temporariamente obscurecidos ou saem e reentram na cena.

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

Desempenho e Detalhes Técnicos

O SAM 2 estabelece um novo benchmark no campo, superando os modelos anteriores em várias métricas:

Métrica SAM 2 SOTA Anterior
Segmentação de Vídeo Interativa Melhor -
Interações Humanas Necessárias 3x menos Linha de Base
Precisão da Segmentação de Imagem Melhorado SAM
Velocidade de Inferência 6x mais rápido SAM

Arquitetura do Modelo

Componentes Essenciais

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

Diagrama da Arquitetura SAM 2

Mecanismo de Memória e Tratamento 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 suas características em um banco de memória. Quando um objeto se torna ocluso, o modelo pode confiar nessa memória para prever sua posição e aparência quando ele reaparecer. 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 ocluso.

Resolução de Ambiguidade Multi-Máscara

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

Dataset 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. Inclui:

  • Mais de 51.000 vídeos: Capturados em 47 países, proporcionando uma ampla gama de cenários do mundo real.
  • Mais de 600.000 Anotações de Máscara: Anotações detalhadas de máscara espaço-temporal, 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 diversidade e complexidade sem precedentes.

Benchmarks

Segmentação de Objetos em Vídeo

O SAM 2 demonstrou um desempenho superior nos principais benchmarks de segmentação de vídeo:

Conjunto de dados J&F J F
DAVIS 2017 82.5 79.8 85.2
YouTube-VOS 81.2 78.9 83.5

Segmentação Interativa

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

Conjunto de dados NoC@90 AUC
DAVIS Interativo 1.54 0.872

Instalação

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

pip install ultralytics

Como Usar o SAM2: Versatilidade em Segmentação de Imagens e Vídeos

A tabela a seguir detalha os modelos SAM 2 disponíveis, 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 Modelo Pesos Pré-treinados Tarefas Suportadas Inferência Validação Treinamento Exportar
SAM 2 mínimo sam2_t.pt Segmentação de Instância
SAM 2 pequeno sam2_s.pt Segmentação de Instância
SAM 2 base sam2_b.pt Segmentação de Instância
SAM 2 grande sam2_l.pt Segmentação de Instância
SAM 2.1 mínimo sam2.1_t.pt Segmentação de Instância
SAM 2.1 pequeno sam2.1_s.pt Segmentação de Instância
SAM 2.1 base sam2.1_b.pt Segmentação de Instância
SAM 2.1 grande sam2.1_l.pt Segmentação de Instância

Exemplos de Previsão do SAM 2

O SAM 2 pode ser utilizado em um amplo espectro de tarefas, incluindo edição de vídeo em tempo real, imagens médicas e sistemas autônomos. Sua capacidade de segmentar dados visuais estáticos e dinâmicos o torna uma ferramenta versátil para pesquisadores e desenvolvedores.

Segmentar com Prompts

Segmentar com Prompts

Use 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

Segmentar toda a imagem ou conteúdo de 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")
# Run inference with a SAM 2 model
yolo predict model=sam2.1_b.pt source=path/to/video.mp4

Segmentar Vídeo e Rastrear objetos

Segmentar Vídeo

Segmentar todo o conteúdo de vídeo com prompts específicos e rastrear 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.

Segmento e seguimento interactivos dinâmicos

O SAM2DynamicInteractivePredictor é uma extensão gratuita de formação avançada do SAM2 que permite uma interação dinâmica com vários fotogramas e capacidades de aprendizagem contínua. Este preditor suporta actualizações rápidas em tempo real e gestão de memória para um melhor desempenho de seguimento através de uma sequência de imagens. Em comparação com o SAM2 original, o SAM2DynamicInteractivePredictor reconstrói o fluxo de inferência para utilizar da melhor forma os modelos SAM2 pré-treinados sem necessidade de formação adicional.

Resultados de Exemplo do SAM 2

Principais Características

Oferece três melhorias significativas:

  1. Interativo dinâmico: Adicionar novos avisos para fundir/desencadear novas instâncias nos fotogramas seguintes em qualquer altura durante o processamento de vídeo
  2. Aprendizagem contínua: Adicionar novos avisos para instâncias existentes para melhorar o desempenho do modelo ao longo do tempo
  3. Suporte a várias imagens independentes: Processe várias imagens independentes (não necessariamente de uma sequência de vídeo) com partilha de memória e rastreio de objectos entre imagens

Capacidades principais

  • Flexibilidade de prompts: Aceita caixas delimitadoras, pontos e máscaras como prompts
  • Gestão do banco de memória: Mantém um banco de memória dinâmico para armazenar os estados dos objectos nos quadros
  • Rastreio de múltiplos objectos: Suporta o seguimento de vários objectos simultaneamente com IDs de objectos individuais
  • Actualizações em tempo real: Permite adicionar novos prompts durante a inferência sem reprocessar quadros anteriores
  • Processamento independente de imagens: Processar imagens independentes com contexto de memória partilhada para consistência de objectos 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.inference(img="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.inference(img="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")

Nota

O SAM2DynamicInteractivePredictor foi concebido para funcionar com modelos SAM2 e suportar a adição/refinamento de categorias por todas as avisos de caixa/ponto/máscara nativamente que SAM2 suporta. É particularmente útil para cenários em que os objectos aparecem ou mudam ao longo do tempo, como em anotações de vídeo ou tarefas de edição interactiva.

Argumentos

Nome Valor Padrão Tipo de Dado Descrição
max_obj_num 3 str O número máximo predefinido de categorias
update_memory False bool Se a memória deve ser actualizada com novos avisos
obj_ids None List[int] Lista de IDs de objectos correspondentes a prompts

Casos de Uso

SAM2DynamicInteractivePredictor é ideal para:

  • Fluxos de trabalho de anotação de vídeo em que aparecem novos objectos durante a sequência
  • Edição de vídeo interactiva que requer adição e refinamento de objectos em tempo real
  • Aplicações de vigilância com necessidades de seguimento dinâmico de objectos
  • Imagiologia médica para seguimento de estruturas anatómicas em séries temporais
  • Sistemas autónomos que requerem deteção e seguimento adaptativos de objectos
  • Conjuntos de dados de várias imagens para uma segmentação consistente de objectos em imagens independentes
  • Análise de recolha de imagens em que os objectos têm de ser localizados em diferentes cenários
  • Segmentação entre domínios com recurso à memória de diversos contextos de imagem
  • Anotação semi-automática para uma criação eficiente de conjuntos de dados com um mínimo de intervenção manual

Comparação de SAM 2 vs YOLO

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

Modelo Tamanho
(MB)
Parâmetros
(M)
Velocidade (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 com backbone YOLOv8 23.7 11.8 55.9
YOLOv8n-seg da Ultralytics 6,7 (11,7x menor) 3,4 (11,4x menos) 24.5 (1061x mais rápido)
Ultralytics YOLO11n-seg 5.9 (13,2x menor) 2.9 (13,4x menos) 30.1 (864x 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 recursos exclusivos de segmentação automática, os modelos YOLO, particularmente YOLOv8n-seg e YOLO11n-seg, são significativamente menores, mais rápidos e computacionalmente mais eficientes.

Testes executados em um Apple M4 Pro 2025 com 24 GB de RAM usando torch==2.6.0 e ultralytics==8.3.90. 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
for file_name in ["yolov8n-seg.pt", "yolo11n-seg.pt"]:
    model = YOLO(file_name)
    model.info()
    model(ASSETS)

Auto-Anotação: Criação Eficiente de Conjuntos de Dados

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

Como Auto-Anotar com SAM 2



Assista: Anotação Automática com o Modelo Segment Anything 2 da Meta usando Ultralytics | Rotulagem de Dados

Para auto-anotar seu conjunto de dados usando 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="yolo11x.pt", sam_model="sam2_b.pt")
Argumento Tipo Padrão Descrição
data str obrigatório Caminho para o diretório contendo as imagens alvo para anotação ou segmentação.
det_model str 'yolo11x.pt' Caminho do modelo de detecção de objetos YOLO para detecção de objetos inicial.
sam_model str 'sam_b.pt' Caminho do modelo SAM para segmentação (suporta variantes SAM, SAM2 e modelos mobile_sam).
device str '' Dispositivo de computação (por exemplo, 'cuda:0', 'cpu' ou '' para detecção automática de dispositivo).
conf float 0.25 Limite de confiança da detecção YOLO para filtrar detecções fracas.
iou float 0.45 Limite de IoU para Supressão Não Máxima para filtrar caixas sobrepostas.
imgsz int 640 Tamanho de entrada para redimensionar imagens (deve ser múltiplo de 32).
max_det int 300 Número máximo de detecções por imagem para eficiência de memória.
classes list[int] None Lista de índices de classe para detectar (por exemplo, [0, 1] para pessoa e bicicleta).
output_dir str None Diretório para salvar as anotações (o padrão é './labels' relativo ao caminho dos dados).

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

Limitações

Apesar dos seus pontos fortes, o SAM 2 tem certas limitações:

  • Estabilidade do Rastreamento: O SAM 2 pode perder o rastreamento de objetos durante sequências prolongadas ou mudanças significativas de ponto de vista.
  • Confusão de Objetos: O modelo pode, por vezes, confundir objetos de aparência semelhante, particularmente em cenas lotadas.
  • 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 os objetos.
  • Precisão Detalhada: Pode perder detalhes finos, especialmente com objetos em movimento rápido. Prompts adicionais podem resolver parcialmente este 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:

@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 para a comunidade de IA com este modelo e conjunto de dados 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 em imagens e vídeos. Ele se destaca no tratamento de dados visuais complexos por meio de uma arquitetura de modelo unificada e promptable que oferece suporte ao processamento em tempo real e à generalização zero-shot. O SAM 2 oferece diversas 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 frames 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.
  • Manuseio Avançado de Desafios Visuais: Gerencia desafios comuns de segmentação de vídeo, como oclusão e reaparecimento de objetos.

Para mais detalhes sobre a arquitetura e os recursos 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 programável e recursos de inferência em tempo real. Aqui está um exemplo básico:

Segmentar com Prompts

Use 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 uma utilização 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 conjunto de dados SA-V, um dos maiores e mais diversos conjuntos de dados de segmentação de vídeo disponíveis. O conjunto de dados SA-V inclui:

  • Mais de 51.000 vídeos: Capturados em 47 países, proporcionando uma ampla gama de cenários do mundo real.
  • Mais de 600.000 Anotações de Máscara: Anotações detalhadas de máscara espaço-temporal, 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 diversidade e complexidade sem precedentes.

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

Como o SAM 2 lida com oclusões e reaparecimentos 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 frames passadas.
  • Módulo de Atenção de Memória: Utiliza informações armazenadas para manter um rastreamento de objetos consistente ao longo do tempo.
  • Cabeçalho de Oclusão: Lida especificamente com cenários em que os objetos não estão visíveis, prevendo a probabilidade de um objeto estar ocluído.

Este mecanismo garante a continuidade mesmo quando os objetos são temporariamente obscurecidos ou saem e voltam a entrar 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 YOLO11?

Os modelos SAM 2, como o SAM2-t e o SAM2-b da Meta, oferecem poderosos recursos de segmentação zero-shot, mas são significativamente maiores e mais lentos em comparação com os modelos YOLO11. Por exemplo, o YOLO11n-seg é aproximadamente 13 vezes menor e mais de 860 vezes mais rápido que o SAM2-b. Enquanto o SAM 2 se destaca em cenários de segmentação versátil, baseada em prompt e zero-shot, o YOLO11 é otimizado para velocidade, eficiência e aplicações em tempo real, tornando-o mais adequado para implantação em ambientes com recursos limitados.



📅 Criado há 1 ano ✏️ Atualizado há 4 dias

Comentários