Logo do modelo de segmentação de imagem leve MobileSAM

Mobile Segment Anything (MobileSAM)

MobileSAM é um modelo de segmentação de imagem compacto e eficiente, desenvolvido especificamente para dispositivos móveis e de borda (edge). Projetado para trazer o poder do Segment Anything Model (SAM) da Meta para ambientes com computação limitada, o MobileSAM oferece segmentação quase instantânea, mantendo a compatibilidade com o pipeline original do SAM. Estejas a desenvolver aplicações em tempo real ou implementações leves, o MobileSAM fornece resultados de segmentação impressionantes com uma fração do tamanho e dos requisitos de velocidade dos seus predecessores.



Watch: How to Run Inference with MobileSAM using Ultralytics | Step-by-Step Guide 🎉

O MobileSAM foi adotado numa variedade de projetos, incluindo Grounding-SAM, AnyLabeling e Segment Anything in 3D.

O MobileSAM foi treinado num único GPU usando um conjunto de dados de 100 mil imagens (1% das imagens originais) em menos de um dia. O código de treino será disponibilizado no futuro.

Modelos Disponíveis, Tarefas Suportadas e Modos de Operação

A tabela abaixo descreve o modelo MobileSAM disponível, os seus pesos pré-treinados, as tarefas suportadas e a compatibilidade com diferentes modos de operação, como Inference, Validation, Training e Export. Os modos suportados são indicados por ✅ e os não suportados por ❌.

Tipo de ModeloPesos Pré-treinadosTarefas SuportadasInferência (Inference)ValidaçãoTreinamentoExport
MobileSAMmobile_sam.ptSegmentação de instância

Comparação do MobileSAM com YOLO

A seguinte comparação destaca as diferenças entre as variantes SAM da Meta, o MobileSAM e os modelos de segmentação 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 no tamanho e na velocidade do modelo entre as variantes SAM e os modelos de segmentação YOLO. Embora os modelos SAM ofereçam capacidades únicas de segmentação automática, os modelos YOLO — especialmente o YOLOv8n-seg, o YOLO11n-seg e o YOLO26n-seg — são significativamente menores, mais rápidos e mais eficientes computacionalmente.

Velocidades do SAM medidas com PyTorch, velocidades do 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 estes resultados:

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)
    model = YOLO(onnx_path)
    model(ASSETS)

Adaptar do SAM para o MobileSAM

O MobileSAM retém o mesmo pipeline que o SAM original, incluindo pré-processamento, pós-processamento e todas as interfaces. Isto significa que podes transitar do SAM para o MobileSAM com alterações mínimas no teu fluxo de trabalho.

A principal diferença é o codificador de imagem: o MobileSAM substitui o codificador ViT-H original (632M de parâmetros) por um codificador Tiny-ViT muito menor (5M de parâmetros). Num único GPU, o MobileSAM processa uma imagem em cerca de 12ms (8ms para o codificador, 4ms para o descodificador de máscara).

Comparação de Codificador de Imagem Baseado em ViT

Codificador de ImagemSAM OriginalMobileSAM
Parâmetros611M5M
Velocidade (Speed)452ms8ms

Descodificador de Máscara Guiado por Prompt

Descodificador de MáscaraSAM OriginalMobileSAM
Parâmetros3.876M3.876M
Velocidade (Speed)4ms4ms

Comparação de Pipeline Completo

Pipeline Completo (Enc+Dec)SAM OriginalMobileSAM
Parâmetros615M9.66M
Velocidade (Speed)456ms12ms

O desempenho do MobileSAM e do SAM original é ilustrado abaixo usando prompts de ponto e de caixa.

Imagem com Ponto como Prompt

Imagem com Caixa como Prompt

O MobileSAM é aproximadamente 7 vezes menor e 5 vezes mais rápido que o FastSAM. Para mais detalhes, visita a página do projeto MobileSAM.

Testar o MobileSAM no Ultralytics

Assim como o SAM original, o Ultralytics fornece uma interface simples para testar o MobileSAM, suportando prompts de Ponto e de Caixa.

Download do Modelo

Faz o download dos pesos pré-treinados do MobileSAM a partir dos ativos da Ultralytics.

Prompt de Ponto

Exemplo
from ultralytics import SAM

# Load the model
model = SAM("mobile_sam.pt")

# Predict a segment based on a single point prompt
model.predict("ultralytics/assets/zidane.jpg", points=[900, 370], labels=[1])

# Predict multiple segments based on multiple points prompt
model.predict("ultralytics/assets/zidane.jpg", points=[[400, 370], [900, 370]], labels=[1, 1])

# Predict a segment based on multiple points prompt per object
model.predict("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 1]])

# Predict a segment using both positive and negative prompts.
model.predict("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 0]])

Prompt de Caixa

Exemplo
from ultralytics import SAM

# Load the model
model = SAM("mobile_sam.pt")

# Predict a segment based on a single point prompt
model.predict("ultralytics/assets/zidane.jpg", points=[900, 370], labels=[1])

# Predict multiple segments based on multiple points prompt
model.predict("ultralytics/assets/zidane.jpg", points=[[400, 370], [900, 370]], labels=[1, 1])

# Predict a segment based on multiple points prompt per object
model.predict("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 1]])

# Predict a segment using both positive and negative prompts.
model.predict("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 0]])

Tanto o MobileSAM quanto o SAM partilham a mesma API. Para mais detalhes de uso, consulta a documentação do SAM.

Construir Automaticamente Conjuntos de Dados de Segmentação Usando um Modelo de Deteção

Para anotar automaticamente o teu conjunto de dados com a estrutura Ultralytics, usa a função auto_annotate como mostrado abaixo:

Exemplo
from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="mobile_sam.pt")
ArgumentoTipoPredefiniçãoDescrição
datastrobrigatórioCaminho para o diretório que contém as imagens de destino para anotação ou segmentação.
det_modelstr'yolo26x.pt'Caminho do modelo de deteção YOLO para a deteção inicial de objetos.
sam_modelstr'sam_b.pt'Caminho do modelo SAM para segmentação (suporta variantes SAM, SAM2 e modelos MobileSAM).
devicestr''Dispositivo de computação (por exemplo, 'cuda:0', 'cpu', ou '' para deteção automática de dispositivo).
conffloat0.25Limiar de confiança de deteção YOLO para filtrar deteções fracas.
ioufloat0.45Limiar IoU para Non-Maximum Suppression para filtrar caixas sobrepostas.
imgszint640Tamanho de entrada para redimensionar imagens (deve ser múltiplo de 32).
max_detint300Número máximo de deteções por imagem para eficiência de memória.
classeslist[int]NoneLista de índices de classe a detetar (por exemplo, [0, 1] para pessoa e bicicleta).
output_dirstrNoneDiretório de gravação para anotações (predefinição para './labels' relativo ao caminho dos dados).

Citações e Agradecimentos

Se o MobileSAM for útil na tua investigação ou desenvolvimento, considera citar o seguinte artigo:

Citação
@article{mobile_sam,
  title={Faster Segment Anything: Towards Lightweight SAM for Mobile Applications},
  author={Zhang, Chaoning and Han, Dongshen and Qiao, Yu and Kim, Jung Uk and Bae, Sung Ho and Lee, Seungkyu and Hong, Choong Seon},
  journal={arXiv preprint arXiv:2306.14289},
  year={2023}
}

Lê o artigo do MobileSAM completo no arXiv.

FAQ

O que é o MobileSAM e em que difere do modelo SAM original?

O MobileSAM é um modelo leve e rápido de segmentação de imagem otimizado para aplicações móveis e de borda. Ele mantém o mesmo pipeline que o SAM original, mas substitui o grande codificador ViT-H (632M de parâmetros) por um codificador Tiny-ViT compacto (5M de parâmetros). Isso resulta no MobileSAM ser cerca de 5 vezes menor e 7 vezes mais rápido que o SAM original, operando a cerca de 12ms por imagem contra os 456ms do SAM. Explora mais sobre a implementação do MobileSAM no repositório GitHub do MobileSAM.

Como posso testar o MobileSAM usando o Ultralytics?

Testar o MobileSAM no Ultralytics é direto. Podes usar prompts de Ponto e de Caixa para prever segmentos. Por exemplo, usando um prompt de Ponto:

from ultralytics import SAM

# Load the model
model = SAM("mobile_sam.pt")

# Predict a segment based on a point prompt
model.predict("ultralytics/assets/zidane.jpg", points=[900, 370], labels=[1])

Para mais detalhes, consulta a secção Testar o MobileSAM no Ultralytics.

Por que devo usar o MobileSAM para a minha aplicação móvel?

O MobileSAM é ideal para aplicações móveis e de borda devido ao seu design leve e velocidade de inferência rápida. Em comparação com o SAM original, o MobileSAM é cerca de 5 vezes menor e 7 vezes mais rápido, tornando-o adequado para segmentação em tempo real em dispositivos com recursos computacionais limitados. A sua eficiência permite que os dispositivos móveis realizem segmentação de imagem em tempo real sem latência significativa. Além disso, o MobileSAM suporta o modo Inference otimizado para desempenho móvel.

Como foi treinado o MobileSAM e o código de treino está disponível?

O MobileSAM foi treinado num único GPU com um conjunto de dados de 100 mil imagens (1% das imagens originais) em menos de um dia. Embora o código de treino seja lançado no futuro, podes aceder atualmente aos pesos pré-treinados e detalhes de implementação a partir do repositório GitHub do MobileSAM.

Quais são os principais casos de uso para o MobileSAM?

O MobileSAM foi concebido para uma segmentação de imagem rápida e eficiente em ambientes móveis e de borda. Os principais casos de uso incluem:

  • Deteção e segmentação de objetos em tempo real para aplicações móveis
  • Processamento de imagem de baixa latência em dispositivos com computação limitada
  • Integração em aplicações móveis impulsionadas por IA para realidade aumentada (AR), análise e mais

Para mais detalhes sobre casos de uso e desempenho, consulta Adaptar do SAM para o MobileSAM e o blog da Ultralytics sobre aplicações do MobileSAM.

Comentários