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 a imagem inteira 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 segmento 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-01-16
Autores: glenn-jocher (9), ChaoningZhang (1), Laughing-q (1)

Coment√°rios