
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 Modelo | Pesos Pré-treinados | Tarefas Suportadas | Inferência (Inference) | Validação | Treinamento | Export |
|---|---|---|---|---|---|---|
| MobileSAM | mobile_sam.pt | Segmentaçã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:
| 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 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:
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 Imagem | SAM Original | MobileSAM |
|---|---|---|
| Parâmetros | 611M | 5M |
| Velocidade (Speed) | 452ms | 8ms |
Descodificador de Máscara Guiado por Prompt
| Descodificador de Máscara | SAM Original | MobileSAM |
|---|---|---|
| Parâmetros | 3.876M | 3.876M |
| Velocidade (Speed) | 4ms | 4ms |
Comparação de Pipeline Completo
| Pipeline Completo (Enc+Dec) | SAM Original | MobileSAM |
|---|---|---|
| Parâmetros | 615M | 9.66M |
| Velocidade (Speed) | 456ms | 12ms |
O desempenho do MobileSAM e do SAM original é ilustrado abaixo usando prompts de ponto e de caixa.


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
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
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:
from ultralytics.data.annotator import auto_annotate
auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="mobile_sam.pt")| Argumento | Tipo | Predefinição | Descrição |
|---|---|---|---|
data | str | obrigatório | Caminho para o diretório que contém as imagens de destino para anotação ou segmentação. |
det_model | str | 'yolo26x.pt' | Caminho do modelo de deteção YOLO para a deteção inicial de objetos. |
sam_model | str | 'sam_b.pt' | Caminho do modelo SAM para segmentação (suporta variantes SAM, SAM2 e modelos MobileSAM). |
device | str | '' | Dispositivo de computação (por exemplo, 'cuda:0', 'cpu', ou '' para deteção automática de dispositivo). |
conf | float | 0.25 | Limiar de confiança de deteção YOLO para filtrar deteções fracas. |
iou | float | 0.45 | Limiar IoU para Non-Maximum Suppression para filtrar caixas sobrepostas. |
imgsz | int | 640 | Tamanho de entrada para redimensionar imagens (deve ser múltiplo de 32). |
max_det | int | 300 | Número máximo de deteções por imagem para eficiência de memória. |
classes | list[int] | None | Lista de índices de classe a detetar (por exemplo, [0, 1] para pessoa e bicicleta). |
output_dir | str | None | Diretó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:
@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.