Salta para o conteúdo

Modelo de qualquer segmento (SAM)

Welcome to the frontier of image segmentation with the Segment Anything Model, or SAM. This revolutionary model has changed the game by introducing promptable image segmentation with real-time performance, setting new standards in the field.

Introdução a SAM: O modelo do Segmento Qualquer Coisa

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 extenso conjunto de dados SA-1B, que contém mais de mil milhões de máscaras espalhadas por 11 milhões de imagens cuidadosamente seleccionadas, 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 inúmeras experiências, são de elevada qualidade e diversidade. As imagens são agrupadas por número de máscaras por imagem para visualização (há ∼100 máscaras por imagem em média).

Principais características do modelo de qualquer segmento (SAM)

  • Tarefa de Segmentação Promptable: SAM foi concebido com uma tarefa de segmentação 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 poderoso codificador de imagem, um codificador de solicitação e um decodificador 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.
  • Zero-Shot Performance: SAM displays outstanding zero-shot performance across various segmentation tasks, making it a ready-to-use tool for diverse applications with minimal need for prompt engineering.

Para uma análise aprofundada do modelo Segment Anything e do conjunto de dados SA-1B, visita o sítio Web do Segment Anything e consulta 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

The Segment Anything Model can be employed for a multitude of downstream tasks that go beyond its training data. This includes edge detection, object proposal generation, instance segmentation, and preliminary text-to-mask prediction. With prompt engineering, SAM can swiftly adapt to new tasks and data distributions in a zero-shot manner, establishing it as a versatile and potent tool for all your image segmentation needs.

SAM exemplo de previsão

Segmento com prompts

Segmenta 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 points prompt
results = model("ultralytics/assets/zidane.jpg", points=[900, 370], labels=[1])

Segmenta tudo

Segmenta 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 toda a imagem se não passares nenhum prompts (bboxes/pontos/máscaras).

Exemplo de SAMPredictor

Desta forma, podes 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])
results = predictor(points=[900, 370], labels=[1])

# Reset image
predictor.reset_image()

Segmenta 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 acima são Resultados que permite aceder facilmente às máscaras previstas e à imagem de origem.

SAM comparação vs YOLOv8

Aqui comparamos o modelo SAM mais pequeno do Meta, SAM-b, com o modelo de segmentação mais pequeno do Ultralytics , YOLOv8n-seg:

Modelo Size
(MB)
Parameters
(M)
Speed (CPU)
(ms/im)
Meta SAM-b 358 94.7 51096
MobileSAM 40.7 10.1 46122
FastSAM-s com YOLOv8 backbone 23.7 11.8 115
Ultralytics YOLOv8n-seg 6.7 (53.4x smaller) 3.4 (27.9x less) 59 (866x faster)

Esta comparação mostra as diferenças de ordem de grandeza nas dimensões e velocidades dos modelos. Embora o SAM apresente capacidades únicas para segmentação automática, não é um concorrente direto dos modelos de segmentos do YOLOv8 , que são mais pequenos, mais rápidos e mais eficientes.

Os testes foram efectuados num Macbook Apple M2 2023 com 16 GB de RAM. 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 YOLOv8n-seg
model = YOLO("yolov8n-seg.pt")
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 rotulagem manual morosa.

Gera o teu conjunto de dados de segmentação utilizando um modelo de deteção

Para anotar automaticamente o teu conjunto de dados com a estrutura Ultralytics , utiliza o auto_annotate como se mostra abaixo:

Exemplo

from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolov8x.pt", sam_model="sam_b.pt")
Argumenta Tipo Descrição Predefinição
data str Caminho para uma pasta que contém imagens a serem anotadas.
det_model str, opcional Modelo de deteção YOLO pré-treinado. Usa como predefinição 'yolov8x.pt'. 'yolov8x.pt'
sam_model str, opcional Modelo de segmentação SAM pré-treinado. Usa como predefinição 'sam_b.pt'. 'sam_b.pt'
device str, opcional Dispositivo em que executa os modelos. Usa por defeito uma cadeia de caracteres vazia (CPU ou GPU, se disponível).
output_dir str, Nenhum, opcional Diretório para guardar os resultados anotados. A predefinição é uma pasta 'labels' no mesmo diretório que 'data'. None

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 benéfica 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 considerares o SAM útil no teu trabalho de investigação ou desenvolvimento, considera 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}
}

We would like to express our gratitude to Meta AI for creating and maintaining this valuable resource for the computer vision community.

FAQ

O que é o Segment Anything Model (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 com instruções. Aproveita a arquitetura avançada, incluindo 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. Sabe mais aqui.

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

Podes 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. Vê aqui 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])

Em alternativa, podes 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, visita a secção Segmentação.

Como é que SAM e YOLOv8 se comparam em termos de desempenho?

Em comparação com YOLOv8, os modelos SAM como SAM-b e FastSAM-s são maiores e mais lentos, mas oferecem capacidades únicas de segmentação automática. Por exemplo, Ultralytics YOLOv8n -seg é 53,4 vezes menor e 866 vezes mais rápido que SAM-b. No entanto, o desempenho de zero-shot do SAM torna-o altamente flexível e eficiente em tarefas diversas e não treinadas. Saiba mais sobre as comparações de desempenho entre SAM e YOLOv8 aqui.

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

UltralyticsO 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. Vê aqui 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 as 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 is trained on the extensive SA-1B dataset which comprises over 1 billion masks across 11 million images. SA-1B is the largest segmentation dataset to date, providing high-quality and diverse training data, ensuring impressive zero-shot performance in varied segmentation tasks. For more details, visit the Dataset section.


📅 Created 11 months ago ✏️ Updated 16 days ago

Comentários