Ultralytics YOLO27:

Modelo Rápido de Segmentação de Qualquer Coisa (FastSAM)#

O Modelo Rápido de Segmentação de Qualquer Coisa (FastSAM) é uma solução inovadora baseada em CNN para a tarefa de Segment Anything, em tempo real. Esta tarefa foi concebida para segmentar qualquer objeto numa imagem com base em vários prompts de interação possíveis do utilizador. O FastSAM reduz significativamente as exigências computacionais, mantendo um desempenho competitivo, o que o torna uma opção prática para uma variedade de tarefas de visão computacional.



Watch: Object Tracking using FastSAM with Ultralytics

Arquitetura do modelo#

Visão geral da arquitetura do Modelo Rápido de Segmentação de Qualquer Coisa (FastSAM)

Visão geral#

O FastSAM foi concebido para resolver as limitações do Modelo de Segmentação de Qualquer Coisa (SAM), um modelo Transformer pesado com requisitos significativos de recursos computacionais. O FastSAM divide a tarefa de segmentar qualquer coisa em duas etapas sequenciais: segmentação de instâncias de todas as instâncias e seleção orientada por prompts. A primeira etapa utiliza o YOLOv8-seg para produzir as máscaras de segmentação de todas as instâncias na imagem. Na segunda etapa, gera a região de interesse correspondente ao prompt.

Principais funcionalidades#

  1. Solução em tempo real: Ao tirar partido da eficiência computacional das CNNs, o FastSAM fornece uma solução em tempo real para a tarefa de segmentar qualquer coisa, sendo valioso para aplicações industriais que exigem resultados rápidos.

  2. Eficiência e desempenho: O FastSAM reduz significativamente as exigências computacionais e de recursos sem comprometer a qualidade do desempenho. Alcança um desempenho comparável ao do SAM, mas com recursos computacionais drasticamente reduzidos, permitindo aplicações em tempo real.

  3. Segmentação orientada por prompts: O FastSAM pode segmentar qualquer objeto numa imagem com orientação de vários prompts de interação possíveis do utilizador, proporcionando flexibilidade e adaptabilidade em diferentes cenários.

  4. Baseado no YOLOv8-seg: O FastSAM baseia-se no YOLOv8-seg, um detetor de objetos 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 numa imagem.

  5. Resultados competitivos em benchmarks: Na tarefa de propostas de objetos no MS COCO, o FastSAM obtém pontuações elevadas a uma velocidade significativamente superior à do SAM numa única 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 computacional a uma velocidade muito elevada, dezenas ou centenas de vezes superior à dos métodos atuais.

  7. Viabilidade da compressão do modelo: O FastSAM demonstra a viabilidade de uma abordagem que pode reduzir significativamente o esforço computacional através da introdução de um prior artificial na estrutura, abrindo assim novas possibilidades para arquiteturas de modelos grandes destinadas a tarefas gerais de visão computacional.

Modelos disponíveis, tarefas compatíveis e modos de operação#

Esta tabela apresenta os modelos disponíveis com seus pesos pré-treinados específicos, as tarefas compatíveis e a compatibilidade com diferentes modos de operação, como Inferência, Validação, Treinamento e Exportação, indicados por emojis ✅ para modos compatíveis e emojis ❌ para modos incompatíveis.

Tipo de modeloPesos pré-treinadosTarefas suportadasTreinoValidaçãoInferênciaExportação
FastSAM-sFastSAM-s.ptSegmentação de instâncias
FastSAM-xFastSAM-x.ptSegmentação de instâncias

Comparação do FastSAM com o YOLO#

Aqui comparamos o FastSAM-s com as variantes do SAM da Meta e com os modelos de segmentação da Ultralytics, incluindo YOLO26n-seg:

ModeloTamanho
(MB)
Parâmetros
(M)
Velocidade (CPU)
(ms/im)
Meta SAM-b37593.741703
Meta SAM2-b16280.828867
Meta SAM2-t78.138.923430
MobileSAM40.710.123802
FastSAM-s com backbone YOLOv823.911.858.0
Ultralytics YOLOv8n-seg7,1 (11,0x menor)3,4 (11,4x menos)24,8 (945x mais rápido)
Ultralytics YOLO11n-seg6.2 (12.6x menor)2,9 (13,4x menos)24.3 (964x mais rápido)
Ultralytics YOLO26n-seg6,7 (11,7x menor)2.7 (14.4x menos)25,2 (930x mais rápido)

Esta comparação demonstra as diferenças substanciais entre as variantes do SAM e os modelos de segmentação YOLO em termos de tamanho e velocidade. Embora o SAM ofereça capacidades únicas de segmentação automática, os modelos YOLO, particularmente YOLOv8n-seg, YOLO11n-seg e YOLO26n-seg, são significativamente menores, mais rápidos e mais eficientes em termos computacionais.

As velocidades do SAM foram medidas com PyTorch, e as velocidades do YOLO foram medidas com ONNX Runtime. Os testes foram executados num Apple M4 Air de 2025 com 16 GB de RAM, usando torch==2.10.0, ultralytics==8.4.31 e onnxruntime==1.24.4. Para reproduzir este teste:

Exemplo
from ultralytics import ASSETS, SAM, YOLO, FastSAM

# Profile SAM2-t, SAM2-b, SAM-b, MobileSAM
for file in ["sam_b.pt", "sam2_b.pt", "sam2_t.pt", "mobile_sam.pt"]:
    model = SAM(file)
    model.info()
    model(ASSETS)

# Profile FastSAM-s
model = FastSAM("FastSAM-s.pt")
model.info()
model(ASSETS)

# Profile YOLO models (ONNX)
for file_name in ["yolov8n-seg.pt", "yolo11n-seg.pt", "yolo26n-seg.pt"]:
    model = YOLO(file_name)
    model.info()
    onnx_path = model.export(format="onnx", dynamic=True, nms=False)  # YOLO26 NMS-free head; no-op for YOLOv8/YOLO11
    model = YOLO(onnx_path)
    model(ASSETS)

Exemplos de utilização#

Os modelos FastSAM são fáceis de integrar nas tuas aplicações Python. A Ultralytics fornece uma API Python e comandos CLI fáceis de utilizar para simplificar o desenvolvimento.

Utilização de Predict#

Para segmentar uma imagem, usa o método predict conforme 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")

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

Exemplo de FastSAMPredictor

Desta forma, podes executar inferência numa imagem e obter todos os results de segmentação uma vez, executando depois inferência com prompts várias vezes sem repetir a inferência.

from ultralytics.models.fastsam import FastSAMPredictor

# Create FastSAMPredictor
overrides = {"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 results retornados nos exemplos acima são objetos Results, que permitem acessar facilmente as máscaras previstas e a imagem de origem.

Utilização de Val#

Tem em atenção que o FastSAM só suporta a deteção e a segmentação de uma única classe de objetos. Isto significa que reconhecerá e segmentará todos os objetos como pertencentes à mesma classe. Por isso, ao preparares o conjunto de dados, tens de converter todos os IDs de categoria dos objetos para 0.

A validação do modelo num conjunto de dados pode ser efetuada 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")

Utilização de Track#

Para efetuar o rastreamento de objetos numa imagem, utiliza o método track, conforme 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)

Utilização oficial do FastSAM#

O FastSAM também está disponível diretamente no repositório CASIA-LMC-Lab/FastSAM. Aqui tens uma breve visão geral dos passos típicos que podes seguir para usar o FastSAM:

Instalação#

  1. Clona o repositório FastSAM:

    git clone https://github.com/CASIA-LMC-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 checkpoint do modelo.

  2. Utiliza o 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 objetos específicos utilizando um prompt de texto:

      python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --text_prompt "the yellow dog"
    • Segmenta objetos dentro de uma caixa delimitadora (fornece as 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 objetos próximos 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 o FastSAM através da demonstração do Colab do CASIA-LMC-Lab.

Citações e agradecimentos#

Gostaríamos de agradecer aos autores do FastSAM pelas suas contribuições significativas no campo da segmentação de instâncias em tempo real:

Citação
@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 do FastSAM pode ser consultado no arXiv. Os autores disponibilizaram publicamente o seu trabalho, e a base de código pode ser acedida no GitHub. Apreciamos os seus esforços para fazer avançar esta área e tornar o seu trabalho acessível a uma comunidade mais ampla.

Perguntas frequentes#

  • O FastSAM, abreviatura de Modelo Rápido de Segmentação de Qualquer Coisa, é uma solução em tempo real baseada numa rede neural convolucional (CNN), concebida para reduzir as exigências computacionais mantendo um elevado desempenho em tarefas de segmentação de objetos. Ao contrário do Modelo de Segmentação de Qualquer Coisa (SAM), que utiliza uma arquitetura mais pesada baseada em Transformer, o FastSAM utiliza o Ultralytics YOLOv8-seg para uma segmentação eficiente de instâncias em duas etapas: segmentação de todas as instâncias, seguida de seleção orientada por prompts.

  • O FastSAM alcança a segmentação em tempo real ao dividir a tarefa de segmentação em duas etapas: segmentação de todas as instâncias com YOLOv8-seg e seleção orientada por prompts. Ao utilizar a eficiência computacional das CNNs, o FastSAM reduz significativamente as exigências computacionais e de recursos, mantendo um desempenho competitivo. Esta abordagem em duas etapas permite ao FastSAM fornecer uma segmentação rápida e eficiente, adequada para aplicações que exigem resultados rápidos.

  • O FastSAM é prático para uma variedade de tarefas de visão computacional que exigem desempenho de segmentação em tempo real. As aplicações incluem:

    • Automação industrial para controlo e garantia de 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 objetos
    • Imagiologia médica para tarefas de segmentação precisas e rápidas

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

  • Para utilizar o FastSAM para inferência em Python, podes 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 detalhes sobre os métodos de inferência, consulta a secção Utilização de Predict da documentação.

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

    • Prompt Everything: Gera a segmentação de todos os objetos visíveis.
    • Prompt de caixa delimitadora (BBox): Segmenta objetos dentro de uma caixa delimitadora especificada.
    • Prompt de texto: Utiliza um texto descritivo para segmentar objetos que correspondam à descrição.
    • Prompt de ponto: Segmenta objetos próximos de pontos definidos pelo utilizador.

    Esta flexibilidade permite ao FastSAM adaptar-se a uma vasta gama de cenários de interação do utilizador, aumentando a sua utilidade em diferentes aplicações. Para obteres mais informações sobre a utilização destes prompts, consulta a secção Principais funcionalidades.

Comentários