Ultralytics YOLO27:

Modelo de Segmentação de Qualquer Coisa (SAM)#

Evolução do SAM

Este é o modelo SAM original da Meta. Para obter capacidades aprimoradas, consulte o SAM 2 para segmentação de vídeo ou o SAM 3 para segmentação de conceitos orientada por prompts com prompts de exemplos textuais e de imagem.

How to use Segment Anything In Colab

Dê as boas-vindas à vanguarda da segmentação de imagens com o Modelo de Segmentação de Qualquer Coisa, ou SAM. Este modelo revolucionário mudou o cenário ao introduzir a segmentação de imagens orientada por prompts com desempenho em tempo real, estabelecendo novos padrões no campo.

Introdução ao SAM: o Modelo de Segmentação de Qualquer Coisa#

O Modelo de Segmentação de Qualquer Coisa, ou SAM, é um modelo avançado de segmentação de imagens que permite a segmentação orientada por prompts, proporcionando versatilidade incomparável em tarefas de análise de imagens. O SAM é o núcleo da iniciativa Segment Anything, um projeto inovador que introduz 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 em muitos casos os resultados anteriores totalmente supervisionados.

Exemplo do conjunto de dados SA-1B com máscaras de segmentação automática Imagens de exemplo do SA-1B. Imagens do conjunto de dados com máscaras sobrepostas 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, além de 1,1 bilhão de máscaras de segmentação de alta qualidade. Essas máscaras foram anotadas de forma totalmente automática pelo SAM e, conforme verificado por avaliações humanas e numerosos experimentos, são de 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 de Segmentação de Qualquer Coisa (SAM)#

  • Tarefa de segmentação orientada por prompts: o SAM foi projetado tendo em mente uma tarefa de segmentação orientada por prompts, permitindo gerar máscaras de segmentação válidas a partir de qualquer prompt fornecido, como pistas espaciais ou textuais que identificam um objeto.
  • Arquitetura avançada: o Modelo de Segmentação de Qualquer Coisa utiliza um codificador de imagens avançado, um codificador de prompts e um decodificador de máscaras leve. Essa arquitetura exclusiva permite prompts flexíveis, cálculo de máscaras em tempo real e reconhecimento de ambiguidades 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 bilhão de máscaras em 11 milhões de imagens. Como o maior conjunto de dados de segmentação até o momento, ele fornece ao SAM uma fonte de dados de treinamento diversificada e em grande escala.
  • Desempenho zero-shot: o SAM demonstra um desempenho zero-shot excepcional em várias tarefas de segmentação, tornando-se uma ferramenta pronta para uso em diversas aplicações, com necessidade mínima de engenharia de prompts.

Para uma análise aprofundada do Modelo de Segmentação de Qualquer Coisa e do conjunto de dados SA-1B, visite o GitHub do Segment Anything e consulte 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 inteligente de máscaras baseada em cliques para uma rotulagem rápida de conjuntos de dados. Consulte o guia de anotação para obter detalhes.

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 por emojis ✅ para modos compatíveis e emojis ❌ para modos incompatíveis.

Tipo de modeloPesos pré-treinadosTarefas suportadasTreinoValidaçãoInferênciaExportação
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 de Segmentação de Qualquer Coisa pode ser utilizado em diversas 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 maneira zero-shot, consolidando-se como uma ferramenta versátil e potente para todas as suas necessidades de segmentação de imagens.

Exemplo de previsão do SAM#

Segmentar com prompts

Segmentar a imagem com os 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 você não passar nenhum prompt (bboxes/pontos/máscaras).
Exemplo de SAMPredictor

Dessa forma, você pode definir a imagem uma vez e executar a inferência de prompts várias vezes sem executar o codificador de imagens repetidamente.

import cv2

from ultralytics.models.sam import Predictor as SAMPredictor

# Create SAMPredictor
overrides = {"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 = {"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, min_mask_region_area=100)
Nota

Todos os 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 o 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 as variantes do SAM e os modelos de segmentação YOLO em termos de tamanho e velocidade. Embora o SAM ofereça capacidades únicas de segmentação automática, os modelos YOLO, particularmente 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, e as velocidades do YOLO foram medidas com ONNX Runtime. Os testes foram executados num 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

# 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, nms=False)  # YOLO26 NMS-free head; no-op for 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, permitindo que os usuários gerem um conjunto de dados de segmentação usando um modelo de detecção pré-treinado. Esse recurso permite anotar de forma rápida e precisa um grande número de imagens, eliminando a necessidade de uma rotulagem manual demorada.

Gere seu conjunto de dados de segmentação usando um modelo de detecção#

Para anotar automaticamente seu conjunto de dados com o framework Ultralytics, use a função auto_annotate, conforme 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-alvo para anotação ou segmentação.
det_modelstr'yolo26x.pt'Caminho para o modelo de deteção YOLO usado na deteção inicial de objetos.
sam_modelstr'sam_b.pt'Caminho para o modelo SAM usado na segmentação (suporta pesos de SAM, SAM 2, MobileSAM e SAM 3).
devicestr''Dispositivo de computação (por exemplo, 'cuda:0', 'cpu' ou '' para deteção automática do dispositivo).
conffloat0.25Limiar de confiança da deteção YOLO para filtrar deteções fracas.
ioufloat0.45Limiar de IoU para a supressão não máxima, usado para filtrar caixas sobrepostas.
imgszint640Tamanho de entrada para redimensionar as imagens (tem de ser múltiplo de 32).
max_detint300Número máximo de deteções por imagem para garantir eficiência de memória.
classeslist[int]NoneLista de índices de classes a detetar (por exemplo, [0, 1] para pessoa e bicicleta).
output_dirstrNoneDiretório onde guardar as anotações (por predefinição: diretório irmão de <data>_auto_annotate_labels).

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

A anotação automática 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. Esse recurso é especialmente benéfico para pesquisadores e desenvolvedores que trabalham com grandes coleções de imagens, pois permite que se concentrem no desenvolvimento e na avaliação dos modelos, em vez da anotação manual.

Citações e agradecimentos#

Se achares o SAM útil no teu trabalho de investigação ou desenvolvimento, por favor 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 expressar nossa gratidão à Meta AI por criar e manter este recurso valioso para a comunidade de visão computacional.

Perguntas frequentes#

  • O Segment Anything Model (SAM) da Meta é um modelo de segmentação de imagens revolucionário concebido para tarefas de segmentação baseada em comandos. Ele tira partido de uma arquitetura avançada, incluindo codificadores de imagem e de comandos combinados com um descodificador de máscaras leve, para gerar máscaras de segmentação de alta qualidade a partir de vários comandos, tais como indicações espaciais ou de texto. Treinado no extensivo conjunto de dados SA-1B, o SAM destaca-se no desempenho em zero-shot, adaptando-se a novas distribuições de imagens e tarefas sem conhecimento prévio.

  • Você pode usar o Modelo de Segmentação de Qualquer Coisa (SAM) para segmentação de imagens executando inferência com vários prompts, como caixas delimitadoras ou pontos. Veja 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]])

    Como alternativa, você pode executar a inferência com o SAM na interface de linha de comando (CLI):

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

    Para obter instruções de uso mais detalhadas, visite a seção de Segmentação.

  • Em comparação com os modelos YOLO, variantes do SAM, como SAM-b, MobileSAM e FastSAM-s, geralmente são maiores e mais lentas, mas oferecem recursos exclusivos de segmentação zero-shot. Por exemplo, o 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 eficiente do ponto de vista computacional, enquanto os modelos SAM se destacam em tarefas de segmentação flexíveis, orientadas 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. Veja 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 para suas imagens e argumentos opcionais para os modelos de detecção pré-treinados e de segmentação SAM, além das especificações do dispositivo e do diretório de saída. Para obter um guia completo, consulte Anotação automática.

  • O SAM é treinado no extenso conjunto de dados SA-1B, que reúne 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é o momento, fornecendo dados de treinamento de alta qualidade e diversidade e garantindo um desempenho zero-shot impressionante em diversas tarefas de segmentação. Para obter mais detalhes, visite a seção de Conjuntos de dados.

Comentários