Saltar para o conteúdo

Modelo rápido de qualquer segmento (FastSAM)

O Fast Segment Anything Model (FastSAM) é uma nova solução baseada em CNN em tempo real 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, o que o torna uma escolha prática para uma variedade de tarefas de visão.



Ver: Rastreio de objectos utilizando FastSAM com Ultralytics

Arquitetura de modelos

Descrição geral da arquitetura do Fast Segment Anything Model (FastSAM)

Visão geral

FastSAM foi concebido para resolver as limitações do modelo Segment Anything Model (SAM), um modelo Transformer pesado com requisitos substanciais em termos de recursos computacionais. O FastSAM separa a tarefa de segmentar qualquer coisa em duas fases 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 fase, produz a região de interesse correspondente ao pedido.

Caraterísticas principais

  1. 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.

  2. Eficiência e desempenho: FastSAM oferece uma redução significativa das exigências computacionais e de recursos sem comprometer a qualidade do desempenho. Atinge um desempenho comparável ao de SAM mas com recursos computacionais drasticamente reduzidos, permitindo a aplicação em tempo real.

  3. Segmentação guiada por instruções: FastSAM pode segmentar qualquer objeto numa imagem guiada por várias instruções possíveis de interação com o utilizador, proporcionando flexibilidade e adaptabilidade em diferentes cenários.

  4. 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.

  5. Resultados competitivos em benchmarks: Na tarefa de proposta de objectos no MS COCO, o FastSAM obtém pontuações elevadas a uma velocidade significativamente mais rápida do que SAM num único NVIDIA RTX 3090, demonstrando a sua eficiência e capacidade.

  6. 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.

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

Prever a utilização

Para efetuar deteção de objectos numa imagem, utilize a função predict como mostrado abaixo:

Exemplo

from ultralytics import FastSAM

# 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)

# Run inference with bboxes prompt
results = model(source, bboxes=[439, 437, 524, 709])

# Run inference with points prompt
results = model(source, points=[[200, 200]], labels=[1])

# Run inference with texts prompt
results = model(source, texts="a photo of a dog")

# Run inference with bboxes and points and texts prompt at the same time
results = model(source, bboxes=[439, 437, 524, 709], points=[[200, 200]], labels=[1], texts="a photo of a dog")
# Load a FastSAM model and segment everything with it
yolo segment predict model=FastSAM-s.pt source=path/to/bus.jpg imgsz=640

Este snippet demonstra a simplicidade de carregar um modelo pré-treinado e executar uma previsão numa imagem.

Exemplo do FastSAMPredictor

Desta forma, pode executar a inferência na imagem e obter todos os segmentos results uma vez e executar a inferência de prompts várias vezes sem executar a inferência várias vezes.

from ultralytics.models.fastsam import FastSAMPredictor

# Create FastSAMPredictor
overrides = dict(conf=0.25, task="segment", mode="predict", model="FastSAM-s.pt", save=False, imgsz=1024)
predictor = FastSAMPredictor(overrides=overrides)

# Segment everything
everything_results = predictor("ultralytics/assets/bus.jpg")

# Prompt inference
bbox_results = predictor.prompt(everything_results, bboxes=[[200, 200, 300, 300]])
point_results = predictor.prompt(everything_results, points=[200, 200])
text_results = predictor.prompt(everything_results, texts="a photo of a dog")

Nota

Todos os devolvidos results nos exemplos anteriores são Resultados que permite aceder facilmente às máscaras previstas e à imagem de origem.

Utilização de Val

A validação do modelo num conjunto de dados pode ser feita da seguinte forma:

Exemplo

from ultralytics import FastSAM

# Create a FastSAM model
model = FastSAM("FastSAM-s.pt")  # or FastSAM-x.pt

# Validate the model
results = model.val(data="coco8-seg.yaml")
# Load a FastSAM model and validate it on the COCO8 example dataset at image size 640
yolo segment val model=FastSAM-s.pt data=coco8.yaml imgsz=640

Tenha em atenção que o FastSAM apenas suporta a deteção e segmentação de uma única classe de objeto. Isto significa que irá reconhecer e segmentar todos os objectos como sendo da mesma classe. Por conseguinte, ao preparar o conjunto de dados, é necessário converter todos os IDs de categoria de objeto para 0.

Utilização da faixa

Para efetuar o seguimento de objectos numa imagem, utilize a função track como mostrado abaixo:

Exemplo

from ultralytics import FastSAM

# Create a FastSAM model
model = FastSAM("FastSAM-s.pt")  # or FastSAM-x.pt

# Track with a FastSAM model on a video
results = model.track(source="path/to/video.mp4", imgsz=640)
yolo segment track model=FastSAM-s.pt source="path/to/video/file.mp4" imgsz=640

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 pode seguir para utilizar FastSAM:

Instalação

  1. Clonar o repositório FastSAM :

    git clone https://github.com/CASIA-IVA-Lab/FastSAM.git
    
  2. Criar e ativar um ambiente Conda com Python 3.9:

    conda create -n FastSAM python=3.9
    conda activate FastSAM
    
  3. Navegue até ao repositório clonado e instale os pacotes necessários:

    cd FastSAM
    pip install -r requirements.txt
    
  4. Instalar o modelo CLIP:

    pip install git+https://github.com/ultralytics/CLIP.git
    

Exemplo de utilização

  1. Descarregar um modelo de ponto de controlo.

  2. Utilizar FastSAM para inferência. Exemplo de comandos:

    • Segmentar tudo numa imagem:

      python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg
      
    • Segmentar 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"
      
    • Segmentar objectos dentro de uma caixa delimitadora (fornecer 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]"
      
    • Segmentar objectos perto de pontos específicos:

      python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --point_prompt "[[520,360],[620,300]]" --point_label "[1,0]"
      

Além disso, pode experimentar FastSAM através de uma demonstração Colab ou na demonstração WebHuggingFace para obter 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:

@misc{zhao2023fast,
      title={Fast Segment Anything},
      author={Xu Zhao and Wenchao Ding and Yongqi An and Yinglong Du and Tao Yu and Min Li and Ming Tang and Jinqiao Wang},
      year={2023},
      eprint={2306.12156},
      archivePrefix={arXiv},
      primaryClass={cs.CV}
}

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.

FAQ

O que é FastSAM e em que é que difere de SAM?

FastSAM, abreviatura de Fast Segment Anything Model, é uma solução baseada numa rede neural convolucional (CNN) em tempo real, concebida para reduzir as exigências computacionais, mantendo um elevado desempenho em tarefas de segmentação de objectos. Ao contrário do Segment Anything Model (SAM), que utiliza uma arquitetura mais pesada baseada no Transformer, o FastSAM tira partido do Ultralytics YOLOv8 -seg para uma segmentação eficiente de instâncias em duas fases: segmentação de todas as instâncias seguida de uma seleção guiada por um pedido.

Como é que o FastSAM consegue um desempenho de segmentação em tempo real?

FastSAM alcança a segmentação em tempo real ao dissociar a tarefa de segmentação em segmentação de todas as instâncias com YOLOv8-seg e fases de seleção guiadas por estímulos. Ao utilizar a eficiência computacional das CNNs, o FastSAM oferece reduções significativas nas exigências computacionais e de recursos, mantendo um desempenho competitivo. Esta abordagem de duas fases permite que o FastSAM forneça uma segmentação rápida e eficiente, adequada para aplicações que requerem resultados rápidos.

Quais são as aplicações práticas do FastSAM?

FastSAM é prático para uma variedade de tarefas de visão por computador que requerem um desempenho de segmentação em tempo real. As aplicações incluem:

  • Automação industrial para controlo e garantia da qualidade
  • Análise de vídeo em tempo real para segurança e vigilância
  • Veículos autónomos para deteção e segmentação de objectos
  • Imagens médicas para tarefas de segmentação precisas e rápidas

A sua capacidade de lidar com vários avisos de interação do utilizador torna o FastSAM adaptável e flexível para diversos cenários.

Como é que utilizo o modelo FastSAM para inferência em Python?

Para utilizar FastSAM para inferência em Python, pode seguir o exemplo abaixo:

from ultralytics import FastSAM

# 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)

# Run inference with bboxes prompt
results = model(source, bboxes=[439, 437, 524, 709])

# Run inference with points prompt
results = model(source, points=[[200, 200]], labels=[1])

# Run inference with texts prompt
results = model(source, texts="a photo of a dog")

# Run inference with bboxes and points and texts prompt at the same time
results = model(source, bboxes=[439, 437, 524, 709], points=[[200, 200]], labels=[1], texts="a photo of a dog")

Para mais informações sobre os métodos de inferência, consulte a secção Prever utilização da documentação.

Que tipos de prompts o FastSAM suporta para tarefas de segmentação?

FastSAM suporta vários tipos de avisos para orientar as tarefas de segmentação:

  • Tudo Prompt: Gera segmentação para todos os objectos visíveis.
  • Prompt de caixa delimitadora (BBox): Segmenta objetos dentro de uma caixa delimitadora especificada.
  • Texto de solicitação: Utiliza um texto descritivo para segmentar objectos que correspondam à descrição.
  • Prompt de ponto: Segmenta objectos perto de pontos específicos definidos pelo utilizador.

Esta flexibilidade permite que o FastSAM se adapte a uma vasta gama de cenários de interação com o utilizador, aumentando a sua utilidade em diferentes aplicações. Para mais informações sobre a utilização destes avisos, consulte a secção Caraterísticas principais.

📅C riado há 1 ano ✏️ Atualizado há 2 meses

Comentários