Salta para o conte√ļdo

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.



Observa: Object Tracking using FastSAM with Ultralytics

Arquitetura do modelo

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

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

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

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

  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.

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="./")
# 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 em uma imagem.

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

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

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

Instalação

  1. Clona o repositório FastSAM :

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

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

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

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

Exemplo de utilização

  1. Descarrega um modelo de ponto de controlo.

  2. Utiliza FastSAM para inferência. Exemplos de comandos:

    • Segmenta tudo numa imagem:

      python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg
      
    • 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:

      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, 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:

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



Created 2023-11-12, Updated 2024-06-10
Authors: glenn-jocher (11), RizwanMunawar (2), Laughing-q (1), berry-ding (1)

Coment√°rios