Salta para o conteúdo

Modelo de qualquer segmento (SAM)

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 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.
  • Desempenho Zero-Shot: SAM apresenta um excelente desempenho zero-shot em várias tarefas de segmentação, tornando-o uma 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, 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

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 deteção de bordas, geração de propostas de objectos, segmentação de instâncias e 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, estabelecendo-o como uma ferramenta versátil e potente para todas as tuas necessidades de segmentação de imagens.

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
model('ultralytics/assets/zidane.jpg', bboxes=[439, 437, 524, 709])

# Run inference with points prompt
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)

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 Tamanho Parâmetros Velocidade (CPU)
Meta's SAM-b 358 MB 94.7 M 51096 ms/im
MobileSAM 40,7 MB 10.1 M 46122 ms/im
FastSAM-s com YOLOv8 backbone 23,7 MB 11.8 M 115 ms/im
Ultralytics YOLOv8n-seg 6,7 MB (53,4x mais pequeno) 3,4 M (27,9x menos) 59 ms/im (866x mais rápido)

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 FastSAM, SAM, YOLO

# Profile SAM-b
model = SAM('sam_b.pt')
model.info()
model('ultralytics/assets')

# Profile MobileSAM
model = SAM('mobile_sam.pt')
model.info()
model('ultralytics/assets')

# Profile FastSAM-s
model = FastSAM('FastSAM-s.pt')
model.info()
model('ultralytics/assets')

# Profile YOLOv8n-seg
model = YOLO('yolov8n-seg.pt')
model.info()
model('ultralytics/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
dados 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_modelo str, opcional Modelo de segmentação SAM pré-treinado. Usa como predefinição 'sam_b.pt'. 'sam_b.pt'
dispositivo str, opcional Dispositivo para executar os modelos. Usa como padrão uma string vazia (CPU ou GPU, se disponível).
output_dir str, None, opcional Diretório para guardar os resultados anotados. A predefinição é uma pasta 'labels' no mesmo diretório que 'data'. Não tens

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}
}

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.

palavras-chave: Segment Anything, Segment Anything Model, SAM, Meta SAM, segmentação de imagens, segmentação promptable, desempenho zero-shot, conjunto de dados SA-1B, arquitetura avançada, auto-anotação, Ultralytics, modelos pré-treinados, SAM base, SAM grande, segmentação de instâncias, visão computacional, IA, inteligência artificial, aprendizagem automática, anotação de dados, máscaras de segmentação, modelo de deteção, YOLO modelo de deteção, bibtex, Meta AI.



Criado em 2023-11-12, Atualizado em 2024-04-17
Autores: glenn-jocher (10), ChaoningZhang (1), Laughing-q (1)

Comentários