Saltar para o conteúdo

Modelo de qualquer segmento (SAM)

Como utilizar o Segment Anything In Colab

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

Introdução a SAM: O modelo Segment Anything

O Segment Anything Model, ou SAM, é um modelo de segmentação de imagem de vanguarda que permite uma segmentação imediata, proporcionando uma versatilidade sem paralelo nas tarefas de análise de imagem. SAM constitui o coração da iniciativa Segment Anything, um projeto inovador que introduz um novo modelo, tarefa e conjunto de dados para a segmentação de imagens.

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

Imagem de amostra do conjunto de dados SA-1B Exemplo de imagens. Imagens do conjunto de dados sobrepostas a 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 com proteção da privacidade e 1,1 mil máscaras de segmentação de alta qualidade. Estas máscaras foram anotadas de forma totalmente automática por SAM e, conforme verificado por avaliações humanas e numerosas experiências, são de elevada 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 caraterísticas do modelo de qualquer segmento (SAM)

  • Tarefa de Segmentação de Promptable: SAM foi concebido com uma tarefa de segmentação de promptable em mente, permitindo-lhe gerar máscaras de segmentação válidas a partir de qualquer prompt dado, como pistas espaciais ou de texto que identifiquem um objeto.
  • Arquitetura avançada: O Segment Anything Model emprega um potente codificador de imagem, um codificador de solicitação e um descodificador de máscara leve. Esta arquitetura única permite uma solicitação flexível, o cálculo da máscara em tempo real e a consciência da ambiguidade nas tarefas de segmentação.
  • O conjunto de dados SA-1B: Introduzido pelo projeto Segment Anything, o conjunto de dados SA-1B apresenta mais de mil 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 formação diversificada e em grande escala.
  • Desempenho Zero-Shot: SAM apresenta um excelente desempenho zero-shot em várias tarefas de segmentação, tornando-o numa ferramenta pronta a utilizar para diversas aplicações com uma necessidade mínima de engenharia imediata.

Para uma análise aprofundada do modelo Segment Anything e do conjunto de dados SA-1B, visite o sítio Web do Segment Anything e consulte o documento de investigação Segment Anything.

Modelos disponíveis, tarefas suportadas e modos de funcionamento

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 funcionamento como Inferência, Validação, Treino e Exportação, indicados por emojis ✅ para modos suportados e emojis ❌ para modos não suportados.

Tipo de modelo Pesos pré-treinados Tarefas suportadas Inferência Validação Formação Exportação
SAM base sam_b.pt Segmentação de instâncias
SAM grande sam_l.pt Segmentação de instâncias

Como utilizar SAM: Versatilidade e potência na segmentação de imagens

O modelo Segment Anything pode ser utilizado para uma série de tarefas a jusante que vão para além dos seus dados de treino. Isto inclui a deteção de arestas, a geração de propostas de objectos, a segmentação de instâncias e a previsão preliminar de texto para máscara. Com uma engenharia rápida, o SAM pode adaptar-se rapidamente a novas tarefas e distribuições de dados de uma forma rápida, estabelecendo-o como uma ferramenta versátil e potente para todas as suas necessidades de segmentação de imagens.

SAM exemplo de previsão

Segmento com prompts

Segmentar a imagem com as instruções dadas.

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")
# Run inference with a SAM model
yolo predict model=sam_b.pt source=path/to/image.jpg
  • A lógica aqui é segmentar a imagem inteira se não passar nenhum prompts (bboxes/pontos/máscaras).

Exemplo de SAMPredictor

Desta forma, pode definir a imagem uma vez e executar a inferência de prompts várias vezes sem executar o codificador de imagem várias 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 devolvidos results nos exemplos anteriores são Resultados que permite aceder facilmente às máscaras previstas e à imagem de origem.

Comparação SAM vs YOLO

Aqui comparamos o modelo SAM da Meta com o modelo de segmentação mais pequeno Ultralytics , YOLO11n-seg:

Modelo Tamanho
(MB)
Parâmetros
(M)
Velocidade (CPU)
(ms/im)
Meta SAM-b 375 93.7 49401
MobileSAM 40.7 10.1 25381
FastSAM combackbone YOLOv8 23.7 11.8 55.9
Ultralytics YOLOv8n-seg 6,7 (11,7x mais pequeno) 3,4 (menos 11,4x) 24,5 (1061x mais rápido)
Ultralytics YOLO11n-seg 5,9 (13,2x mais pequeno) 2,9 (13,4x menos) 30.1 (864x 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 SAM forneça capacidades únicas de segmentação automática, os modelos YOLO , particularmente YOLOv8n e o YOLO11n-seg, são significativamente mais pequenos, mais rápidos e mais eficientes do ponto de vista computacional.

Testes efectuados num Apple M4 Pro de 2025 com 24 GB de RAM utilizando torch==2.6.0 e ultralytics==8.3.90. Para reproduzir este teste:

Exemplo

from ultralytics import ASSETS, SAM, YOLO, FastSAM

# Profile SAM2-t, SAM2-b, SAM-b, MobileSAM
for file in ["sam_b.pt", "sam2_b.pt", "sam2_t.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
for file_name in ["yolov8n-seg.pt", "yolo11n-seg.pt"]:
    model = YOLO(file_name)
    model.info()
    model(ASSETS)

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

A anotação automática é uma caraterística essencial do SAM, permitindo aos utilizadores gerar um conjunto de dados de segmentação utilizando um modelo de deteção pré-treinado. Esta funcionalidade permite a anotação rápida e exacta de um grande número de imagens, evitando a necessidade de uma marcação manual demorada.

Gerar o conjunto de dados de segmentação utilizando um modelo de deteção

Para anotar automaticamente o seu conjunto de dados com a estrutura Ultralytics , utilize o auto_annotate como mostrado abaixo:

Exemplo

from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolo11x.pt", sam_model="sam_b.pt")
Argumento Tipo Predefinição Descrição
data str necessário Caminho para o diretório que contém imagens alvo para anotação ou segmentação.
det_model str 'yolo11x.pt' YOLO caminho do modelo de deteção para a deteção inicial de objectos.
sam_model str 'sam_b.pt' Caminho do modelo SAM para segmentação (suporta modelos SAM, variantes SAM2 e mobile_sam).
device str '' Dispositivo de cálculo (por exemplo, 'cuda:0', 'cpu', ou '' para a deteção automática do dispositivo).
conf float 0.25 YOLO limiar de confiança da deteção para filtrar as detecções fracas.
iou float 0.45 Limiar IoU para Supressão Não Máxima para filtrar caixas sobrepostas.
imgsz int 640 Tamanho de entrada para redimensionar 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 classe a detetar (por exemplo,, [0, 1] para pessoa e bicicleta).
output_dir str None Guardar o diretório para as anotações (a predefinição é './labels' em relação ao caminho dos dados).

O auto_annotate utiliza o caminho para as suas 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 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. Esta funcionalidade é especialmente vantajosa para investigadores e programadores que lidam com grandes colecções de imagens, uma vez que lhes permite concentrarem-se no desenvolvimento e avaliação de modelos, em vez de na anotação manual.

Citações e agradecimentos

Se o site SAM for útil no seu trabalho de investigação ou desenvolvimento, considere a possibilidade de citar o nosso documento:

@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 pela criação e manutenção deste valioso recurso para a comunidade da visão computacional.

FAQ

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

O Segment Anything Model (SAM) da Ultralytics é um modelo revolucionário de segmentação de imagens concebido para tarefas de segmentação que podem ser solicitadas. Aproveita uma arquitetura avançada, que inclui codificadores de imagem e de estímulo, combinados com um descodificador de máscara leve, para gerar máscaras de segmentação de alta qualidade a partir de vários estímulos, como pistas espaciais ou de texto. Treinado no extenso conjunto de dados SA-1B, o SAM é excelente no desempenho de zero-shot, adaptando-se a novas distribuições de imagens e tarefas sem conhecimento prévio. Saiba mais aqui.

Como é que posso utilizar o Segment Anything Model (SAM) para segmentação de imagens?

Pode utilizar o Segment Anything Model (SAM) para a segmentação de imagens, executando a inferência com vários avisos, como caixas delimitadoras ou pontos. Aqui está um exemplo utilizando 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]])

Em alternativa, pode executar a inferência com SAM na interface de linha de comandos (CLI):

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

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

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

Em comparação com os modelos YOLO , as variantes SAM , como SAM, SAM2, MobileSAM e FastSAM, são normalmente maiores e mais lentas, mas oferecem capacidades únicas de segmentação de zero-shot. Por exemplo, o Ultralytics YOLOv8n é 11,7 vezes mais pequeno e 1069 vezes mais rápido do que o modelo SAM original do Meta, realçando a vantagem significativa do YOLO em termos de velocidade e eficiência. Da mesma forma, o mais recente modelo YOLO11n-seg tem um tamanho ainda mais pequeno e mantém uma velocidade de inferência impressionante. Isto torna os modelos YOLO ideais para aplicações que requerem uma segmentação rápida, leve e computacionalmente eficiente, enquanto os modelos SAM se destacam em tarefas de segmentação flexíveis, com possibilidade de resposta rápida e sem disparos.

Como é que posso anotar automaticamente o meu conjunto de dados utilizando SAM?

Ultralytics' SAM oferece uma funcionalidade de anotação automática que permite gerar conjuntos de dados de segmentação utilizando um modelo de deteção pré-treinado. Aqui está um exemplo em Python:

from ultralytics.data.annotator import auto_annotate

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

Esta função utiliza o caminho para as suas imagens e argumentos opcionais para modelos de deteção pré-treinados e de segmentação SAM , juntamente com especificações do dispositivo e do diretório de saída. Para obter um guia completo, consulte Anotação automática.

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

SAM é treinado no extenso conjunto de dados SA-1B, que inclui mais de mil milhões 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 formação de alta qualidade e diversificados, garantindo um desempenho impressionante de zero disparos em tarefas de segmentação variadas. Para mais informações, visite a secção Conjunto de dados.

📅C riado há 1 ano ✏️ Atualizado há 12 dias

Comentários