Mobile Segment Anything (MobileSAM)
MobileSAM é um modelo de segmentação de imagem compacto e eficiente, construído especificamente para dispositivos móveis e de borda. Projetado para trazer o poder do Segment Anything Model da Meta (SAM) para ambientes com computação limitada, o MobileSAM oferece segmentação quase instantânea, mantendo a compatibilidade com o pipeline SAM original. Quer esteja a desenvolver aplicações em tempo real ou implementações leves, o MobileSAM oferece resultados de segmentação impressionantes com uma fração do tamanho e dos requisitos de velocidade dos seus antecessores.
Assista: Como Executar a Inferência com o MobileSAM usando Ultralytics | Guia Passo a Passo 🎉
O MobileSAM foi adotado em uma variedade de projetos, incluindo Grounding-SAM, AnyLabeling e 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. O código de treinamento será lançado 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 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 | Inferência | Validação | Treinamento | Exportar |
---|---|---|---|---|---|---|
MobileSAM | mobile_sam.pt | Segmentação de Instância | ✅ | ❌ | ❌ | ❌ |
Comparação MobileSAM vs YOLO
A comparação a seguir destaca as diferenças entre as variantes SAM da Meta, MobileSAM e os menores modelos de segmentação da Ultralytics, incluindo 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 |
Ultralytics YOLOv8n-seg | 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 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 exclusivas de segmentação automática, os modelos YOLO—especialmente YOLOv8n-seg e YOLO11n-seg—são significativamente menores, mais rápidos e computacionalmente mais eficientes.
Os testes foram conduzidos em um Apple M4 Pro 2025 com 24 GB de RAM usando torch==2.6.0
e ultralytics==8.3.90
. 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
for file_name in ["yolov8n-seg.pt", "yolo11n-seg.pt"]:
model = YOLO(file_name)
model.info()
model(ASSETS)
Adaptando de SAM para MobileSAM
O MobileSAM mantém o mesmo pipeline do SAM original, incluindo pré-processamento, pós-processamento e todas as interfaces. Isso significa que você pode fazer a transição do SAM para o MobileSAM com mudanças mínimas no seu fluxo de trabalho.
A principal diferença é o codificador de imagem: o MobileSAM substitui o codificador ViT-H original (632 milhões de parâmetros) por um codificador Tiny-ViT muito menor (5 milhões de parâmetros). Em uma única GPU, o MobileSAM processa uma imagem em cerca de 12ms (8ms para o codificador, 4ms para o decodificador de máscara).
Comparação do codificador de imagem baseado em ViT
Codificador de Imagem | SAM Original | MobileSAM |
---|---|---|
Parâmetros | 611M | 5M |
Velocidade | 452ms | 8ms |
Decodificador de Máscara Guiado por Prompt
Decodificador de Máscara | SAM Original | MobileSAM |
---|---|---|
Parâmetros | 3.876M | 3.876M |
Velocidade | 4ms | 4ms |
Comparação do Pipeline Completo
Pipeline Completo (Enc+Dec) | SAM Original | MobileSAM |
---|---|---|
Parâmetros | 615M | 9.66M |
Velocidade | 456ms | 12 ms |
O desempenho do MobileSAM e do SAM original é ilustrado abaixo usando prompts de ponto e caixa.
MobileSAM é aproximadamente 5 vezes menor e 7 vezes mais rápido que o FastSAM. Para mais detalhes, visite a página do projeto MobileSAM.
Testando o MobileSAM na Ultralytics
Assim como o SAM original, a Ultralytics fornece uma interface simples para testar o MobileSAM, suportando prompts de Ponto e Caixa.
Download do Modelo
Baixe os pesos pré-treinados do MobileSAM 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 da 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]])
Ambos MobileSAM
e SAM
compartilham a mesma API. Para obter mais detalhes sobre o uso, consulte o Documentação SAM.
Criar Automaticamente Conjuntos de Dados de Segmentação Usando um Modelo de Detecção
Para anotar automaticamente seu conjunto de dados com a estrutura Ultralytics, use o auto_annotate
função conforme mostrado abaixo:
Exemplo
from ultralytics.data.annotator import auto_annotate
auto_annotate(data="path/to/images", det_model="yolo11x.pt", sam_model="mobile_sam.pt")
Argumento | Tipo | Padrão | Descrição |
---|---|---|---|
data |
str |
obrigatório | Caminho para o diretório contendo as imagens alvo para anotação ou segmentação. |
det_model |
str |
'yolo11x.pt' |
Caminho do modelo de detecção de objetos YOLO para detecção de objetos inicial. |
sam_model |
str |
'sam_b.pt' |
Caminho do modelo SAM para segmentação (suporta variantes SAM, SAM2 e modelos mobile_sam). |
device |
str |
'' |
Dispositivo de computação (por exemplo, 'cuda:0', 'cpu' ou '' para detecção automática de dispositivo). |
conf |
float |
0.25 |
Limite de confiança da detecção YOLO para filtrar detecções fracas. |
iou |
float |
0.45 |
Limite de IoU para Supressão Não Máxima 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 detecções por imagem para eficiência de memória. |
classes |
list[int] |
None |
Lista de índices de classe para detectar (por exemplo, [0, 1] para pessoa e bicicleta). |
output_dir |
str |
None |
Diretório para salvar as anotações (o padrão é './labels' relativo ao caminho dos dados). |
Citações e Agradecimentos
Se o MobileSAM for útil em sua pesquisa ou desenvolvimento, considere 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}
}
Leia o artigo completo do MobileSAM no arXiv.
FAQ
O que é o MobileSAM e como ele difere do modelo SAM original?
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 do SAM original, mas substitui o grande codificador ViT-H (632 milhões de parâmetros) por um codificador Tiny-ViT compacto (5 milhões de parâmetros). Isso resulta no MobileSAM sendo cerca de 5 vezes menor e 7 vezes mais rápido que o SAM original, operando a aproximadamente 12ms por imagem versus os 456ms do SAM. Explore mais sobre a implementação do MobileSAM no repositório MobileSAM GitHub.
Como posso testar o MobileSAM usando Ultralytics?
Testar o MobileSAM na Ultralytics é simples. Você pode usar prompts de Ponto e 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, consulte a seção Testando MobileSAM na Ultralytics.
Por que devo usar o MobileSAM para 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. Comparado 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. Sua eficiência permite que dispositivos móveis realizem segmentação de imagem em tempo real sem latência significativa. Além disso, o MobileSAM suporta modo de Inferência otimizado para desempenho móvel.
Como o MobileSAM foi Treinado e o Código de Treinamento Está Disponível?
O MobileSAM foi treinado em uma única GPU com um conjunto de dados de 100 mil imagens (1% das imagens originais) em menos de um dia. Embora o código de treinamento seja lançado no futuro, você pode acessar atualmente os pesos pré-treinados e os detalhes de implementação no repositório MobileSAM GitHub.
Quais são os principais casos de uso do MobileSAM?
O MobileSAM foi projetado para segmentação de imagem rápida e eficiente em ambientes móveis e de borda. Os principais casos de uso incluem:
- Detecção e segmentação de objetos em tempo real para aplicações móveis
- Processamento de imagem de baixa latência em dispositivos com capacidade computacional limitada
- Integração em aplicativos móveis com tecnologia de IA para realidade aumentada (AR), análise e muito mais
Para mais detalhes sobre casos de uso e desempenho, consulte Adaptação de SAM para MobileSAM e o blog da Ultralytics sobre aplicações MobileSAM.