Ultralytics YOLO27:
Get Started

Modelo Segment Anything (SAM)#

Evolução do SAM

Este é o modelo SAM original da Meta. Para conhecer recursos aprimorados, consulta SAM 2 para segmentação de vídeo ou SAM 3 para segmentação de conceitos orientável por prompts com prompts de texto e imagens de exemplo.

How to use Segment Anything In Colab

Dá as boas-vindas à nova fronteira da segmentação de imagens com o Modelo Segment Anything, ou SAM. Este modelo revolucionário mudou o cenário ao introduzir a segmentação de imagens orientável por prompts com desempenho em tempo real, estabelecendo novos padrões na área.

Introdução ao SAM: o Modelo Segment Anything#

O Modelo Segment Anything, ou SAM, é um modelo de segmentação de imagens de última geração que permite a segmentação orientável por prompts, oferecendo versatilidade incomparável em tarefas de análise de imagens. O SAM está no centro da iniciativa Segment Anything, um projeto inovador que apresenta um novo modelo, uma nova tarefa e um novo conjunto de dados para segmentação de imagens.

O design avançado do SAM permite que ele se adapte a novas distribuições de imagens e tarefas sem conhecimento prévio, um recurso conhecido como transferência zero-shot. Treinado no amplo conjunto de dados SA-1B, que contém mais de 1 bilhão de máscaras distribuídas por 11 milhões de imagens cuidadosamente selecionadas, o SAM demonstrou um desempenho zero-shot impressionante, superando resultados anteriores totalmente supervisionados em muitos casos.

Exemplo do conjunto de dados SA-1B com máscaras de segmentação automática Imagens de exemplo do SA-1B. Máscaras sobrepostas às imagens do conjunto de dados SA-1B recém-introduzido. O SA-1B contém 11 milhões de imagens diversas, de alta resolução, licenciadas e que protegem a privacidade, além de 1,1 bilhão de máscaras de segmentação de alta qualidade. Essas máscaras foram anotadas totalmente de forma automática pelo SAM e, conforme confirmado por avaliações humanas e numerosos experimentos, têm alta qualidade e diversidade. As imagens são agrupadas pelo número de máscaras por imagem para visualização (há, em média, ∼100 máscaras por imagem).

Principais recursos do Modelo Segment Anything (SAM)#

  • Tarefa de segmentação orientável por prompts: o SAM foi projetado para uma tarefa de segmentação orientável por prompts, permitindo gerar máscaras de segmentação válidas a partir de qualquer prompt, como pistas espaciais ou textuais que identifiquem um objeto.
  • Arquitetura avançada: o Modelo Segment Anything utiliza um poderoso codificador de imagens, um codificador de prompts e um decodificador de máscaras leve. Essa arquitetura exclusiva permite o uso flexível de prompts, o cálculo de máscaras em tempo real e a identificação de ambiguidades em tarefas de segmentação.
  • O conjunto de dados SA-1B: apresentado pelo projeto Segment Anything, o conjunto de dados SA-1B contém mais de 1 bilhão de máscaras em 11 milhões de imagens. Como o maior conjunto de dados de segmentação até hoje, ele fornece ao SAM uma fonte de dados de treinamento diversificada e em grande escala.
  • Desempenho zero-shot: o SAM apresenta um desempenho zero-shot excepcional em diversas tarefas de segmentação, tornando-se uma ferramenta pronta para uso em várias aplicações, com necessidade mínima de engenharia de prompts.

Para uma análise detalhada do Modelo Segment Anything e do conjunto de dados SA-1B, visita o GitHub do Segment Anything e consulta o artigo de pesquisa Segment Anything.

SAM na Ultralytics Platform

O SAM alimenta o recurso de anotação inteligente na Ultralytics Platform, permitindo a criação de máscaras inteligentes com cliques para rotular conjuntos de dados rapidamente. Consulta o guia de anotação para saber mais.

Modelos disponíveis, tarefas compatíveis e modos de operação#

Esta tabela apresenta os modelos disponíveis com seus pesos pré-treinados específicos, as tarefas compatíveis e a compatibilidade com diferentes modos de operação, como Inferência, Validação, Treinamento e Exportação, indicados pelos emojis ✅ para modos compatíveis e ❌ para modos incompatíveis.

Tipo de modeloPesos pré-treinadosTarefas suportadasTreinamentoValidaçãoInferênciaExportar
SAM basesam_b.ptSegmentação de instâncias❌❌✅❌
SAM grandesam_l.ptSegmentação de instâncias❌❌✅❌

Como usar o SAM: versatilidade e potência na segmentação de imagens#

O Modelo Segment Anything pode ser usado em várias tarefas posteriores que vão além dos dados de treinamento. Isso inclui detecção de bordas, 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 se adaptar rapidamente a novas tarefas e distribuições de dados de forma zero-shot, tornando-se uma ferramenta versátil e poderosa para todas as tuas necessidades de segmentação de imagens.

Exemplo de previsão do SAM#

Segmentar com prompts

Segmenta a imagem com os prompts fornecidos.

from ultralytics import SAM

# Carregar um modelo
model = SAM("sam_b.pt")

# Exibir informações do modelo (opcional)
model.info()

# Executar inferência com prompt de bboxes
results = model("ultralytics/assets/zidane.jpg", bboxes=[439, 437, 524, 709])

# Executar inferência com um único ponto
results = model(points=[900, 370], labels=[1])

# Executar inferência com vários pontos
results = model(points=[[400, 370], [900, 370]], labels=[1, 1])

# Executar inferência com prompt de vários pontos por objeto
results = model(points=[[[400, 370], [900, 370]]], labels=[[1, 1]])

# Executar inferência com prompt de pontos negativos
results = model(points=[[[400, 370], [900, 370]]], labels=[[1, 0]])
Segmentar tudo

Segmenta a imagem inteira.

from ultralytics import SAM

# Carregar um modelo
model = SAM("sam_b.pt")

# Exibir informações do modelo (opcional)
model.info()

# Executar inferência
model("path/to/image.jpg")
  • A lógica aqui é segmentar a imagem inteira se não forneceres nenhum prompt (bboxes/pontos/máscaras).
Exemplo de SAMPredictor

Assim, podes definir a imagem uma vez e executar a inferência com prompts várias vezes, sem executar o codificador de imagens repetidamente.

import cv2

from ultralytics.models.sam import Predictor as SAMPredictor

# Criar SAMPredictor
overrides = {"conf": 0.25, "task": "segment", "mode": "predict", "imgsz": 1024, "model": "mobile_sam.pt"}
predictor = SAMPredictor(overrides=overrides)

# Define a imagem
predictor.set_image("ultralytics/assets/zidane.jpg")  # definir com arquivo de imagem
predictor.set_image(cv2.imread("ultralytics/assets/zidane.jpg"))  # definir com np.ndarray
results = predictor(bboxes=[439, 437, 524, 709])

# Executar inferência com um único prompt de ponto
results = predictor(points=[900, 370], labels=[1])

# Executar inferência com prompt de vários pontos
results = predictor(points=[[400, 370], [900, 370]], labels=[1, 1])

# Executar inferência com prompt de pontos negativos
results = predictor(points=[[[400, 370], [900, 370]]], labels=[[1, 0]])

# Redefinir imagem
predictor.reset_image()

Segmentar tudo com argumentos adicionais.

from ultralytics.models.sam import Predictor as SAMPredictor

# Criar SAMPredictor
overrides = {"conf": 0.25, "task": "segment", "mode": "predict", "imgsz": 1024, "model": "mobile_sam.pt"}
predictor = SAMPredictor(overrides=overrides)

# Segmentar com argumentos adicionais
results = predictor(source="ultralytics/assets/zidane.jpg", crop_n_layers=1, points_stride=64, min_mask_region_area=100)
Nota

Todos os objetos results retornados nos exemplos acima são objetos Results, que permitem acessar facilmente as máscaras previstas e a imagem de origem.

Comparação entre SAM e YOLO#

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

ModeloTamanho
(MB)
Parâmetros
(M)
Velocidade (CPU)
(ms/im)
Meta SAM-b37593.741703
MobileSAM40.710.123802
FastSAM-s com backbone YOLOv823.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 entre os tamanhos e as velocidades dos modelos das variantes SAM e dos modelos de segmentação YOLO. Embora o SAM ofereça recursos exclusivos de segmentação automática, os modelos YOLO, especialmente YOLOv8n-seg, YOLO11n-seg e YOLO26n-seg, são significativamente menores, mais rápidos e mais eficientes em termos computacionais.

As velocidades do SAM foram medidas com PyTorch; as velocidades do YOLO, com ONNX Runtime. Os testes foram executados em um Apple M4 Air de 2025 com 16 GB 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

# Comparar o desempenho de SAM-b e MobileSAM
for file in ["sam_b.pt", "mobile_sam.pt"]:
    model = SAM(file)
    model.info()
    model(ASSETS)

# Perfilar FastSAM-s
model = FastSAM("FastSAM-s.pt")
model.info()
model(ASSETS)

# Avalie o desempenho dos modelos YOLO (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, nms=False)  # Cabeça sem NMS do YOLO26; sem efeito para YOLOv8/YOLO11
    model = YOLO(onnx_path)
    model(ASSETS)

Anotação automática: um caminho rápido para conjuntos de dados de segmentação#

A anotação automática é um recurso essencial do SAM, que permite gerar um conjunto de dados de segmentação usando um modelo de detecção pré-treinado. Esse recurso permite anotar um grande número de imagens com rapidez e precisão, sem precisar fazer a rotulagem manual, que consome muito tempo.

Gera o teu conjunto de dados de segmentação usando um modelo de detecção#

Para anotar automaticamente o teu conjunto de dados com o framework 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")
ArgumentoTipoPadrã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 para o modelo de detecção YOLO usado na detecção inicial de objetos.
sam_modelstr'sam_b.pt'Caminho para o modelo SAM usado na segmentação (compatível com pesos de SAM, SAM 2, MobileSAM e SAM 3).
devicestr''Dispositivo de computação (por exemplo, 'cuda:0', 'cpu' ou '' para detecção automática do dispositivo).
conffloat0.25Limite de confiança para a detecção YOLO, usado para filtrar detecções fracas.
ioufloat0.45Limite de IoU para a supressão não máxima, usada para filtrar caixas sobrepostas.
imgszint640Tamanho de entrada para redimensionar as imagens (arredondado para cima até um múltiplo de 32, se necessário).
max_detint300Número máximo de detecções por imagem para economizar memória.
classeslist[int]NoneLista de índices de classes a detectar (por exemplo, [0, 1] para pessoa e bicicleta).
output_dirstrNoneDiretório para salvar as anotações (por padrão: diretório irmão de <data>_auto_annotate_labels).

A função auto_annotate recebe o caminho das imagens e argumentos opcionais para especificar os modelos de detecção e segmentação SAM pré-treinados, o dispositivo em que os modelos serão executados e o diretório de saída para salvar os resultados anotados.

A anotação automática com modelos pré-treinados pode reduzir significativamente o tempo e o esforço necessários para criar conjuntos de dados de segmentação de alta qualidade. Esse recurso é especialmente útil para pesquisadores e desenvolvedores que trabalham com grandes coleções de imagens, pois permite que se concentrem no desenvolvimento e na avaliação de modelos, em vez de fazer anotações manualmente.

Citações e agradecimentos#

Se o SAM for útil para a tua pesquisa ou trabalho de desenvolvimento, considera citar o 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 agradecer à Meta AI por criar e manter este recurso valioso para a comunidade de visão computacional.

Perguntas frequentes#

  • O Modelo Segment Anything (SAM) da Meta é um modelo revolucionário de segmentação de imagens projetado para tarefas de segmentação orientáveis por prompts. Ele utiliza uma arquitetura avançada, que combina codificadores de imagens e de prompts com um decodificador de máscaras leve, para gerar máscaras de segmentação de alta qualidade a partir de vários prompts, como pistas espaciais ou textuais. Treinado no amplo conjunto de dados SA-1B, o SAM se destaca no desempenho zero-shot, adaptando-se a novas distribuições de imagens e tarefas sem conhecimento prévio.

  • Podes usar o Modelo Segment Anything (SAM) para segmentação de imagens executando inferência com vários prompts, como caixas delimitadoras ou pontos. Aqui está um exemplo usando Python:

    from ultralytics import SAM
    
    # Carregar um modelo
    model = SAM("sam_b.pt")
    
    # Segmente usando um prompt de caixa delimitadora
    model("ultralytics/assets/zidane.jpg", bboxes=[439, 437, 524, 709])
    
    # Segmentar com prompt de pontos
    model("ultralytics/assets/zidane.jpg", points=[900, 370], labels=[1])
    
    # Segmentar com prompt de vários pontos
    model("ultralytics/assets/zidane.jpg", points=[[400, 370], [900, 370]], labels=[1, 1])
    
    # Segmentar com prompt de vários pontos por objeto
    model("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 1]])
    
    # Segmentar com prompt de pontos negativos.
    model("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 0]])

    Como alternativa, podes executar a inferência com o SAM pela interface de linha de comandos (CLI):

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

    Para instruções de uso mais detalhadas, visita a seção de segmentação.

  • Em comparação com os modelos YOLO, as variantes do SAM, como SAM-b, MobileSAM e FastSAM-s, costumam ser maiores e mais lentas, mas oferecem recursos exclusivos de segmentação zero-shot. Por exemplo, YOLO26n-seg é 56x menor e mais de 1650x mais rápido do que o modelo SAM-b original da Meta em CPU. Isso torna os modelos YOLO ideais para aplicações que exigem segmentação rápida, leve e computacionalmente eficiente, enquanto os modelos SAM se destacam em tarefas de segmentação flexíveis, orientáveis por prompts e zero-shot.

  • O SAM da Ultralytics oferece um recurso de anotação automática que permite gerar conjuntos de dados de segmentação usando um modelo de detecção pré-treinado. Aqui está 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 recebe o caminho das imagens e argumentos opcionais para os modelos de detecção e segmentação SAM pré-treinados, além das especificações do dispositivo e do diretório de saída. Para ver o guia completo, consulta Anotação automática.

  • O SAM é treinado no amplo conjunto de dados SA-1B, que contém mais de 1 bilhão de máscaras em 11 milhões de imagens. O SA-1B é o maior conjunto de dados de segmentação até hoje e fornece dados de treinamento diversos e de alta qualidade, garantindo um desempenho zero-shot impressionante em várias tarefas de segmentação. Para saber mais, visita a seção de conjuntos de dados.

Comentários