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 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.
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.
- 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.
- Mais argumentos adicionais para
Segment everything
verPredictor/generate
Referência.
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 (MB) |
Parâmetros (M) |
Velocidade (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 mais pequeno) | 3,4 (27,9x menos) | 59 (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 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 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
Argumento | Tipo | Descrição | Predefinição |
---|---|---|---|
data |
str |
Caminho para uma pasta que contém imagens a serem anotadas. | |
det_model |
str , facultativo |
Modelo de deteção YOLO pré-treinado. A predefinição é 'yolo11x.pt'. | 'yolo11x.pt' |
sam_model |
str , facultativo |
Modelo de segmentação SAM pré-treinado. A predefinição é 'sam_b.pt'. | 'sam_b.pt' |
device |
str , facultativo |
Dispositivo no qual os modelos devem ser executados. A predefinição é uma cadeia de caracteres vazia (CPU ou GPU, se disponível). | |
conf |
float , facultativo |
Limiar de confiança para o modelo de deteção; a predefinição é 0,25. | 0.25 |
iou |
float , facultativo |
Limiar IoU para filtrar caixas sobrepostas nos resultados da deteção; a predefinição é 0,45. | 0.45 |
imgsz |
int , facultativo |
Dimensão de redimensionamento da imagem de entrada; a predefinição é 640. | 640 |
max_det |
int , facultativo |
Limita as detecções por imagem para controlar as saídas em cenas densas. | 300 |
classes |
list , facultativo |
Filtra as previsões para os IDs de classe especificados, devolvendo apenas as detecções relevantes. | None |
output_dir |
str , Nenhum, facultativo |
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 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):
Para obter instruções de utilização mais detalhadas, visite 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, o Ultralytics YOLOv8n -seg é 53,4 vezes mais pequeno e 866 vezes mais rápido do que o 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?
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.