Segmento móvil Cualquier cosa (MobileSAM)
El artículo MobileSAM ya está disponible en arXiv.
Se puede 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 demostración de 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 in 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 de 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 mediante emojis ✅ para los modos admitidos y emojis ❌ para los modos no admitidos.
Tipo de modelo | Pesas preentrenadas | Tareas admitidas | Inferencia | Validación | Formación | Exportar |
---|---|---|---|---|---|---|
MobileSAM | mobile_sam.pt | Segmentación de instancias | ✅ | ❌ | ❌ | ❌ |
Adaptación de SAM a MobileSAM
Dado que MobileSAM conserva el mismo proceso que el original SAM, hemos incorporado el preprocesamiento, el postprocesamiento y todas las demás interfaces del original. Por consiguiente, quienes utilicen actualmente el original SAM pueden pasar a MobileSAM con un esfuerzo mínimo.
MobileSAM tiene un rendimiento comparable al del original SAM y mantiene 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: 8 ms en el codificador de imágenes y 4 ms en el descodificador de máscaras.
En la tabla siguiente se comparan los codificadores de imágenes basados en ViT:
Codificador de imágenes | Original SAM | MobileSAM |
---|---|---|
Parámetros | 611M | 5M |
Velocidad | 452ms | 8ms |
Tanto el original SAM como MobileSAM utilizan el mismo descodificador de máscaras guiado por instrucciones:
Decodificador de máscaras | Original SAM | MobileSAM |
---|---|---|
Parámetros | 3.876M | 3.876M |
Velocidad | 4ms | 4ms |
He aquí la comparación de toda la tubería:
Tubería completa (Enc+Dec) | Original SAM | MobileSAM |
---|---|---|
Parámetros | 615M | 9.66M |
Velocidad | 456 ms | 12ms |
Se demuestra el funcionamiento de MobileSAM y del original SAM utilizando un punto y un recuadro como indicadores.
Con su rendimiento superior, MobileSAM es aproximadamente 5 veces más pequeño y 7 veces más rápido que el actual FastSAM. Más detalles en la página del proyectoMobileSAM .
Pruebas MobileSAM en Ultralytics
Al igual que el original SAM, ofrecemos un método de prueba sencillo en Ultralytics, que incluye modos tanto para indicaciones de punto como de caja.
Descarga de modelos
Puede descargar el modelo aquí.
Punto 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 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 aplicado MobileSAM
y SAM
utilizando la misma API. Para más información sobre su uso, consulte la página SAM página.
Citas y agradecimientos
Si encuentra útil MobileSAM en su trabajo de investigación o desarrollo, considere la posibilidad de citar nuestro artículo:
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 la misma estructura que el original SAM , pero sustituye el pesado codificador ViT-H (632 millones de parámetros) por un codificador Tiny-ViT más pequeño (5 millones 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 original SAM. Por ejemplo, MobileSAM funciona a unos 12 ms por imagen, frente a los 456 ms del SAM original. Puede obtener más información sobre la implementación de MobileSAM en varios proyectos aquí.
¿Cómo puedo probar MobileSAM utilizando Ultralytics?
La comprobación de MobileSAM en Ultralytics puede realizarse mediante métodos sencillos. Para predecir segmentos, puede utilizar los indicadores Punto y Caja. Aquí hay un ejemplo usando 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 puede 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 gracias a su arquitectura ligera y a 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 Inference, están optimizados para el rendimiento móvil.
¿Cómo se formó MobileSAM y está disponible el código de formación?
MobileSAM fue entrenado 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 varias aplicaciones.
¿Cuáles son los principales casos de uso de MobileSAM?
MobileSAM está diseñado para la segmentación rápida y eficaz de imágenes en entornos móviles. Los principales casos de uso son:
- Detección y segmentación de objetos en tiempo real para aplicaciones móviles.
- Procesamiento de imágenes de baja latencia en dispositivos con recursos informáticos 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 conocer casos de uso y comparaciones de rendimiento más detallados, consulte la sección Adaptación de SAM a MobileSAM.