Link to this sectionSegment Anything Model (SAM)#
Bem-vindo à fronteira da segmentação de imagem com o Segment Anything Model, ou SAM. Este modelo revolucionário mudou o jogo ao introduzir a segmentação de imagem com prompts e desempenho em tempo real, estabelecendo novos padrões na área.
Link to this sectionIntrodução ao SAM: Segment Anything Model#
O Segment Anything Model, ou SAM, é um modelo de segmentação de imagem de ponta que permite a segmentação baseada em prompts, proporcionando uma versatilidade inigualável em tarefas de análise de imagem. O SAM forma 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 que ele se adapte a novas distribuições de imagem e tarefas sem conhecimento prévio, uma funcionalidade conhecida como zero-shot transfer. Treinado no vasto dataset 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 impressionante em zero-shot, superando resultados totalmente supervisionados anteriores em muitos casos.
Imagens de exemplo do SA-1B. Máscaras sobrepostas às imagens do dataset recém-introduzido SA-1B. O SA-1B contém 11M de imagens diversas, de alta resolução, licenciadas e que protegem a privacidade, além de 1.1B 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 avaliações humanas e inúmeros experimentos, possuem 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).
Link to this sectionPrincipais Funcionalidades do Segment Anything Model (SAM)#
- Tarefa de Segmentação com Prompts: O SAM foi projetado com uma tarefa de segmentação baseada em prompts em mente, permitindo que gere máscaras de segmentação válidas a partir de qualquer prompt fornecido, como pistas espaciais ou de texto que identifiquem um objeto.
- Arquitetura Avançada: O Segment Anything Model emprega um codificador de imagem potente, um codificador de prompts e um decodificador de máscara leve. Esta arquitetura única permite a criação flexível de prompts, cálculo de máscara em tempo real e consciência de ambiguidade em tarefas de segmentação.
- O Dataset SA-1B: Introduzido pelo projeto Segment Anything, o dataset SA-1B apresenta mais de 1 bilhão 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 diversificada e em grande escala.
- Desempenho Zero-Shot: O SAM exibe um excelente desempenho em zero-shot em várias tarefas de segmentação, tornando-se 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 dataset SA-1B, visita o GitHub do Segment Anything e consulta o artigo de investigação Segment Anything.
O SAM impulsiona a funcionalidade de anotação inteligente na Plataforma Ultralytics, permitindo a criação de máscaras inteligentes baseadas em cliques para uma rotulagem rápida de datasets. Consulta o guia de anotação para detalhes.
Link to this sectionModelos 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 Inferência, Validação, Treino e Exportação, indicados pelos emojis ✅ para modos suportados e ❌ para modos não suportados.
| Tipo de Modelo | Pesos Pré-treinados | Tarefas Suportadas | Inferência | Validação | Treino | Exportar |
|---|---|---|---|---|---|---|
| SAM base | sam_b.pt | Segmentação de Instância | ✅ | ❌ | ❌ | ❌ |
| SAM grande | sam_l.pt | Segmentação de Instância | ✅ | ❌ | ❌ | ❌ |
Link to this sectionComo usar o SAM: Versatilidade e Poder na Segmentação de Imagem#
O Segment Anything Model pode ser empregue numa multitude de tarefas a jusante que vão além dos seus dados de treino. Isto inclui deteção de arestas, geração de propostas de objetos, segmentação de instância e prediçã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 forma zero-shot, estabelecendo-se como uma ferramenta versátil e potente para todas as tuas necessidades de segmentação de imagem.
Link to this sectionExemplo de predição SAM#
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 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 toda caso não passes nenhuns prompts (bboxes/pontos/máscaras).
Desta forma podes configurar a imagem uma vez e executar a inferência de prompts múltiplas vezes sem executar o codificador de imagem várias vezes.
import cv2
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)Todos os results retornados nos exemplos acima são objetos Results que permitem aceder facilmente às máscaras preditas e à imagem de origem.
- More additional args for
Segment everythingseePredictor/generateReference.
Link to this sectionComparação SAM vs YOLO#
Aqui comparamos o modelo SAM-b da Meta com os modelos de segmentação da Ultralytics, incluindo o 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 |
| YOLOv8n-seg da Ultralytics | 7.1 (52.8x menor) | 3.4 (27.6x menos) | 24.8 (1682x mais rápido) |
| YOLO11n-seg da Ultralytics | 6.2 (60.5x menor) | 2.9 (32.3x menos) | 24.3 (1716x mais rápido) |
| YOLO26n-seg da Ultralytics | 6.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 do SAM e os modelos de segmentação YOLO. Enquanto o SAM fornece capacidades de segmentação automática únicas, os modelos YOLO, particularmente YOLOv8n-seg, YOLO11n-seg e YOLO26n-seg, são significativamente menores, mais rápidos e computacionalmente mais eficientes.
Velocidades do 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:
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)Link to this sectionAuto-Anotação: Um Caminho Rápido para Datasets de Segmentação#
A auto-anotação é uma funcionalidade chave do SAM, permitindo que os utilizadores gerem um dataset de segmentação usando um modelo de deteção pré-treinado. Esta funcionalidade permite uma anotação rápida e precisa de um grande número de imagens, evitando a necessidade de rotulagem manual demorada.
Link to this sectionGera o teu Dataset de Segmentação Usando um Modelo de Deteção#
Para auto-anotar o teu dataset 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 | Predefiniçã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 | 'yolo26x.pt' | Caminho do modelo de deteção YOLO para a deteção inicial de objetos. |
sam_model | str | 'sam_b.pt' | Caminho do modelo SAM para segmentação (suporta pesos SAM, SAM 2, MobileSAM e SAM 3). |
device | str | '' | Dispositivo de computação (ex: 'cuda:0', 'cpu', ou '' para deteção automática de dispositivo). |
conf | float | 0.25 | Limiar de confiança de detecção YOLO para filtrar detecções fracas. |
iou | float | 0.45 | Limiar de IoU para NMS (Non-Maximum Suppression) para filtrar caixas sobrepostas. |
imgsz | int | 640 | Tamanho de entrada para redimensionamento de 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 classes para detectar (ex.: [0, 1] para pessoa e bicicleta). |
output_dir | str | None | Diretório de salvamento para anotações (padrão: equivalente a <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 para executar os modelos e o diretório de saída para salvar os resultados anotados.
A autoanotaçã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. Este recurso é especialmente benéfico para pesquisadores e desenvolvedores que lidam com grandes coleções de imagens, pois permite que foquem no desenvolvimento e avaliação de modelos em vez da anotação manual.
Link to this sectionCitações e Agradecimentos#
Se você achar o SAM útil em sua pesquisa ou trabalho de desenvolvimento, considere citar nosso 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 expressar nossa gratidão à Meta AI por criar e manter este recurso valioso para a comunidade de visão computacional.
Link to this sectionFAQ#
Link to this sectionO que é o Segment Anything Model (SAM) da Ultralytics?#
O Segment Anything Model (SAM) da Ultralytics é um modelo revolucionário de segmentação de imagem projetado para tarefas de segmentação baseadas em prompts. Ele utiliza uma arquitetura avançada, incluindo codificadores de imagem e prompt combinados com um decodificador de máscara leve, para gerar máscaras de segmentação de alta qualidade a partir de vários prompts, como pistas espaciais ou de texto. Treinado no expansivo dataset SA-1B, o SAM se destaca no desempenho zero-shot, adaptando-se a novas distribuições de imagem e tarefas sem conhecimento prévio.
Link to this sectionComo posso usar o Segment Anything Model (SAM) para segmentação de imagem?#
Você pode usar o Segment Anything Model (SAM) para segmentação de imagem executando a inferência com vários prompts, como caixas delimitadoras (bounding boxes) ou pontos. Aqui está 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, 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.jpgPara instruções de uso mais detalhadas, visite a seção de Segmentação.
Link to this sectionComo os modelos SAM e YOLO se comparam em termos de desempenho?#
Comparados aos modelos YOLO, as variantes do SAM como SAM-b, MobileSAM e FastSAM-s são tipicamente 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 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, baseadas em prompts e zero-shot.
Link to this sectionComo posso auto-anotar meu conjunto de dados usando o SAM?#
O SAM da Ultralytics oferece um recurso de autoanotação 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 para suas imagens e argumentos opcionais para modelos de detecção pré-treinados e de segmentação SAM, juntamente com especificações de dispositivo e diretório de saída. Para um guia completo, veja Auto-Annotation.
Link to this sectionQuais conjuntos de dados são usados para treinar o Segment Anything Model (SAM)?#
O SAM é treinado no extenso dataset SA-1B, que compreende 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, fornecendo dados de treinamento diversos e de alta qualidade, garantindo um desempenho zero-shot impressionante em tarefas de segmentação variadas. Para mais detalhes, visite a seção de Dataset.