Fast Segment Anything Model (FastSAM)
O Fast Segment Anything Model (FastSAM) é uma solução nova, baseada em CNN e em tempo real para a tarefa Segment Anything. Esta tarefa foi projetada para segmentar qualquer objeto dentro de uma imagem com base em várias possíveis solicitações de interação do usuário. O FastSAM reduz significativamente as demandas computacionais, mantendo um desempenho competitivo, tornando-o uma escolha prática para uma variedade de tarefas de visão.
Assista: Rastreamento de Objetos usando FastSAM com Ultralytics
Arquitetura do Modelo
Visão geral
O FastSAM foi projetado para abordar as limitações do Segment Anything Model (SAM), um modelo Transformer pesado com requisitos substanciais de recursos computacionais. O FastSAM dissocia a tarefa de segmentar qualquer coisa em dois estágios sequenciais: segmentação de todas as instâncias e seleção guiada por prompt. O primeiro estágio usa YOLOv8-seg para produzir as máscaras de segmentação de todas as instâncias na imagem. No segundo estágio, ele produz a região de interesse correspondente ao prompt.
Principais Características
-
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 demandas computacionais e de recursos sem comprometer a qualidade do desempenho. Ele alcança um desempenho comparável ao SAM, mas com recursos computacionais drasticamente reduzidos, permitindo a aplicação em tempo real.
-
Segmentação Guiada por Prompt: FastSAM pode segmentar qualquer objeto dentro de uma imagem guiado por vários prompts de interação do usuário possíveis, proporcionando flexibilidade e adaptabilidade em diferentes cenários.
-
Baseado no YOLOv8-seg: O FastSAM é baseado no YOLOv8-seg, um detetor de objetos equipado com uma ramificação de segmentação de instância. Isso permite que ele produza efetivamente as máscaras de segmentação de todas as instâncias em uma imagem.
-
Resultados Competitivos em Benchmarks: Na tarefa de proposta de objetos no MS COCO, o FastSAM alcança altas pontuações a uma velocidade significativamente maior do que o 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 um grande número de tarefas de visão computacional em uma velocidade realmente alta, dezenas ou centenas de vezes mais rápido do que os métodos atuais.
-
Viabilidade da Compressão de Modelo: O FastSAM demonstra a viabilidade de um caminho que pode reduzir significativamente o esforço computacional ao introduzir um conhecimento prévio artificial à estrutura, abrindo assim novas possibilidades para a arquitetura de modelos grandes para tarefas de visão geral.
Modelos Disponíveis, Tarefas Suportadas e Modos de Operação
Esta tabela apresenta os modelos disponíveis com seus pesos pré-treinados específicos, as tarefas que eles suportam e sua compatibilidade com diferentes modos de operação, como Inferência, Validação, Treinamento 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 | Treinamento | Exportar |
---|---|---|---|---|---|---|
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 menor variante SAM2-t, com o menor modelo de segmentação da Ultralytics, YOLO11n-seg:
Modelo | Tamanho (MB) |
Parâmetros (M) |
Velocidade (CPU) (ms/im) |
---|---|---|---|
Meta SAM-b | 375 | 93.7 | 49401 |
Meta SAM2-b | 162 | 80.8 | 31901 |
Meta SAM2-t | 78.1 | 38.9 | 25997 |
MobileSAM | 40.7 | 10.1 | 25381 |
FastSAM-s com backbone YOLOv8 | 23.7 | 11.8 | 55.9 |
YOLOv8n-seg da Ultralytics | 6,7 (11,7x menor) | 3,4 (11,4x menos) | 24.5 (1061x mais rápido) |
Ultralytics YOLO11n-seg | 5.9 (13,2x menor) | 2.9 (13,4x menos) | 30.1 (864x 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 recursos exclusivos de segmentação automática, os modelos YOLO, particularmente YOLOv8n-seg e YOLO11n-seg, são significativamente menores, mais rápidos e computacionalmente mais eficientes.
Testes executados em um Apple M4 Pro 2025 com 24 GB de RAM usando torch==2.6.0
e ultralytics==8.3.90
. 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
for file_name in ["yolov8n-seg.pt", "yolo11n-seg.pt"]:
model = YOLO(file_name)
model.info()
model(ASSETS)
Exemplos de uso
Os modelos FastSAM são fáceis de integrar em suas aplicações Python. A Ultralytics fornece uma API Python e comandos CLI fáceis de usar para agilizar o desenvolvimento.
Uso da Predição
Para realizar detecção de objetos em uma imagem, use o predict
método, 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")
# Load a FastSAM model and segment everything with it
yolo segment predict model=FastSAM-s.pt source=path/to/bus.jpg imgsz=640
Este trecho demonstra a simplicidade de carregar um modelo pré-treinado e executar uma previsão numa imagem.
Exemplo de FastSAMPredictor
Dessa forma, você pode executar a inferência na imagem e obter todo o segmento. results
uma vez e executa 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 results
retornados nos exemplos Resultados acima são objetos que permitem acessar as máscaras previstas e a imagem de origem facilmente.
Uso da Validação
A validação do modelo em um 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
Por favor, note que o FastSAM suporta apenas a detecção e segmentação de uma única classe de objeto. Isso significa que ele reconhecerá e segmentará todos os objetos como a mesma classe. Portanto, ao preparar o conjunto de dados, você precisa converter todos os IDs de categoria de objeto para 0.
Uso do Rastreamento
Para realizar o rastreamento de objetos em uma imagem, use o track
método, 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)
yolo segment track model=FastSAM-s.pt source="path/to/video.mp4" imgsz=640
Uso oficial do FastSAM
O FastSAM também está disponível diretamente no repositório https://github.com/CASIA-IVA-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-IVA-Lab/FastSAM.git
-
Crie e ative um ambiente Conda com Python 3.9:
conda create -n FastSAM python=3.9 conda activate FastSAM
-
Navegue até o repositório clonado e instale os pacotes necessários:
cd FastSAM pip install -r requirements.txt
-
Instalar o modelo CLIP:
pip install git+https://github.com/ultralytics/CLIP.git
Exemplo de Utilização
-
Baixe um checkpoint do modelo.
-
Use o FastSAM para inferência. Comandos de exemplo:
-
Segmentar tudo em uma 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 bounding box (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]"
-
Segmentar 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]"
-
Adicionalmente, pode experimentar o FastSAM através da demo Colab do CASIA-IVA-Lab.
Citações e Agradecimentos
Gostaríamos de agradecer aos autores do FastSAM por 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 publicamente seu trabalho, e o código pode ser acessado no GitHub. Agradecemos seus esforços em avançar o campo e tornar seu trabalho acessível à comunidade em geral.
FAQ
O que é FastSAM e como ele difere do SAM?
FastSAM, abreviação de Fast Segment Anything Model, é uma solução em tempo real baseada em redes neurais convolucionais (CNN) projetada para reduzir as demandas computacionais, mantendo o 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 utiliza o Ultralytics YOLOv8-seg para uma segmentação de instância eficiente em dois estágios: segmentação de todas as instâncias seguida pela seleção guiada por prompt.
Como o FastSAM alcança o desempenho de segmentação em tempo real?
O FastSAM alcança segmentação em tempo real, dissociando a tarefa de segmentação em segmentação de todas as instâncias com YOLOv8-seg e estágios de seleção guiada por prompt. Ao utilizar a eficiência computacional das CNNs, o FastSAM oferece reduções significativas nas demandas computacionais e de recursos, mantendo um desempenho competitivo. Essa abordagem de dois estágios 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 desempenho de segmentação em tempo real. As aplicações incluem:
- Automação industrial para controle de qualidade e garantia
- 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
- Imagem médica para tarefas de segmentação precisas e rápidas
Sua capacidade de lidar com vários prompts de interação do usuário torna o FastSAM adaptável e flexível para diversos cenários.
Como usar o modelo FastSAM para inferência em python?
Para usar o 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 obter mais detalhes sobre os métodos de inferência, consulte a seção Uso da Previsão da documentação.
Quais tipos de prompts o FastSAM suporta para tarefas de segmentação?
O FastSAM suporta vários tipos de prompts para orientar as tarefas de segmentação:
- Prompt Tudo: Gera segmentação para 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 correspondem à descrição.
- Prompt de Ponto: Segmenta objetos perto de pontos específicos definidos pelo usuário.
Essa flexibilidade permite que o FastSAM se adapte a uma ampla gama de cenários de interação do usuário, aumentando sua utilidade em diferentes aplicações. Para obter mais informações sobre como usar esses prompts, consulte a seção Principais Recursos.