Saltar para o conteúdo

MobileSAM Logótipo

Segmento móvel Qualquer coisa (MobileSAM)

O documento MobileSAM está agora disponível no arXiv.

Uma demonstração de MobileSAM em execução num CPU pode ser acedida nesta ligação de demonstração. O desempenho num Mac i5 CPU demora aproximadamente 3 segundos. Na demonstração Hugging Face , a interface e as CPUs de desempenho inferior contribuem para uma resposta mais lenta, mas continua a funcionar eficazmente.



Ver: Como efetuar inferências com MobileSAM utilizando Ultralytics | Guia passo-a-passo 🎉

MobileSAM está implementado em vários projectos, incluindo Grounding-SAM, AnyLabeling e Segment Anything in 3D.

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

Modelos disponíveis, tarefas suportadas e modos de funcionamento

Esta tabela apresenta os modelos disponíveis com os seus pesos pré-treinados específicos, as tarefas que suportam e a sua compatibilidade com diferentes modos de funcionamento como Inferência, Validação, Treino e Exportação, indicados por emojis ✅ para modos suportados e emojis ❌ para modos não suportados.

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

Adaptação de SAM para MobileSAM

Uma vez que o MobileSAM mantém o mesmo pipeline que o SAM original, incorporámos o pré-processamento, o pós-processamento e todas as outras interfaces do original. Consequentemente, quem utiliza atualmente o SAM original pode fazer a transição para MobileSAM com um esforço mínimo.

MobileSAM tem um desempenho comparável ao do SAM original e mantém o mesmo pipeline, com exceção de uma alteração no codificador de imagem. Especificamente, substituímos o codificador ViT-H pesado original (632M) por um Tiny-ViT mais pequeno (5M). Num único GPU, MobileSAM funciona a cerca de 12ms por imagem: 8ms no codificador de imagem e 4ms no descodificador de máscara.

O quadro seguinte apresenta uma comparação dos codificadores de imagem baseados em ViT:

Codificador de imagem Original SAM MobileSAM
Parâmetros 611M 5M
Velocidade 452ms 8ms

Tanto o SAM original como o MobileSAM utilizam o mesmo descodificador de máscaras guiado por pedidos:

Descodificador de máscaras Original SAM MobileSAM
Parâmetros 3.876M 3.876M
Velocidade 4ms 4ms

Eis a comparação de toda a conduta:

Pipeline completo (Enc+Dec) Original SAM MobileSAM
Parâmetros 615M 9.66M
Velocidade 456ms 12ms

O desempenho do MobileSAM e do SAM original é demonstrado utilizando um ponto e uma caixa como prompts.

Imagem com ponto como estímulo

Imagem com caixa como prompt

Com o seu desempenho superior, o MobileSAM é aproximadamente 5 vezes mais pequeno e 7 vezes mais rápido do que o atual FastSAM. Mais detalhes estão disponíveis na página do projetoMobileSAM .

Teste MobileSAM em Ultralytics

Tal como o original SAM, oferecemos um método de teste simples em Ultralytics, incluindo modos para os avisos Ponto e Caixa.

Descarregar modelo

Pode descarregar o modelo aqui.

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]])

Implementámos MobileSAM e SAM utilizando a mesma API. Para mais informações sobre a utilização, consulte a secção SAM página.

Criar automaticamente conjuntos de dados de segmentação com base num modelo de deteção

Para anotar automaticamente o seu conjunto de dados utilizando a estrutura Ultralytics , utilize o auto_annotate como demonstrado 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 "sam2_b.pt" SAM2 caminho do modelo para segmentação (suporta variantes t/s/b/l e SAM2.1) e modelos 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 o site MobileSAM for útil no seu trabalho de investigação ou desenvolvimento, considere a possibilidade de citar o nosso 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}
}

FAQ

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

MobileSAM é um modelo de segmentação de imagem leve e rápido, concebido para aplicações móveis. Mantém o mesmo pipeline que o SAM original, mas substitui o pesado codificador ViT-H (632M parâmetros) por um codificador Tiny-ViT mais pequeno (5M parâmetros). Esta alteração faz com que o MobileSAM seja aproximadamente 5 vezes mais pequeno e 7 vezes mais rápido do que o SAM original. Por exemplo, o MobileSAM funciona a cerca de 12ms por imagem, em comparação com os 456ms do SAM original. Pode saber mais sobre a implementação do MobileSAM em vários projectos aqui.

Como posso testar MobileSAM utilizando Ultralytics?

O teste MobileSAM em Ultralytics pode ser efectuado através de métodos simples. Pode utilizar as instruções Ponto e Caixa para prever segmentos. Aqui está um 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])

Também pode consultar a secção Testes MobileSAM para obter mais informações.

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

MobileSAM é ideal para aplicações móveis devido à sua arquitetura leve e à sua rápida velocidade de inferência. Em comparação com o SAM original, o MobileSAM é aproximadamente 5 vezes mais pequeno e 7 vezes mais rápido, o que o torna adequado para ambientes em que os recursos computacionais são limitados. Esta eficiência garante que os dispositivos móveis podem efetuar a segmentação de imagens em tempo real sem latência significativa. Além disso, os modelos do MobileSAM, como o Inference, são optimizados para desempenho móvel.

Como é que o MobileSAM foi formado e o código de formação está disponível?

MobileSAM foi treinado num único GPU com um conjunto de dados de 100k, que é 1% das imagens originais, em menos de um dia. Embora o código de treino venha a ser disponibilizado no futuro, pode atualmente explorar outros aspectos do MobileSAM no repositórioMobileSAM do GitHub. Este repositório inclui pesos pré-treinados e pormenores de implementação para várias aplicações.

Quais são os principais casos de utilização de MobileSAM?

MobileSAM foi concebido para a segmentação rápida e eficiente de imagens em ambientes móveis. 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 recursos computacionais limitados.
  • Integração em aplicações móveis baseadas em IA para tarefas como a realidade aumentada (RA) e a análise em tempo real.

Para casos de utilização mais detalhados e comparações de desempenho, consulte a secção Adaptação de SAM a MobileSAM.

📅C riado há 1 ano ✏️ Atualizado há 23 dias

Comentários