
Segment Anything para dispositivos móveis (MobileSAM)#
O MobileSAM é um modelo compacto e eficiente de segmentação de imagens, desenvolvido especificamente para dispositivos móveis e de edge. Concebido para levar o poder do modelo Segment Anything da Meta (SAM) a ambientes com capacidade computacional limitada, o MobileSAM fornece segmentação quase instantânea, mantendo a compatibilidade com o pipeline SAM original. Quer estejas a desenvolver aplicações em tempo real ou implementações leves, o MobileSAM fornece resultados de segmentação impressionantes com uma fração dos requisitos de tamanho e velocidade dos seus predecessores.
Watch: How to Run Inference with MobileSAM using Ultralytics | Step-by-Step Guide 🎉
O MobileSAM foi adotado em vários projetos, incluindo o Grounding-SAM, o AnyLabeling e o Segment Anything in 3D.
O MobileSAM foi treinado em uma única GPU usando um conjunto de dados de 100 mil imagens (1% das imagens originais) em menos de um dia.
Modelos disponíveis, tarefas compatíveis e modos de operação#
A tabela abaixo apresenta o modelo MobileSAM disponível, os respetivos pesos pré-treinados, as tarefas suportadas e a compatibilidade com diferentes modos de operação, como Inferência, Validação, Treino e Exportação. Os modos suportados são indicados por ✅ e os modos não suportados por ❌.
| Tipo de modelo | Pesos pré-treinados | Tarefas suportadas | Treino | Validação | Inferência | Exportação |
|---|---|---|---|---|---|---|
| MobileSAM | mobile_sam.pt | Segmentação de instâncias | ❌ | ❌ | ✅ | ❌ |
Comparação do MobileSAM com o YOLO#
A comparação seguinte destaca as diferenças entre as variantes SAM da Meta, o MobileSAM e 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 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 dos modelos 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 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 e as velocidades do YOLO com ONNX Runtime. Os testes foram executados num Apple M4 Air de 2025 com 16 GB de RAM, utilizando 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, nms=False) # YOLO26 NMS-free head; no-op for YOLOv8/YOLO11
model = YOLO(onnx_path)
model(ASSETS)Adaptação do SAM para o MobileSAM#
O MobileSAM mantém o mesmo pipeline do SAM original, incluindo o pré-processamento, o pós-processamento e todas as interfaces. Isto significa que podes passar do SAM para o MobileSAM com alterações mínimas ao teu fluxo de trabalho.
A principal diferença está no codificador de imagens: o MobileSAM substitui o codificador ViT-H original (637 milhões de parâmetros) por um codificador Tiny-ViT muito mais pequeno (5 milhões de parâmetros). Numa única GPU, o MobileSAM processa uma imagem em cerca de 12 ms (8 ms para o codificador e 4 ms para o descodificador de máscaras).
Comparação de codificadores de imagens baseados em ViT#
| Codificador de imagens | SAM original | MobileSAM |
|---|---|---|
| Parâmetros | 637M | 5M |
| Velocidade | 452ms | 8ms |
Descodificador de máscaras guiado por prompts#
| Descodificador de máscaras | SAM original | MobileSAM |
|---|---|---|
| Parâmetros | 3,876M | 3,876M |
| Velocidade | 4ms | 4ms |
Comparação de todo o pipeline#
| Pipeline completo (Enc+Dec) | SAM original | MobileSAM |
|---|---|---|
| Parâmetros | 641M | 9,66M |
| Velocidade | 456ms | 12ms |
O desempenho do MobileSAM e do SAM original é ilustrado abaixo utilizando prompts de pontos e de caixas.


O MobileSAM é aproximadamente 7 vezes menor e 5 vezes mais rápido do que o FastSAM. Para obter mais detalhes, visita a página do projeto MobileSAM.
Testar o MobileSAM na Ultralytics#
Tal como o SAM original, a Ultralytics fornece uma interface simples para testar o MobileSAM, com suporte para prompts de pontos e de caixas.
Transferência do modelo#
Transfere os pesos pré-treinados do MobileSAM a partir dos recursos 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 box prompt
model.predict("ultralytics/assets/zidane.jpg", bboxes=[439, 437, 524, 709])
# Predict multiple segments based on multiple box prompts
model.predict("ultralytics/assets/zidane.jpg", bboxes=[[439, 437, 524, 709], [114, 196, 313, 708]])MobileSAM e SAM partilham a mesma API. Para obter mais detalhes de utilização, consulta a documentação do SAM.
Criar automaticamente conjuntos de dados de segmentação utilizando um modelo de deteção#
Para anotar automaticamente o teu conjunto de dados com o framework da Ultralytics, utiliza a função auto_annotate, conforme 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-alvo para anotação ou segmentação. |
det_model | str | 'yolo26x.pt' | Caminho para o modelo de deteção YOLO usado na deteção inicial de objetos. |
sam_model | str | 'sam_b.pt' | Caminho para o modelo SAM usado na segmentação (suporta pesos de SAM, SAM 2, MobileSAM e SAM 3). |
device | str | '' | Dispositivo de computação (por exemplo, 'cuda:0', 'cpu' ou '' para deteção automática do dispositivo). |
conf | float | 0.25 | Limiar de confiança da deteção YOLO para filtrar deteções fracas. |
iou | float | 0.45 | Limiar de IoU para a supressão não máxima, usado para filtrar caixas sobrepostas. |
imgsz | int | 640 | Tamanho de entrada para redimensionar as imagens (tem de ser múltiplo de 32). |
max_det | int | 300 | Número máximo de deteções por imagem para garantir eficiência de memória. |
classes | list[int] | None | Lista de índices de classes a detetar (por exemplo, [0, 1] para pessoa e bicicleta). |
output_dir | str | None | Diretório onde guardar as anotações (por predefinição: diretório irmão de <data>_auto_annotate_labels). |
Citações e agradecimentos#
Se o MobileSAM for útil na tua investigação ou desenvolvimento, considera citar o artigo seguinte:
@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 completo do MobileSAM no arXiv.
Perguntas frequentes#
O MobileSAM é um modelo de segmentação de imagens leve e rápido, otimizado para aplicações móveis e de borda. Ele mantém o mesmo pipeline do SAM original, mas substitui o codificador ViT-H grande (637M parâmetros) por um codificador Tiny-ViT compacto (5M parâmetros). Isso torna o pipeline completo do MobileSAM cerca de 66 vezes menor que o do SAM original (9,66M vs 641M parâmetros) e cerca de 38 vezes mais rápido, operando em aproximadamente 12 ms por imagem em comparação aos 456 ms do SAM. Explore mais sobre a implementação do MobileSAM no repositório GitHub do MobileSAM.
Testar o MobileSAM na Ultralytics é simples. Podes utilizar prompts de pontos e de caixas para prever segmentos. Por exemplo, utilizando 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 obter mais detalhes, consulta a secção Testar o MobileSAM na Ultralytics.
O MobileSAM é ideal para aplicações móveis e de borda devido ao seu design leve e à sua rápida velocidade de inferência. Em comparação com o SAM original, o MobileSAM tem cerca de 66 vezes menos parâmetros e é executado cerca de 38 vezes mais rápido, tornando-se adequado para segmentação em tempo real em dispositivos com recursos computacionais limitados. A eficiência do MobileSAM permite que dispositivos móveis realizem segmentação de imagens em tempo real sem latência significativa. Além disso, o MobileSAM suporta o modo de inferência otimizado para desempenho móvel.
O MobileSAM foi treinado em uma única GPU com um conjunto de dados de 100 mil imagens (1% das imagens originais do SA-1B) em menos de um dia, destilando o codificador de imagens ViT-H do SAM em um codificador Tiny-ViT. Os pesos pré-treinados e os detalhes de implementação estão disponíveis no repositório GitHub do MobileSAM.
O MobileSAM foi concebido para uma segmentação de imagens rápida e eficiente em ambientes móveis e de edge. Os principais casos de utilização incluem:
- Deteção e segmentação de objetos em tempo real para aplicações móveis
- Processamento de imagens com baixa latência em dispositivos com capacidade computacional limitada
- Integração em aplicações móveis baseadas em IA para realidade aumentada (AR), análise e muito mais
Para obter mais detalhes sobre casos de utilização e desempenho, consulta Adaptação do SAM para o MobileSAM e o blog da Ultralytics sobre aplicações do MobileSAM.