Saltar al contenido

MobileSAM Logotipo

Segmento móvil Cualquier cosa (MobileSAM)

El artículo MobileSAM ya está disponible en arXiv.

Puedes acceder a una demostración de MobileSAM ejecutándose en un CPU en este enlace de demostración. El rendimiento en un Mac i5 CPU tarda aproximadamente 3 segundos. En la demo Hugging Face , la interfaz y las CPU de menor rendimiento contribuyen a una respuesta más lenta, pero sigue funcionando eficazmente.



Observa: Cómo ejecutar la inferencia con MobileSAM utilizando Ultralytics | Guía paso a paso 🎉

MobileSAM se aplica en varios proyectos, como Grounding-SAM, AnyLabeling y Segment Anything en 3D.

MobileSAM se entrena en un solo GPU con un conjunto de datos de 100k (1% de las imágenes originales) en menos de un día. El código para este entrenamiento estará disponible en el futuro.

Modelos disponibles, tareas admitidas y modos de funcionamiento

Esta tabla presenta los modelos disponibles con sus pesos específicos preentrenados, las tareas que admiten y su compatibilidad con distintos modos de funcionamiento como Inferencia, Validación, Entrenamiento y Exportación, indicados con ✅ emojis para los modos admitidos y ❌ emojis para los modos no admitidos.

Tipo de modeloPesos preentrenadosTareas admitidasInferenciaValidaciónFormaciónExportar
MobileSAMmobile_sam.ptSegmentación de instancias

Adaptación de SAM a MobileSAM

Como MobileSAM conserva el mismo proceso que el original SAM, hemos incorporado el preprocesamiento, el postprocesamiento y todas las demás interfaces del original. En consecuencia, quienes utilicen actualmente el original SAM pueden pasar a MobileSAM con un esfuerzo mínimo.

MobileSAM tiene un rendimiento comparable al original SAM y conserva el mismo pipeline, salvo por un cambio en el codificador de imágenes. En concreto, sustituimos el pesado codificador ViT-H original (632M) por un Tiny-ViT más pequeño (5M). En un único GPU, MobileSAM funciona a unos 12ms por imagen: 8ms en el codificador de imágenes y 4ms en el descodificador de máscaras.

La tabla siguiente ofrece una comparación de los codificadores de imágenes basados en ViT:

Codificador de imágenesOriginal SAMMobileSAM
Parámetros611M5M
Velocidad452ms8ms

Tanto el original SAM como MobileSAM utilizan el mismo descodificador de máscaras guiado por instrucciones:

Descodificador de máscarasOriginal SAMMobileSAM
Parámetros3.876M3.876M
Velocidad4ms4ms

Aquí tienes la comparación de toda la tubería:

Tubería completa (Enc+Dec)Original SAMMobileSAM
Parámetros615M9.66M
Velocidad456 ms12ms

Se demuestra el funcionamiento de MobileSAM y del original SAM utilizando un punto y una caja como indicaciones.

Imagen con punto como indicador

Imagen con Caja como Prompt

Con su rendimiento superior, MobileSAM es aproximadamente 5 veces más pequeño y 7 veces más rápido que el actual FastSAM. Puedes encontrar más detalles en la página del proyectoMobileSAM .

Prueba MobileSAM en Ultralytics

Al igual que en el original SAM, ofrecemos un método de prueba sencillo en Ultralytics, que incluye modos para indicaciones de Punto y de Caja.

Descarga de modelos

Puedes descargar el modelo aquí.

Indicación de puntos

Ejemplo

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

Caja Prompt

Ejemplo

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

Hemos puesto en marcha MobileSAM y SAM utilizando la misma API. Para más información sobre su uso, consulta el SAM página.

Citas y agradecimientos

Si encuentras útil MobileSAM en tu trabajo de investigación o desarrollo, considera la posibilidad de citar nuestro 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}
}

PREGUNTAS FRECUENTES

¿Qué es MobileSAM y en qué se diferencia del modelo original SAM ?

MobileSAM es un modelo de segmentación de imágenes ligero y rápido, diseñado para aplicaciones móviles. Conserva el mismo pipeline que el original SAM pero sustituye el pesado codificador ViT-H (632M de parámetros) por un codificador Tiny-ViT más pequeño (5M de parámetros). Este cambio hace que MobileSAM sea aproximadamente 5 veces más pequeño y 7 veces más rápido que el SAM original. Por ejemplo, MobileSAM funciona a unos 12 ms por imagen, frente a los 456 ms del SAM original. Puedes obtener más información sobre la implementación de MobileSAM en varios proyectos aquí.

¿Cómo puedo probar MobileSAM utilizando Ultralytics?

Probar MobileSAM en Ultralytics puede realizarse mediante métodos sencillos. Puedes utilizar indicaciones de Punto y de Caja para predecir segmentos. Aquí tienes un ejemplo que utiliza un indicador de Punto:

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

También puedes consultar la sección Pruebas MobileSAM para más detalles.

¿Por qué debería utilizar MobileSAM para mi aplicación móvil?

MobileSAM es ideal para aplicaciones móviles por su arquitectura ligera y su rápida velocidad de inferencia. Comparado con el original SAM, MobileSAM es aproximadamente 5 veces más pequeño y 7 veces más rápido, lo que lo hace adecuado para entornos en los que los recursos computacionales son limitados. Esta eficiencia garantiza que los dispositivos móviles puedan realizar la segmentación de imágenes en tiempo real sin una latencia significativa. Además, los modelos de MobileSAM, como la Inferencia, están optimizados para el rendimiento móvil.

¿Cómo se formó MobileSAM , y está disponible el código de formación?

MobileSAM se entrenó en un solo GPU con un conjunto de datos de 100k, que es el 1% de las imágenes originales, en menos de un día. Aunque el código de entrenamiento estará disponible en el futuro, actualmente puedes explorar otros aspectos de MobileSAM en el repositorio GitHub MobileSAM . Este repositorio incluye pesos preentrenados y detalles de implementación para diversas aplicaciones.

¿Cuáles son los principales casos de uso de MobileSAM?

MobileSAM está diseñado para una segmentación de imágenes rápida y eficaz en entornos móviles. Los principales casos de uso son:

  • Detección y segmentación de objetos en tiempo real para aplicaciones móviles.
  • Procesado de imágenes de baja latencia en dispositivos con recursos computacionales limitados.
  • Integración en aplicaciones móviles basadas en IA para tareas como la realidad aumentada (RA) y el análisis en tiempo real.

Para ver casos de uso más detallados y comparaciones de rendimiento, consulta la sección Adaptación de SAM a MobileSAM.

📅 C reado hace 1 año ✏️ Actualizado hace 1 mes

Comentarios