Ir al contenido

MobileSAM Logotipo

Segmento móvil Cualquier cosa (MobileSAM)

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

Se puede acceder a una demostración de MobileSAM funcionando en una CPU en este enlace de demostración. La ejecución en una CPU Mac i5 dura aproximadamente 3 segundos. En la 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

Comparación entre MobileSAM y YOLO

Aquí comparamos las variantes SAM de Meta, incluida MobileSAM, con el modelo de segmentación más pequeño de Ultralytics , YOLO11n-seg:

Modelo Tamaño (MB) Parámetros (M) VelocidadCPU) (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 conred troncal YOLOv8 23.7 11.8 55.9
Ultralytics YOLOv8n 6,7 (11,7 veces menor) 3,4 (11,4 veces menos) 24,5 (1061 veces más rápido)
Ultralytics YOLO11n-seg 5,9 (13,2x menor) 2,9 (13,4 veces menos) 30,1 (864 veces más rápido)

Esta comparación demuestra las diferencias sustanciales de tamaño y velocidad de los modelos entre las variantes de SAM y los modelos de segmentación de YOLO . Mientras que SAM proporciona capacidades únicas de segmentación automática, los modelos YOLO , en particular YOLOv8n y YOLO11n-seg, son significativamente más pequeños, más rápidos y más eficientes desde el punto de vista computacional.

Pruebas realizadas en un Apple M4 Pro 2025 con 24 GB de RAM utilizando torch==2.6.0 y ultralytics==8.3.90. Para reproducir esta prueba:

Ejemplo

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)

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.

Imagen con punto como indicador

Imagen con recuadro

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

Igual que el original SAMoriginal, en Ultralytics ofrecemos un método de prueba sencillo, que incluye modos tanto para preguntas puntuales como para preguntas de caja.

Descarga de modelos

Puede descargar los pesos preentrenados MobileSAM en ultralytics

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

Hemos aplicado MobileSAM y SAM utilizando la misma API. Para más información sobre su uso, consulte la página SAM página.

Creación automática de conjuntos de datos de segmentación a partir de un modelo de detección

Para anotar automáticamente su conjunto de datos utilizando el marco Ultralytics , utilice la función auto_annotate como se muestra a continuación:

Ejemplo

from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolo11x.pt", sam_model="mobile_sam.pt")
Argumento Tipo Por defecto Descripción
data str obligatorio Ruta al directorio que contiene las imágenes de destino para la anotación o segmentación.
det_model str 'yolo11x.pt' YOLO trayectoria del modelo de detección para la detección inicial de objetos.
sam_model str 'sam_b.pt' Trayectoria del modelo SAM para la segmentación (admite las variantes SAM, SAM2 y los modelos mobile_sam).
device str '' Dispositivo de cálculo (por ejemplo, 'cuda:0', 'cpu', o '' para la detección automática de dispositivos).
conf float 0.25 YOLO umbral de confianza de detección para filtrar las detecciones débiles.
iou float 0.45 Umbral IoU de Supresión No Máxima para filtrar cajas solapadas.
imgsz int 640 Tamaño de entrada para redimensionar las imágenes (debe ser múltiplo de 32).
max_det int 300 Número máximo de detecciones por imagen para ahorrar memoria.
classes list[int] None Lista de índices de clase a detectar (por ejemplo, [0, 1] para persona y bicicleta).
output_dir str None Guardar directorio para anotaciones (por defecto './labels' relativo a la ruta de datos).

Citas y agradecimientos

Si encuentra útil MobileSAM en su trabajo de investigación o desarrollo, considere la posibilidad de citar nuestro artículo:

@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 la misma estructura que el SAM original, 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 SAM original. 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 en el repositorio GitHub deMobileSAM .

¿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.

Creado hace 1 año ✏️ Actualizado hace 7 días

Comentarios