Ir al contenido

Logotipo de MobileSAM

Mobile Segment Anything (MobileSAM)

MobileSAM es un modelo de segmentación de imágenes compacto y eficiente, creado específicamente para dispositivos móviles y de borde. Diseñado para llevar la potencia del Segment Anything Model de Meta (SAM) a entornos con capacidad de cálculo limitada, MobileSAM ofrece una segmentación casi instantánea manteniendo la compatibilidad con la canalización SAM original. Ya sea que esté desarrollando aplicaciones en tiempo real o implementaciones ligeras, MobileSAM proporciona resultados de segmentación impresionantes con una fracción del tamaño y los requisitos de velocidad de sus predecesores.



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

MobileSAM se ha adoptado en una variedad de proyectos, incluyendo Grounding-SAM, AnyLabeling y Segment Anything in 3D.

MobileSAM se entrenó en una sola GPU utilizando un conjunto de datos de 100k imágenes (1% de las imágenes originales) en menos de un día. El código de entrenamiento se publicará en el futuro.

Modelos disponibles, tareas compatibles y modos de funcionamiento

La siguiente tabla describe el modelo MobileSAM disponible, sus pesos pre-entrenados, las tareas admitidas y la compatibilidad con diferentes modos de funcionamiento, como Inferencia, Validación, Entrenamiento y Exportación. Los modos admitidos se indican con ✅ y los modos no admitidos con ❌.

Tipo de Modelo Pesos Pre-entrenados Tareas admitidas Inferencia Validación Entrenamiento Exportar
MobileSAM mobile_sam.pt Segmentación de instancias

Comparación de MobileSAM vs YOLO

La siguiente comparación destaca las diferencias entre las variantes SAM de Meta, MobileSAM y los modelos de segmentación más pequeños de Ultralytics, incluyendo YOLO11n-seg:

Modelo Tamaño
(MB)
Parámetros
(M)
Velocidad (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-s con backbone YOLOv8 23.7 11.8 55.9
Ultralytics YOLOv8n-seg 6.7 (11.7 veces más pequeño) 3.4 (11.4 veces menos) 24.5 (1061 veces más rápido)
Ultralytics YOLO11n-seg 5.9 (13.2 veces más pequeño) 2.9 (13.4 veces menos) 30.1 (864 veces más rápido)

Esta comparación demuestra las diferencias sustanciales en el tamaño y la velocidad del modelo entre las variantes de SAM y los modelos de segmentación YOLO. Si bien los modelos SAM ofrecen capacidades únicas de segmentación automática, los modelos YOLO, especialmente YOLOv8n-seg y YOLO11n-seg, son significativamente más pequeños, rápidos y computacionalmente eficientes.

Las pruebas se realizaron en un Apple M4 Pro 2025 con 24 GB de RAM utilizando torch==2.6.0 y ultralytics==8.3.90. Para reproducir estos resultados:

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

MobileSAM conserva la misma canalización que el SAM original, incluido el preprocesamiento, el postprocesamiento y todas las interfaces. Esto significa que puede realizar la transición de SAM a MobileSAM con cambios mínimos en su flujo de trabajo.

La diferencia clave es el codificador de imágenes: MobileSAM reemplaza el codificador ViT-H original (632 millones de parámetros) con un codificador Tiny-ViT mucho más pequeño (5 millones de parámetros). En una sola GPU, MobileSAM procesa una imagen en unos 12 ms (8 ms para el codificador, 4 ms para el decodificador de máscara).

Comparación del codificador de imágenes basado en ViT

Codificador de imágenes SAM original MobileSAM
Parámetros 611M 5M
Velocidad 452ms 8ms

Decodificador de Máscara Guiado por Prompt

Decodificador de Máscara SAM original MobileSAM
Parámetros 3.876M 3.876M
Velocidad 4ms 4ms

Comparación de la tubería completa

Pipeline completo (Enc+Dec) SAM original MobileSAM
Parámetros 615M 9.66M
Velocidad 456ms 12ms

El rendimiento de MobileSAM y el SAM original se ilustra a continuación utilizando indicaciones tanto de puntos como de cajas.

Imagen con punto como indicación

Imagen con cuadro como indicación

MobileSAM es aproximadamente 7 veces más pequeño y 5 veces más rápido que FastSAM. Para más detalles, visite la página del proyectoMobileSAM .

Probando MobileSAM en Ultralytics

Al igual que SAM original, Ultralytics proporciona una interfaz sencilla para probar MobileSAM, que admite indicaciones tanto de puntos como de cuadros.

Descarga del Modelo

Descargue los pesos preentrenados de MobileSAM desde los recursos de Ultralytics.

Indicación de punto

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

Prompt de caja

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

Ambos MobileSAM y SAM comparten la misma API. Para obtener más detalles sobre el uso, consulte el Documentación de SAM.

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

Para anotar automáticamente su conjunto de datos con el framework de Ultralytics, utilice el auto_annotate función 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 Predeterminado 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' Ruta del modelo de detección YOLO para la detección inicial de objetos.
sam_model str 'sam_b.pt' Ruta del modelo SAM para la segmentación (admite las variantes SAM, SAM2 y los modelos mobile_sam).
device str '' Dispositivo de cálculo (p. ej., 'cuda:0', 'cpu' o '' para la detección automática de dispositivos).
conf float 0.25 Umbral de confianza de detección YOLO para filtrar detecciones débiles.
iou float 0.45 Umbral de IoU para la supresión no máxima para filtrar cuadros superpuestos.
imgsz int 640 Tamaño de entrada para redimensionar imágenes (debe ser múltiplo de 32).
max_det int 300 Número máximo de detecciones por imagen para eficiencia de memoria.
classes list[int] None Lista de índices de clase para detectar (p. ej., [0, 1] para persona y bicicleta).
output_dir str None Directorio para guardar las anotaciones (por defecto './labels' relativo a la ruta de datos).

Citas y agradecimientos

Si MobileSAM es útil en su investigación o desarrollo, considere citar el siguiente 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}
}

Lea el artículo completo de MobileSAM en arXiv.

Preguntas frecuentes

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

MobileSAM es un modelo ligero y rápido de segmentación de imágenes optimizado para aplicaciones móviles y en el borde. Mantiene la misma canalización que el SAM original, pero reemplaza el gran codificador ViT-H (632M parámetros) con un codificador Tiny-ViT compacto (5M parámetros). Esto resulta en que MobileSAM sea aproximadamente 5 veces más pequeño y 7 veces más rápido que el SAM original, operando a aproximadamente 12 ms por imagen frente a los 456 ms de SAM. Explore más sobre la implementación de MobileSAM en el repositorio de MobileSAM en GitHub.

¿Cómo puedo probar MobileSAM usando Ultralytics?

Probar MobileSAM en Ultralytics es sencillo. Puede utilizar indicaciones de puntos y cuadros para predecir segmentos. Por ejemplo, utilizando una indicación 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])

Para obtener más detalles, consulte la sección Prueba de MobileSAM en Ultralytics.

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

MobileSAM es ideal para aplicaciones móviles y en el borde debido a su diseño ligero y su rápida velocidad de inferencia. En comparación con el SAM original, MobileSAM es aproximadamente 5 veces más pequeño y 7 veces más rápido, lo que lo hace adecuado para la segmentación en tiempo real en dispositivos con recursos computacionales limitados. Su eficiencia permite a los dispositivos móviles realizar la segmentación de imágenes en tiempo real sin una latencia significativa. Además, MobileSAM admite el modo de inferencia optimizado para el rendimiento móvil.

¿Cómo se entrenó MobileSAM y está disponible el código de entrenamiento?

MobileSAM se entrenó en una sola GPU con un conjunto de datos de 100k imágenes (1% de las imágenes originales) en menos de un día. Si bien el código de entrenamiento se publicará en el futuro, actualmente puede acceder a los pesos pre-entrenados y a los detalles de la implementación desde el repositorio de MobileSAM en GitHub.

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

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

  • Detección y segmentación de objetos en tiempo real para aplicaciones móviles
  • Procesamiento de imágenes de baja latencia en dispositivos con capacidad de cómputo limitada
  • Integración en aplicaciones móviles impulsadas por IA para realidad aumentada (RA), análisis y más

Para obtener más detalles sobre los casos de uso y el rendimiento, consulte Adaptación de SAM a MobileSAM y el blog de Ultralytics sobre las aplicaciones de MobileSAM.



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

Comentarios