Segmento móvel Qualquer coisa (MobileSAM)
MobileSAM é um modelo de segmentação de imagem compacto e eficiente, concebido especificamente para dispositivos móveis e periféricos. Concebido para trazer o poder do modelo Segment Anything Model (SAM) para ambientes com computação limitada, 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, MobileSAM fornece resultados de segmentação impressionantes com uma fração dos requisitos de tamanho e velocidade dos seus antecessores.
Ver: Como efetuar inferências com MobileSAM utilizando Ultralytics | Guia passo-a-passo 🎉
MobileSAM foi adotado numa variedade de projectos, incluindo o SAM, AnyLabeling e Segment Anything in 3D.
MobileSAM foi treinado numa única GPU utilizando um conjunto de dados de 100 mil imagens (1% das imagens originais) em menos de um dia. O código de treino será lançado no futuro.
Modelos disponíveis, tarefas suportadas e modos de funcionamento
A tabela abaixo descreve o modelo MobileSAM disponível, seus pesos pré-treinados, tarefas suportadas e compatibilidade com diferentes modos de operação, como Inferência, Validação, Treinamento 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 | Formação | Exportação |
---|---|---|---|---|---|---|
MobileSAM | mobile_sam.pt | Segmentação de instâncias | ✅ | ❌ | ❌ | ❌ |
Comparação entre MobileSAM e YOLO
A comparação seguinte realça as diferenças entre as variantes SAM do Meta, MobileSAM, e os modelos de segmentação mais pequenos da Ultralytics, incluindo o 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 combackbone YOLOv8 | 23.7 | 11.8 | 55.9 |
Ultralytics YOLOv8n | 6,7 (11,7x mais pequeno) | 3,4 (menos 11,4x) | 24,5 (1061x mais rápido) |
Ultralytics YOLO11n-seg | 5,9 (13,2x mais pequeno) | 2,9 (13,4x menos) | 30.1 (864x mais rápido) |
Esta comparação demonstra as diferenças substanciais em termos de tamanho e 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 e o YOLO11n-seg - são significativamente mais pequenos, mais rápidos e mais eficientes do ponto de vista computacional.
Os testes foram efectuados num Apple M4 Pro de 2025 com 24 GB de RAM, utilizando 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)
Adaptação de SAM para MobileSAM
MobileSAM mantém o mesmo pipeline que o original SAMoriginal, incluindo o pré-processamento, o pós-processamento e todas as interfaces. Isto significa que pode fazer a transição do SAM para o MobileSAM com alterações mínimas no seu fluxo de trabalho.
A principal diferença é o codificador de imagem: MobileSAM substitui o codificador ViT-H original (632M parâmetros) por um codificador Tiny-ViT muito mais pequeno (5M parâmetros). Numa única GPU, MobileSAM processa uma imagem em cerca de 12ms (8ms para o codificador, 4ms para o descodificador de máscara).
Comparação de codificadores de imagem baseados em ViT
Codificador de imagem | Original SAM | MobileSAM |
---|---|---|
Parâmetros | 611M | 5M |
Velocidade | 452ms | 8ms |
Descodificador de máscaras orientado por prompts
Descodificador de máscaras | Original SAM | MobileSAM |
---|---|---|
Parâmetros | 3.876M | 3.876M |
Velocidade | 4ms | 4ms |
Comparação de todo o pipeline
Pipeline completo (Enc+Dec) | Original SAM | MobileSAM |
---|---|---|
Parâmetros | 615M | 9.66M |
Velocidade | 456ms | 12ms |
O desempenho do MobileSAM e do SAM original é ilustrado a seguir, utilizando os avisos de ponto e de caixa.
MobileSAM é aproximadamente 5 vezes mais pequena e 7 vezes mais rápida do que a FastSAM. Para mais informações, visite a página do projetoMobileSAM .
Teste MobileSAM em Ultralytics
Tal como o original SAMoriginal, Ultralytics fornece uma interface simples para testar MobileSAM, suportando tanto os prompts Point como Box.
Descarregar modelo
Descarregue os pesos pré-treinados do MobileSAM a partir dos activosUltralytics .
Ponto Prompt
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]])
Caixa Prompt
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
partilham a mesma API. Para mais pormenores de utilização, consulte a Documentação SAM.
Criar automaticamente conjuntos de dados de segmentação utilizando um modelo de deteção
Para anotar automaticamente o seu conjunto de dados com a estrutura Ultralytics , utilize a função auto_annotate
como 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 | Predefinição | Descrição |
---|---|---|---|
data |
str |
necessário | Caminho para o diretório que contém imagens alvo para anotação ou segmentação. |
det_model |
str |
'yolo11x.pt' |
YOLO caminho do modelo de deteção para a deteção inicial de objectos. |
sam_model |
str |
'sam_b.pt' |
Caminho do modelo SAM para segmentação (suporta modelos SAM, variantes SAM2 e mobile_sam). |
device |
str |
'' |
Dispositivo de cálculo (por exemplo, 'cuda:0', 'cpu', ou '' para a deteção automática do dispositivo). |
conf |
float |
0.25 |
YOLO limiar de confiança da deteção para filtrar as detecções fracas. |
iou |
float |
0.45 |
Limiar 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 a detetar (por exemplo,, [0, 1] para pessoa e bicicleta). |
output_dir |
str |
None |
Guardar o diretório para as anotações (a predefinição é './labels' em relação ao caminho dos dados). |
Citações e agradecimentos
Se MobileSAM for útil para a sua investigação ou desenvolvimento, considere a possibilidade de citar o seguinte documento:
@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 MobileSAM no arXiv.
FAQ
O que é o MobileSAM e em que é que difere do modelo SAM original?
MobileSAM é um modelo de segmentação de imagem leve e rápido, optimizado para aplicações móveis e de ponta. Mantém o mesmo pipeline que o SAM original, mas substitui o grande codificador ViT-H (632M parâmetros) por um codificador Tiny-ViT compacto (5M parâmetros). Isto faz com que MobileSAM seja cerca de 5 vezes mais pequeno e 7 vezes mais rápido do que o SAM original, funcionando a cerca de 12 ms por imagem, em comparação com os 456 ms do SAM. Explore mais sobre a implementação do MobileSAM no repositórioMobileSAM GitHub.
Como posso testar o MobileSAM usando o Ultralytics?
Testar o MobileSAM no Ultralytics é simples. Pode utilizar prompts Point e Box para prever segmentos. Por exemplo, usando um prompt Point:
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 informações, consulte a secção Testar o MobileSAM no Ultralytics.
Porque devo utilizar MobileSAM para a minha aplicação móvel?
MobileSAM é ideal para aplicações móveis e de ponta devido ao seu design leve e à sua rápida velocidade de inferência. Em comparação com o SAM original, MobileSAM é cerca de 5 vezes mais pequeno e 7 vezes mais rápido, o que o torna adequado para a segmentação em tempo real em dispositivos com recursos computacionais limitados. A sua eficiência permite que os dispositivos móveis efectuem a segmentação de imagens em tempo real sem latência significativa. Além disso, MobileSAM suporta o modo de inferência optimizado para desempenho móvel.
Como é que o MobileSAM foi formado e o código de formação está disponível?
MobileSAM foi treinado numa ú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 treino venha a ser lançado no futuro, pode atualmente aceder a pesos pré-treinados e a detalhes de implementação a partir do repositórioMobileSAM GitHub.
Quais são os principais casos de utilização do MobileSAM?
MobileSAM foi concebido para uma segmentação de imagem rápida e eficiente em ambientes móveis e de ponta. Os principais casos de utilização incluem:
- Deteção e segmentação de objectos em tempo real para aplicações móveis
- Processamento de imagens de baixa latência em dispositivos com computação limitada
- Integração em aplicações móveis alimentadas por IA para realidade aumentada (AR), análise e muito mais
Para mais informações sobre casos de utilização e desempenho, consulte Adaptação do SAM ao MobileSAM e o blogueUltralytics sobre aplicações MobileSAM .