Modelo rápido de qualquer segmento (FastSAM)
O Fast Segment Anything Model (FastSAM) é uma solução nova e em tempo real baseada em CNN para a tarefa Segment Anything. Esta tarefa foi concebida para segmentar qualquer objeto dentro de uma imagem com base em vários avisos possíveis de interação do utilizador. FastSAM reduz significativamente as exigências computacionais, mantendo um desempenho competitivo, tornando-o uma escolha prática para uma variedade de tarefas de visão.
Visão geral
FastSAM foi concebido para resolver as limitações do Segment Anything Model (SAM), um modelo pesado do Transformer com requisitos substanciais de recursos computacionais. O FastSAM separa a tarefa de segmentar qualquer coisa em duas etapas sequenciais: segmentação de todas as instâncias e seleção guiada por pedido. A primeira fase utiliza YOLOv8-seg para produzir as máscaras de segmentação de todas as instâncias da imagem. Na segunda etapa, produz a região de interesse correspondente à solicitação.
Características principais
-
Solução em tempo real: Ao aproveitar a eficiência computacional das CNNs, o FastSAM fornece uma solução em tempo real para a tarefa de segmentar qualquer coisa, tornando-a valiosa para aplicações industriais que exigem resultados rápidos.
-
Eficiência e desempenho: FastSAM oferece uma redução significativa das exigências computacionais e de recursos sem comprometer a qualidade do desempenho. Consegue um desempenho comparável ao de SAM , mas com recursos computacionais drasticamente reduzidos, permitindo a aplicação em tempo real.
-
Segmentação guiada por instruções: FastSAM pode segmentar qualquer objeto dentro de uma imagem guiada por várias instruções possíveis de interação com o utilizador, proporcionando flexibilidade e adaptabilidade em diferentes cenários.
-
Baseado em YOLOv8 -seg: FastSAM é baseado em YOLOv8-seg, um detetor de objectos equipado com um ramo de segmentação de instâncias. Isto permite-lhe produzir eficazmente as máscaras de segmentação de todas as instâncias de uma imagem.
-
Resultados competitivos em benchmarks: Na tarefa de proposta de objectos no MS COCO, o FastSAM atinge pontuações elevadas a uma velocidade significativamente mais rápida do que SAM em uma única NVIDIA RTX 3090, demonstrando sua eficiência e capacidade.
-
Aplicações práticas: A abordagem proposta fornece uma solução nova e prática para um grande número de tarefas de visão a uma velocidade realmente elevada, dezenas ou centenas de vezes mais rápida do que os métodos actuais.
-
Viabilidade da compressão de modelos: FastSAM demonstra a viabilidade de um caminho que pode reduzir significativamente o esforço computacional através da introdução de uma prévia artificial à estrutura, abrindo assim novas possibilidades para a arquitetura de modelos de grandes dimensões para tarefas gerais de visão.
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 |
---|---|---|---|---|---|---|
FastSAM-s | FastSAM-s.pt | Segmentação de instâncias | ✅ | ❌ | ❌ | ✅ |
FastSAM-x | FastSAM-x.pt | Segmentação de instâncias | ✅ | ❌ | ❌ | ✅ |
Exemplos de utilização
Os modelos FastSAM são fáceis de integrar nas suas aplicações Python . Ultralytics fornece comandos Python API e CLI fáceis de utilizar para simplificar o desenvolvimento.
Prevê a utilização
Para efetuar a deteção de objectos numa imagem, utiliza a função predict
como se mostra abaixo:
Exemplo
from ultralytics import FastSAM
from ultralytics.models.fastsam import FastSAMPrompt
# Define an inference source
source = 'path/to/bus.jpg'
# Create a FastSAM model
model = FastSAM('FastSAM-s.pt') # or FastSAM-x.pt
# Run inference on an image
everything_results = model(source, device='cpu', retina_masks=True, imgsz=1024, conf=0.4, iou=0.9)
# Prepare a Prompt Process object
prompt_process = FastSAMPrompt(source, everything_results, device='cpu')
# Everything prompt
ann = prompt_process.everything_prompt()
# Bbox default shape [0,0,0,0] -> [x1,y1,x2,y2]
ann = prompt_process.box_prompt(bbox=[200, 200, 300, 300])
# Text prompt
ann = prompt_process.text_prompt(text='a photo of a dog')
# Point prompt
# points default [[0,0]] [[x1,y1],[x2,y2]]
# point_label default [0] [1,0] 0:background, 1:foreground
ann = prompt_process.point_prompt(points=[[200, 200]], pointlabel=[1])
prompt_process.plot(annotations=ann, output='./')
Este snippet demonstra a simplicidade de carregar um modelo pré-treinado e executar uma previsão em uma imagem.
Utilização de Val
A validação do modelo num conjunto de dados pode ser feita da seguinte forma:
Exemplo
Tem em atenção que o FastSAM apenas suporta a deteção e segmentação de uma única classe de objeto. Isto significa que reconhece e segmenta todos os objectos como sendo da mesma classe. Por isso, ao preparar o conjunto de dados, tens de converter todos os IDs de categoria de objectos para 0.
Utilização da faixa
Para efetuar o seguimento de objectos numa imagem, utiliza a função track
como se mostra abaixo:
Exemplo
FastSAM Utilização oficial
FastSAM também está disponível diretamente a partir do repositório https://github.com/CASIA-IVA-Lab/FastSAM. Segue-se uma breve descrição dos passos típicos que podes seguir para utilizar FastSAM:
Instalação
- Clona o repositório FastSAM :
- Cria e ativa um ambiente Conda com Python 3.9:
- Navega até ao repositório clonado e instala os pacotes necessários:
- Instala o modelo CLIP:
Exemplo de utilização
-
Descarrega um modelo de ponto de controlo.
-
Utiliza FastSAM para inferência. Exemplos de comandos:
- Segmenta tudo numa imagem:
- Segmenta objectos específicos utilizando uma mensagem de texto:
python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --text_prompt "the yellow dog"
- Segmenta objectos dentro de uma caixa delimitadora (fornece coordenadas da caixa no formato xywh):
python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --box_prompt "[570,200,230,400]"
- Segmenta objectos perto de pontos específicos:
Além disso, podes experimentar FastSAM através de uma demonstração Colab ou na demonstração WebHuggingFace para uma experiência visual.
Citações e agradecimentos
Gostaríamos de agradecer aos autores de FastSAM pelas suas contribuições significativas no domínio da segmentação de instâncias em tempo real:
O artigo original FastSAM pode ser encontrado no arXiv. Os autores tornaram o seu trabalho publicamente disponível e a base de código pode ser acedida no GitHub. Agradecemos os seus esforços para fazer avançar o campo e tornar o seu trabalho acessível à comunidade em geral.
Criado em 2023-11-12, Atualizado em 2024-05-01
Autores: RizwanMunawar (1), glenn-jocher (8), Laughing-q (1), berry-ding (1)