Fast Segment Anything Model (FastSAM)
O Fast Segment Anything Model (FastSAM) é uma solução inovadora, baseada em CNN e em tempo real para a tarefa de Segment Anything. Esta tarefa foi concebida para segmentar qualquer objeto dentro de uma imagem com base em vários prompts de interação do utilizador. O FastSAM reduz significativamente as exigências computacionais enquanto mantém um desempenho competitivo, tornando-o uma escolha prática para uma variedade de tarefas de visão.
Watch: Object Tracking using FastSAM with Ultralytics
Arquitetura do Modelo

Visão geral
O FastSAM foi concebido para resolver as limitações do Segment Anything Model (SAM), um modelo pesado Transformer com requisitos substanciais de recursos computacionais. O FastSAM desacopla a tarefa de segmentar qualquer coisa em duas etapas sequenciais: segmentação de instância completa e seleção orientada por prompt. A primeira etapa utiliza YOLOv8-seg para produzir as máscaras de segmentação de todas as instâncias na imagem. Na segunda etapa, ele produz a região de interesse correspondente ao prompt.
Principais recursos
-
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-o valioso para aplicações industriais que exigem resultados rápidos.
-
Eficiência e Desempenho: O FastSAM oferece uma redução significativa nas exigências de computação e recursos sem comprometer a qualidade do desempenho. Ele atinge um desempenho comparável ao SAM, mas com recursos computacionais drasticamente reduzidos, permitindo a aplicação em tempo real.
-
Segmentação orientada por prompt: O FastSAM pode segmentar qualquer objeto dentro de uma imagem orientado por vários prompts de interação do utilizador, proporcionando flexibilidade e adaptabilidade em diferentes cenários.
-
Baseado em YOLOv8-seg: O FastSAM baseia-se em 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.
-
Resultados competitivos em benchmarks: Na tarefa de proposta de objetos no MS COCO, o FastSAM atinge pontuações elevadas a uma velocidade significativamente superior à do SAM num único NVIDIA RTX 3090, demonstrando a sua eficiência e capacidade.
-
Aplicações práticas: A abordagem proposta fornece uma nova solução 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 atuais.
-
Viabilidade de compressão de modelos: O FastSAM demonstra a viabilidade de um caminho que pode reduzir significativamente o esforço computacional ao introduzir uma prioridade artificial na estrutura, abrindo assim novas possibilidades para a arquitetura de grandes modelos para tarefas gerais de visão.
Modelos Disponíveis, Tarefas Suportadas e Modos de Operação
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 operação como Inference, Validation, Training e Export, indicados por emojis ✅ para modos suportados e emojis ❌ para modos não suportados.
| Tipo de Modelo | Pesos Pré-treinados | Tarefas Suportadas | Inferência (Inference) | Validação | Treinamento | Export |
|---|---|---|---|---|---|---|
| FastSAM-s | FastSAM-s.pt | Segmentação de instância | ✅ | ❌ | ❌ | ✅ |
| FastSAM-x | FastSAM-x.pt | Segmentação de instância | ✅ | ❌ | ❌ | ✅ |
Comparação FastSAM vs YOLO
Aqui comparamos os modelos SAM 2 da Meta, incluindo a variante menor SAM2-t, com os modelos de segmentação da Ultralytics, incluindo o YOLO26n-seg:
| Modelo | Tamanho (MB) | Parâmetros (M) | Velocidade (CPU) (ms/im) |
|---|---|---|---|
| Meta SAM-b | 375 | 93.7 | 41703 |
| Meta SAM2-b | 162 | 80.8 | 28867 |
| Meta SAM2-t | 78.1 | 38.9 | 23430 |
| MobileSAM | 40.7 | 10.1 | 23802 |
| FastSAM-s com YOLOv8 backbone | 23.9 | 11.8 | 58.0 |
| Ultralytics YOLOv8n-seg | 7.1 (11.0x menor) | 3.4 (11.4x menos) | 24.8 (945x mais rápido) |
| Ultralytics YOLO11n-seg | 6.2 (12.6x menor) | 2.9 (13.4x menos) | 24.3 (964x mais rápido) |
| Ultralytics YOLO26n-seg | 6.7 (11.7x menor) | 2.7 (14.4x menos) | 25.2 (930x mais rápido) |
Esta comparação demonstra as diferenças substanciais nos tamanhos e velocidades dos modelos entre as variantes SAM e os modelos de segmentação YOLO. Embora o SAM forneça capacidades únicas de segmentação automática, os modelos YOLO, particularmente o YOLOv8n-seg, o YOLO11n-seg e o YOLO26n-seg, são significativamente mais pequenos, mais rápidos e mais eficientes computacionalmente.
Velocidades SAM medidas com PyTorch, velocidades YOLO medidas com ONNX Runtime. Testes realizados num Apple M4 Air de 2025 com 16GB de RAM usando torch==2.10.0, ultralytics==8.4.31 e onnxruntime==1.24.4. Para reproduzir este teste:
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)
model = YOLO(onnx_path)
model(ASSETS)Exemplos de Uso
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 da Previsão
Para efetuar a detecção de objetos numa imagem, utiliza o método predict como mostrado 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")Este snippet demonstra a simplicidade de carregar um modelo pré-treinado e executar uma previsão numa imagem.
Desta forma, podes executar a inferência na imagem e obter todos os results da segmentação de uma só vez e executar a inferência de prompts várias vezes sem ter de 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")Todos os results devolvidos nos exemplos acima são objetos Results que permitem aceder facilmente às máscaras previstas e à imagem de origem.
Utilização da Validação
A validação do modelo num conjunto de dados pode ser feita da seguinte forma:
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")Tem em atenção que o FastSAM suporta apenas a deteção e segmentação de uma única classe de objetos. Isto significa que reconhecerá e segmentará todos os objetos como a mesma classe. Por conseguinte, ao preparar o conjunto de dados, tens de converter todos os IDs de categoria de objetos para 0.
Utilização do Rastreamento
Para efetuar o rastreamento de objetos numa imagem, utiliza o método track como mostrado abaixo:
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 https://github.com/CASIA-IVA-Lab/FastSAM. Eis uma breve visão geral dos passos típicos que podes seguir para utilizar o FastSAM:
Instalação
-
Clona o repositório FastSAM:
git clone https://github.com/CASIA-IVA-Lab/FastSAM.git -
Cria e ativa um ambiente Conda com Python 3.9:
conda create -n FastSAM python=3.9 conda activate FastSAM -
Navega para o repositório clonado e instala os pacotes necessários:
cd FastSAM pip install -r requirements.txt -
Instala o modelo CLIP:
pip install git+https://github.com/ultralytics/CLIP.git
Exemplo de Utilização
-
Descarrega um checkpoint do modelo.
-
Utiliza o FastSAM para inferência. Exemplos de comandos:
-
Segmentar tudo numa imagem:
python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg -
Segmentar objetos específicos usando prompt de texto:
python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --text_prompt "the yellow dog" -
Segmentar 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]" -
Segmentar objetos 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 o FastSAM através da demonstração no Colab do CASIA-IVA-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:
@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 encontrado no arXiv. Os autores disponibilizaram o seu trabalho publicamente e a base de código pode ser acedida no GitHub. Agradecemos os seus esforços no avanço da área e por tornarem o seu trabalho acessível à comunidade em geral.
FAQ
O que é o FastSAM e como difere do SAM?
O FastSAM, abreviatura de Fast Segment Anything Model, é uma solução baseada em rede neuronal convolucional (CNN) em tempo real concebida para reduzir as exigências computacionais, mantendo um elevado desempenho nas tarefas de segmentação de objetos. Ao contrário do Segment Anything Model (SAM), que utiliza uma arquitetura baseada em Transformer mais pesada, o FastSAM aproveita o Ultralytics YOLOv8-seg para uma segmentação de instâncias eficiente em duas fases: segmentação de todas as instâncias seguida de seleção orientada por prompt.
Como é que o FastSAM atinge um desempenho de segmentação em tempo real?
O FastSAM atinge a segmentação em tempo real ao desacoplar a tarefa de segmentação em fases de segmentação de todas as instâncias com YOLOv8-seg e de seleção orientada por prompt. Ao utilizar a eficiência computacional das CNNs, o FastSAM oferece reduções significativas nas exigências de computação e recursos, mantendo um desempenho competitivo. Esta abordagem de dupla fase permite que o FastSAM forneça uma segmentação rápida e eficiente, adequada para aplicações que exigem resultados rápidos.
Quais são as aplicações práticas do FastSAM?
O FastSAM é prático para uma variedade de tarefas de visão computacional que exigem um 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 sua capacidade de lidar com vários prompts de interação do utilizador torna o FastSAM adaptável e flexível para diversos cenários.
Como utilizo o modelo FastSAM para inferência em Python?
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 métodos de inferência, consulta a secção Utilização da Previsão da documentação.
Que tipos de prompts é que o FastSAM suporta para tarefas de segmentação?
O FastSAM suporta múltiplos tipos de prompts para orientar as tarefas de segmentação:
- Prompt de Tudo (Everything Prompt): Gera a segmentação para todos os objetos visíveis.
- Prompt de Caixa Delimitadora (BBox Prompt): Segmenta objetos dentro de uma caixa delimitadora especificada.
- Prompt de Texto (Text Prompt): Utiliza um texto descritivo para segmentar objetos que correspondam à descrição.
- Prompt de Ponto (Point Prompt): Segmenta objetos 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 do utilizador, aumentando a sua utilidade em diferentes aplicações. Para mais informações sobre como utilizar estes prompts, consulta a secção Principais Funcionalidades.