Modelo Fast Segment Anything (FastSAM)#
O modelo Fast Segment Anything (FastSAM) é uma nova solução baseada em CNN, em tempo real, para a tarefa Segment Anything. Essa tarefa foi projetada para segmentar qualquer objeto em uma imagem com base em diversos prompts de interação possíveis do usuário. O FastSAM reduz significativamente as exigências computacionais sem deixar de oferecer desempenho competitivo, tornando-o uma opção prática para diversas tarefas de visão computacional.
Assista: Rastreamento de objetos usando FastSAM com Ultralytics
Arquitetura do modelo#

Visão geral#
O FastSAM foi projetado para superar as limitações do modelo Segment Anything (SAM), um modelo Transformer pesado que exige recursos computacionais substanciais. O FastSAM divide a tarefa Segment Anything em duas etapas sequenciais: segmentação de instâncias de todas as instâncias e seleção guiada por prompts. Na primeira etapa, o YOLOv8-seg gera as máscaras de segmentação de todas as instâncias na imagem. Na segunda etapa, ele retorna a região de interesse correspondente ao prompt.
Principais funcionalidades#
-
Solução em tempo real: Ao aproveitar a eficiência computacional das CNNs, o FastSAM oferece uma solução em tempo real para a tarefa Segment Anything, tornando-o valioso para aplicações industriais que exigem resultados rápidos.
-
Eficiência e desempenho: O FastSAM reduz significativamente as exigências computacionais e de recursos sem comprometer a qualidade do desempenho. Ele alcança um desempenho comparável ao do SAM, mas com uma redução drástica dos recursos computacionais, permitindo aplicações em tempo real.
-
Segmentação guiada por prompts: O FastSAM pode segmentar qualquer objeto em uma imagem com a orientação de diversos prompts de interação possíveis do usuário, oferecendo flexibilidade e adaptabilidade em diferentes cenários.
-
Baseado no YOLOv8-seg: O FastSAM é baseado no YOLOv8-seg, um detector de objetos equipado com uma ramificação de segmentação de instâncias. Isso permite que ele gere com eficácia as máscaras de segmentação de todas as instâncias de uma imagem.
-
Resultados competitivos em benchmarks: Na tarefa de propostas de objetos no MS COCO, o FastSAM alcança pontuações altas em uma velocidade significativamente maior que a do SAM em uma única NVIDIA RTX 3090, demonstrando sua eficiência e capacidade.
-
Aplicações práticas: A abordagem proposta oferece uma nova solução prática para diversas tarefas de visão computacional em alta velocidade, dezenas ou centenas de vezes mais rápida que os métodos atuais.
-
Viabilidade da compactação de modelos: O FastSAM demonstra a viabilidade de uma abordagem capaz de reduzir significativamente o esforço computacional ao introduzir um prior artificial na estrutura, abrindo assim novas possibilidades para arquiteturas de modelos grandes voltadas 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 pelos emojis ✅ para modos compatíveis e ❌ para modos incompatíveis.
| Tipo de modelo | Pesos pré-treinados | Tarefas suportadas | Treinamento | Validação | Inferência | Exportar |
|---|---|---|---|---|---|---|
| FastSAM-s | FastSAM-s.pt | Segmentação de instâncias | ❌ | ✅ | ✅ | ✅ |
| FastSAM-x | FastSAM-x.pt | Segmentação de instâncias | ❌ | ✅ | ✅ | ✅ |
Comparação do FastSAM com o YOLO#
Aqui comparamos o FastSAM-s com as variantes do SAM da Meta e os modelos de segmentação do 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 backbone YOLOv8 | 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 entre os tamanhos e as velocidades dos modelos das variantes SAM e dos modelos de segmentação YOLO. Embora o SAM ofereça recursos exclusivos de segmentação automática, os modelos YOLO, especialmente 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; as velocidades do YOLO, com ONNX Runtime. Os testes foram executados em um 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:
from ultralytics import ASSETS, SAM, YOLO, FastSAM
# Avalie o desempenho de 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)
# Perfilar FastSAM-s
model = FastSAM("FastSAM-s.pt")
model.info()
model(ASSETS)
# Avalie o desempenho dos modelos YOLO (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) # Cabeça sem NMS do YOLO26; sem efeito para YOLOv8/YOLO11
model = YOLO(onnx_path)
model(ASSETS)Exemplos de uso#
Os modelos FastSAM são fáceis de integrar aos seus aplicativos Python. O Ultralytics oferece uma API Python e comandos CLI fáceis de usar para simplificar o desenvolvimento.
Uso de predição#
Para segmentar uma imagem, use o método predict, conforme mostrado abaixo:
from ultralytics import FastSAM
# Defina uma fonte para inferência
source = "path/to/bus.jpg"
# Crie um modelo FastSAM
model = FastSAM("FastSAM-s.pt") # ou FastSAM-x.pt
# Executa a inferência numa imagem
everything_results = model(source, device="cpu", retina_masks=True, imgsz=1024, conf=0.4, iou=0.9)
# Executar inferência com prompt de bboxes
results = model(source, bboxes=[439, 437, 524, 709])
# Execute a inferência com um prompt de pontos
results = model(source, points=[[200, 200]], labels=[1])
# Execute a inferência com prompts de texto
results = model(source, texts="a photo of a dog")
# Execute a inferência simultaneamente com prompts de caixas delimitadoras, pontos e texto
results = model(source, bboxes=[439, 437, 524, 709], points=[[200, 200]], labels=[1], texts="a photo of a dog")Este trecho demonstra como é simples carregar um modelo pré-treinado e executar uma predição em uma imagem.
Dessa forma, você pode executar a inferência na imagem e obter todos os segmentos results de uma só vez, depois executar a inferência com prompts várias vezes sem executar a inferência novamente.
from ultralytics.models.fastsam import FastSAMPredictor
# Crie um FastSAMPredictor
overrides = {"conf": 0.25, "task": "segment", "mode": "predict", "model": "FastSAM-s.pt", "save": False, "imgsz": 1024}
predictor = FastSAMPredictor(overrides=overrides)
# Segmente tudo
everything_results = predictor("ultralytics/assets/bus.jpg")
# Inferência com prompt
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 objetos results retornados nos exemplos acima são objetos Results, que permitem acessar facilmente as máscaras previstas e a imagem de origem.
Uso de validação#
Observe que o FastSAM oferece suporte apenas à detecção e segmentação de objetos de uma única classe. Isso significa que ele reconhecerá e segmentará todos os objetos como pertencentes à mesma classe. Portanto, ao preparar o conjunto de dados, você precisa converter todos os IDs de categoria dos objetos para 0.
A validação do modelo em um conjunto de dados pode ser feita da seguinte forma:
from ultralytics import FastSAM
# Crie um modelo FastSAM
model = FastSAM("FastSAM-s.pt") # ou FastSAM-x.pt
# Valida o modelo
results = model.val(data="coco8-seg.yaml")Uso do rastreamento#
Para rastrear objetos em uma imagem, use o método track, conforme mostrado abaixo:
from ultralytics import FastSAM
# Crie um modelo FastSAM
model = FastSAM("FastSAM-s.pt") # ou FastSAM-x.pt
# Rastrear com um modelo FastSAM em um vídeo
results = model.track(source="path/to/video.mp4", imgsz=640)Uso oficial do FastSAM#
O FastSAM também está disponível diretamente no repositório CASIA-LMC-Lab/FastSAM. Aqui está uma breve visão geral das etapas típicas que você pode seguir para usar o FastSAM:
Instalação#
-
Clone o repositório FastSAM:
git clone https://github.com/CASIA-LMC-Lab/FastSAM.git -
Crie e ative um ambiente Conda com Python 3.9:
conda create -n FastSAM python=3.9 conda activate FastSAM -
Acesse o repositório clonado e instale os pacotes necessários:
cd FastSAM pip install -r requirements.txt -
Instale o modelo CLIP:
pip install git+https://github.com/ultralytics/CLIP.git
Exemplo de uso#
-
Baixe um checkpoint do modelo.
-
Use o FastSAM para inferência. Exemplos de comandos:
-
Segmente tudo em uma imagem:
python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg -
Segmente objetos específicos usando um prompt de texto:
python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --text_prompt "the yellow dog" -
Segmente objetos dentro de uma caixa delimitadora (forneça 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]" -
Segmente objetos próximos a 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, você pode experimentar o FastSAM por meio da demonstração no Colab do CASIA-LMC-Lab.
Citações e agradecimentos#
Gostaríamos de reconhecer as contribuições significativas dos autores do FastSAM para a área de 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 está disponível no arXiv. Os autores disponibilizaram publicamente seu trabalho, e a base de código pode ser acessada no GitHub. Agradecemos os esforços deles para promover a área e tornar seu trabalho acessível à comunidade em geral.
Perguntas frequentes#
FastSAM, abreviação de Fast Segment Anything Model, é uma solução baseada em rede neural convolucional (CNN) em tempo real, projetada para reduzir as demandas computacionais e, ao mesmo tempo, manter alto desempenho em tarefas de segmentação de objetos. Ao contrário do Segment Anything Model (SAM), que usa uma arquitetura mais pesada baseada em Transformer, o FastSAM aproveita o Ultralytics YOLOv8-seg para realizar a segmentação de instâncias com eficiência em duas etapas: segmentação de todas as instâncias, seguida pela seleção guiada por prompts.
O FastSAM alcança a segmentação em tempo real separando a tarefa em duas etapas: segmentação de todas as instâncias com YOLOv8-seg e seleção guiada por prompts. Ao aproveitar a eficiência computacional das CNNs, o FastSAM reduz significativamente as demandas computacionais e de recursos, mantendo um desempenho competitivo. Essa abordagem em duas etapas permite ao FastSAM oferecer uma segmentação rápida e eficiente, adequada a aplicações que exigem resultados imediatos.
O FastSAM é útil em diversas tarefas de visão computacional que exigem desempenho de segmentação em tempo real. As aplicações incluem:
- Automação industrial para controle e garantia da qualidade
- Análise de vídeo em tempo real para segurança e vigilância
- Veículos autônomos para detecção e segmentação de objetos
- Imagens médicas para tarefas de segmentação precisas e rápidas
A capacidade de lidar com vários prompts de interação do usuário torna o FastSAM adaptável e flexível para diferentes cenários.
Para usar o FastSAM para inferência em Python, você pode seguir o exemplo abaixo:
from ultralytics import FastSAM # Defina uma fonte para inferência source = "path/to/bus.jpg" # Crie um modelo FastSAM model = FastSAM("FastSAM-s.pt") # ou FastSAM-x.pt # Executa a inferência numa imagem everything_results = model(source, device="cpu", retina_masks=True, imgsz=1024, conf=0.4, iou=0.9) # Executar inferência com prompt de bboxes results = model(source, bboxes=[439, 437, 524, 709]) # Execute a inferência com um prompt de pontos results = model(source, points=[[200, 200]], labels=[1]) # Execute a inferência com prompts de texto results = model(source, texts="a photo of a dog") # Execute a inferência simultaneamente com prompts de caixas delimitadoras, pontos e texto results = model(source, bboxes=[439, 437, 524, 709], points=[[200, 200]], labels=[1], texts="a photo of a dog")Para saber mais sobre os métodos de inferência, consulte a seção Uso de previsão da documentação.
O FastSAM aceita vários tipos de prompts para orientar as tarefas de segmentação:
- Prompt para tudo: 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: usa um texto descritivo para segmentar objetos que correspondam à descrição.
- Prompt de ponto: segmenta objetos próximos a pontos definidos pelo usuário.
Essa flexibilidade permite que o FastSAM se adapte a uma ampla variedade de cenários de interação com o usuário, ampliando sua utilidade em diferentes aplicações. Para saber mais sobre como usar esses prompts, consulte a seção Principais recursos.