Modelo Segment Anything (SAM)#
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.
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.
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 modelo | Pesos pré-treinados | Tarefas suportadas | Treinamento | Validação | Inferência | Exportar |
|---|---|---|---|---|---|---|
| SAM base | sam_b.pt | Segmentação de instâncias | ❌ | ❌ | ✅ | ❌ |
| SAM grande | sam_l.pt | Segmentaçã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#
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]])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).
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)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.
- Para ver mais argumentos de
Segment everything, consulta a referência dePredictor/generate.
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:
| Modelo | Tamanho (MB) | Parâmetros (M) | Velocidade (CPU) (ms/im) |
|---|---|---|---|
| Meta SAM-b | 375 | 93.7 | 41703 |
| MobileSAM | 40.7 | 10.1 | 23802 |
| FastSAM-s com backbone YOLOv8 | 23.9 | 11.8 | 58.0 |
| Ultralytics YOLOv8n-seg | 7.1 (52.8x menor) | 3.4 (27.6x menos) | 24.8 (1682x mais rápido) |
| Ultralytics YOLO11n-seg | 6.2 (60.5x menor) | 2.9 (32.3x menos) | 24.3 (1716x mais rápido) |
| Ultralytics YOLO26n-seg | 6.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:
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:
from ultralytics.data.annotator import auto_annotate
auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="sam_b.pt")| Argumento | Tipo | Padrão | Descrição |
|---|---|---|---|
data | str | obrigatório | Caminho para o diretório que contém as imagens de destino para anotação ou segmentação. |
det_model | str | 'yolo26x.pt' | Caminho para o modelo de detecção YOLO usado na detecção inicial de objetos. |
sam_model | str | 'sam_b.pt' | Caminho para o modelo SAM usado na segmentação (compatível com pesos de SAM, SAM 2, MobileSAM e SAM 3). |
device | str | '' | Dispositivo de computação (por exemplo, 'cuda:0', 'cpu' ou '' para detecção automática do dispositivo). |
conf | float | 0.25 | Limite de confiança para a detecção YOLO, usado para filtrar detecções fracas. |
iou | float | 0.45 | Limite de IoU para a supressão não máxima, usada para filtrar caixas sobrepostas. |
imgsz | int | 640 | Tamanho de entrada para redimensionar as imagens (arredondado para cima até um múltiplo de 32, se necessário). |
max_det | int | 300 | Número máximo de detecções por imagem para economizar memória. |
classes | list[int] | None | Lista de índices de classes a detectar (por exemplo, [0, 1] para pessoa e bicicleta). |
output_dir | str | None | Diretó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:
@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.jpgPara 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.