Segment Anything Model (SAM)

Evolução do SAM

Este é o modelo SAM original da Meta. Para capacidades melhoradas, vê o SAM 2 para segmentação de vídeo ou o SAM 3 para Segmentação de Conceito Promptável com sugestões de texto e exemplos de imagem.

Como usar o Segment Anything no Colab

Bem-vindo à fronteira da segmentação de imagem com o Segment Anything Model, ou SAM. Este modelo revolucionário mudou o jogo ao introduzir segmentação de imagem promptável com desempenho em tempo real, estabelecendo novos padrões na área.

Introdução ao SAM: O Segment Anything Model

O Segment Anything Model, ou SAM, é um modelo de segmentação de imagem de última geração que permite a segmentação promptável, proporcionando uma versatilidade inigualável em tarefas de análise de imagem. O SAM constitui o coração da iniciativa Segment Anything, um projeto inovador que introduz um novo modelo, tarefa e conjunto de dados para segmentação de imagem.

O design avançado do SAM permite-lhe adaptar-se a novas distribuições de imagem e tarefas sem conhecimento prévio, uma característica conhecida como zero-shot transfer. Treinado no vasto conjunto de dados SA-1B, que contém mais de 1 milhão de milhões de máscaras espalhadas por 11 milhões de imagens cuidadosamente selecionadas, o SAM demonstrou um desempenho zero-shot impressionante, superando resultados anteriores totalmente supervisionados em muitos casos.

Amostra do conjunto de dados SA-1B com máscaras de segmentação automáticas Exemplos de imagens SA-1B. Imagens do conjunto de dados com sobreposição de máscaras do recém-introduzido conjunto de dados SA-1B. O SA-1B contém 11 milhões de imagens diversas, de alta resolução, licenciadas e que protegem a privacidade, e 1,1 milhão de milhões de máscaras de segmentação de alta qualidade. Estas máscaras foram anotadas de forma totalmente automática pelo SAM e, conforme verificado por classificações humanas e inúmeros experimentos, são de alta qualidade e diversidade. As imagens são agrupadas pelo número de máscaras por imagem para visualização (existem em média ∼100 máscaras por imagem).

Principais Funcionalidades do Segment Anything Model (SAM)

  • Tarefa de Segmentação Promptável: O SAM foi concebido com uma tarefa de segmentação promptável em mente, permitindo gerar máscaras de segmentação válidas a partir de qualquer prompt fornecido, tais como pistas espaciais ou de texto que identifiquem um objeto.
  • Arquitetura Avançada: O Segment Anything Model utiliza um potente codificador de imagem, um codificador de prompt e um descodificador de máscara leve. Esta arquitetura única permite prompts flexíveis, computação de máscara em tempo real e consciência de ambiguidade em tarefas de segmentação.
  • O Conjunto de Dados SA-1B: Introduzido pelo projeto Segment Anything, o conjunto de dados SA-1B apresenta mais de 1 milhão de milhões de máscaras em 11 milhões de imagens. Sendo o maior conjunto de dados de segmentação até à data, fornece ao SAM uma fonte de dados de treino diversa e em grande escala.
  • Desempenho Zero-Shot: O SAM apresenta um excelente desempenho zero-shot em várias tarefas de segmentação, tornando-o uma ferramenta pronta a usar para diversas aplicações com necessidade mínima de engenharia de prompts.

Para uma análise aprofundada do Segment Anything Model e do conjunto de dados SA-1B, visita o GitHub do Segment Anything e consulta o artigo de investigação Segment Anything.

SAM na Ultralytics Platform

O SAM alimenta a funcionalidade de anotação inteligente na Ultralytics Platform, permitindo o mascaramento inteligente baseado em cliques para uma rotulagem rápida de conjuntos de dados. Vê o guia de anotação para detalhes.

Modelos Disponíveis, Tarefas Suportadas e Modos de Operação

Esta tabela apresenta os modelos disponíveis com os seus pesos pré-treinados específicos, as tarefas que suportam e a sua compatibilidade com diferentes modos de operação como Inference, Validation, Training e Export, indicados por emojis ✅ para modos suportados e emojis ❌ para modos não suportados.

Tipo de ModeloPesos Pré-treinadosTarefas SuportadasInferência (Inference)ValidaçãoTreinamentoExport
SAM basesam_b.ptSegmentação de instância
SAM largesam_l.ptSegmentação de instância

Como usar o SAM: Versatilidade e Poder na Segmentação de Imagem

O Segment Anything Model pode ser empregue para uma multitude de tarefas a jusante que vão para além dos seus dados de treino. Isto inclui deteção de contornos, geração de propostas de objetos, segmentação de instâncias e previsão preliminar de texto para máscara. Com engenharia de prompts, o SAM pode adaptar-se rapidamente a novas tarefas e distribuições de dados de uma forma zero-shot, estabelecendo-o como uma ferramenta versátil e potente para todas as tuas necessidades de segmentação de imagem.

Exemplo de predição SAM

Segmentar com prompts

Segmentar imagem com prompts fornecidos.

from ultralytics import SAM

# Load a model
model = SAM("sam_b.pt")

# Display model information (optional)
model.info()

# Run inference with bboxes prompt
results = model("ultralytics/assets/zidane.jpg", bboxes=[439, 437, 524, 709])

# 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 a imagem inteira.

from ultralytics import SAM

# Load a model
model = SAM("sam_b.pt")

# Display model information (optional)
model.info()

# Run inference
model("path/to/image.jpg")
  • A lógica aqui é segmentar a imagem inteira se não passares nenhuns prompts (bboxes/pontos/máscaras).
Exemplo de SAMPredictor

Desta forma, podes definir a imagem uma vez e executar a inferência de prompts múltiplas vezes sem executar o codificador de imagem múltiplas vezes.

from ultralytics.models.sam import Predictor as SAMPredictor

# Create SAMPredictor
overrides = dict(conf=0.25, task="segment", mode="predict", imgsz=1024, model="mobile_sam.pt")
predictor = SAMPredictor(overrides=overrides)

# Set image
predictor.set_image("ultralytics/assets/zidane.jpg")  # set with image file
predictor.set_image(cv2.imread("ultralytics/assets/zidane.jpg"))  # set with np.ndarray
results = predictor(bboxes=[439, 437, 524, 709])

# Run inference with single point prompt
results = predictor(points=[900, 370], labels=[1])

# Run inference with multiple points prompt
results = predictor(points=[[400, 370], [900, 370]], labels=[1, 1])

# Run inference with negative points prompt
results = predictor(points=[[[400, 370], [900, 370]]], labels=[[1, 0]])

# Reset image
predictor.reset_image()

Segmentar tudo com argumentos adicionais.

from ultralytics.models.sam import Predictor as SAMPredictor

# Create SAMPredictor
overrides = dict(conf=0.25, task="segment", mode="predict", imgsz=1024, model="mobile_sam.pt")
predictor = SAMPredictor(overrides=overrides)

# Segment with additional args
results = predictor(source="ultralytics/assets/zidane.jpg", crop_n_layers=1, points_stride=64)
Nota

Todos os results devolvidos nos exemplos acima são objetos Results que permitem aceder facilmente às máscaras previstas e à imagem de origem.

Comparação SAM vs YOLO

Aqui comparamos o modelo SAM-b da Meta com modelos de segmentação da Ultralytics, incluindo o YOLO26n-seg:

ModeloTamanho
(MB)
Parâmetros
(M)
Velocidade (CPU)
(ms/im)
Meta SAM-b37593.741703
MobileSAM40.710.123802
FastSAM-s com YOLOv8 backbone23.911.858.0
Ultralytics YOLOv8n-seg7.1 (52.8x menor)3.4 (27.6x menos)24.8 (1682x mais rápido)
Ultralytics YOLO11n-seg6.2 (60.5x menor)2.9 (32.3x menos)24.3 (1716x mais rápido)
Ultralytics YOLO26n-seg6.7 (56.0x menor)2.7 (34.7x menos)25.2 (1655x 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 SAM-b, MobileSAM
for file in ["sam_b.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: Um Caminho Rápido para Conjuntos de Dados de Segmentação

A auto-anotação é uma funcionalidade chave do SAM, permitindo aos utilizadores gerar um conjunto de dados de segmentação usando um modelo de deteção pré-treinado. Esta funcionalidade permite a anotação rápida e precisa de um grande número de imagens, contornando a necessidade de rotulagem manual demorada.

Gera o Teu Conjunto de Dados de Segmentação Usando um Modelo de Deteção

Para auto-anotar o teu conjunto de dados com a estrutura Ultralytics, usa a função auto_annotate como mostrado abaixo:

Exemplo
from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="sam_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).

A função auto_annotate recebe o caminho para as tuas imagens, com argumentos opcionais para especificar os modelos de deteção pré-treinados e de segmentação SAM, o dispositivo para executar os modelos e o diretório de saída para guardar os resultados anotados.

A auto-anotação com modelos pré-treinados pode reduzir drasticamente o tempo e o esforço necessários para criar conjuntos de dados de segmentação de alta qualidade. Esta funcionalidade é especialmente benéfica para investigadores e programadores que lidam com grandes coleções de imagens, pois permite-lhes concentrar-se no desenvolvimento e avaliação do modelo em vez da anotação manual.

Citações e Agradecimentos

Se achas o SAM útil no teu trabalho de investigação ou desenvolvimento, por favor considera citar o nosso artigo:

Citação
@misc{kirillov2023segment,
      title={Segment Anything},
      author={Alexander Kirillov and Eric Mintun and Nikhila Ravi and Hanzi Mao and Chloe Rolland and Laura Gustafson and Tete Xiao and Spencer Whitehead and Alexander C. Berg and Wan-Yen Lo and Piotr Dollár and Ross Girshick},
      year={2023},
      eprint={2304.02643},
      archivePrefix={arXiv},
      primaryClass={cs.CV}
}

Gostaríamos de expressar a nossa gratidão à Meta AI por criar e manter este recurso valioso para a comunidade de visão computacional.

FAQ

O que é o Segment Anything Model (SAM) da Ultralytics?

O Segment Anything Model (SAM) da Ultralytics é um modelo de segmentação de imagem revolucionário concebido para tarefas de segmentação promptável. Aproveita uma arquitetura avançada, incluindo codificadores de imagem e de prompt combinados com um descodificador de máscara leve, para gerar máscaras de segmentação de alta qualidade a partir de vários prompts, tais como pistas espaciais ou de texto. Treinado no vasto conjunto de dados SA-1B, o SAM destaca-se no desempenho zero-shot, adaptando-se a novas distribuições de imagem e tarefas sem conhecimento prévio.

Como posso usar o Segment Anything Model (SAM) para segmentação de imagem?

Podes usar o Segment Anything Model (SAM) para segmentação de imagem executando a inferência com vários prompts, tais como caixas delimitadoras ou pontos. Aqui tens um exemplo usando Python:

from ultralytics import SAM

# Load a model
model = SAM("sam_b.pt")

# Segment with bounding box prompt
model("ultralytics/assets/zidane.jpg", bboxes=[439, 437, 524, 709])

# Segment with points prompt
model("ultralytics/assets/zidane.jpg", points=[900, 370], labels=[1])

# Segment with multiple points prompt
model("ultralytics/assets/zidane.jpg", points=[[400, 370], [900, 370]], labels=[[1, 1]])

# Segment with multiple points prompt per object
model("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 1]])

# Segment with negative points prompt.
model("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 0]])

Alternativamente, podes executar a inferência com o SAM na interface de linha de comandos (CLI):

yolo predict model=sam_b.pt source=path/to/image.jpg

Para instruções de utilização mais detalhadas, visita a secção de Segmentação.

Como se comparam os modelos SAM e YOLO em termos de desempenho?

Comparados com os modelos YOLO, as variantes SAM como o SAM-b, MobileSAM e FastSAM-s são normalmente maiores e mais lentas, mas oferecem capacidades únicas de segmentação zero-shot. Por exemplo, o YOLO26n-seg é 56x menor e mais de 1650x mais rápido que o modelo original SAM-b da Meta na CPU. Isto torna os modelos YOLO ideais para aplicações que requerem segmentação rápida, leve e computacionalmente eficiente, enquanto os modelos SAM se destacam em tarefas de segmentação flexíveis, promptáveis e zero-shot.

Como posso auto-anotar o meu conjunto de dados usando o SAM?

O SAM da Ultralytics oferece uma funcionalidade de auto-anotação que permite gerar conjuntos de dados de segmentação usando um modelo de deteção pré-treinado. Aqui tens um exemplo em Python:

from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="sam_b.pt")

Esta função aceita o caminho para as tuas imagens e argumentos opcionais para modelos de deteção pré-treinados e de segmentação SAM, juntamente com especificações de dispositivo e diretório de saída. Para um guia completo, vê Auto-Annotation.

Que conjuntos de dados são usados para treinar o Segment Anything Model (SAM)?

O SAM é treinado no vasto SA-1B dataset, que compreende mais de 1 milhão de máscaras em 11 milhões de imagens. O SA-1B é o maior conjunto de dados de segmentação até à data, fornecendo dados de treino diversos e de alta qualidade, garantindo um desempenho zero-shot impressionante em tarefas de segmentação variadas. Para mais detalhes, visita a secção de Dataset.

Comentários