Logo del modelo de segmentación de imágenes ligero MobileSAM

Mobile Segment Anything (MobileSAM)

MobileSAM es un modelo de segmentación de imágenes compacto y eficiente diseñado específicamente para dispositivos móviles y de borde. Creado para llevar la potencia del Segment Anything Model (SAM) de Meta a entornos con recursos de computación limitados, MobileSAM ofrece una segmentación casi instantánea manteniendo la compatibilidad con el pipeline original de SAM. Tanto si desarrollas aplicaciones en tiempo real como implementaciones ligeras, MobileSAM proporciona unos resultados de segmentación impresionantes con una fracción del tamaño y de las exigencias de velocidad de sus predecesores.



Watch: How to Run Inference with MobileSAM using Ultralytics | Step-by-Step Guide 🎉

MobileSAM ha sido adoptado en diversos proyectos, incluidos Grounding-SAM, AnyLabeling y Segment Anything in 3D.

MobileSAM se entrenó en una sola GPU utilizando un conjunto de datos de 100k imágenes (el 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 admitidas y modos de funcionamiento

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

Tipo de modeloPesos preentrenadosTareas soportadasInferenciaValidaciónEntrenamientoExportar (Export)
MobileSAMmobile_sam.ptSegmentación de instancias

Comparativa de MobileSAM frente a YOLO

La siguiente comparativa destaca las diferencias entre las variantes de SAM de Meta, MobileSAM y los modelos de segmentación de Ultralytics, incluido YOLO26n-seg:

ModeloTamaño
(MB)
Parámetros
(M)
Velocidad (CPU)
(ms/im)
Meta SAM-b37593.741703
Meta SAM2-b16280.828867
Meta SAM2-t78.138.923430
MobileSAM40.710.123802
FastSAM-s con backbone de YOLOv823.911.858.0
Ultralytics YOLOv8n-seg7.1 (11.0x más pequeño)3.4 (11.4x menos)24.8 (945x más rápido)
Ultralytics YOLO11n-seg6.2 (12.6x más pequeño)2.9 (13.4x menos)24.3 (964x más rápido)
Ultralytics YOLO26n-seg6.7 (11.7x más pequeño)2.7 (14.4x menos)25.2 (930x más rápido)

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

Velocidades de SAM medidas con PyTorch, velocidades de YOLO medidas con ONNX Runtime. Pruebas realizadas en un Apple M4 Air de 2025 con 16GB de RAM usando torch==2.10.0, ultralytics==8.4.31 y onnxruntime==1.24.4. 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 (ONNX)
for file_name in ["yolov8n-seg.pt", "yolo11n-seg.pt", "yolo26n-seg.pt"]:
    model = YOLO(file_name)
    model.info()
    onnx_path = model.export(format="onnx", dynamic=True)
    model = YOLO(onnx_path)
    model(ASSETS)

Adaptación de SAM a MobileSAM

MobileSAM conserva el mismo pipeline que el SAM original, incluyendo el preprocesamiento, el postprocesamiento y todas las interfaces. Esto significa que puedes pasar de SAM a MobileSAM con cambios mínimos en tu flujo de trabajo.

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

Comparativa de codificadores de imagen basados en ViT

Codificador de imagenSAM originalMobileSAM
Parámetros611M5M
Velocidad452ms8ms

Decodificador de máscaras guiado por prompts

Decodificador de máscaraSAM originalMobileSAM
Parámetros3.876M3.876M
Velocidad4ms4ms

Comparativa del pipeline completo

Pipeline completo (Enc+Dec)SAM originalMobileSAM
Parámetros615M9.66M
Velocidad456ms12ms

El rendimiento de MobileSAM y del SAM original se ilustra a continuación utilizando prompts de punto y de cuadro.

Imagen con punto como prompt

Imagen con cuadro como prompt

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

Probando MobileSAM en Ultralytics

Al igual que el SAM original, Ultralytics proporciona una interfaz sencilla para probar MobileSAM, admitiendo tanto prompts de Punto como de Cuadro.

Descarga del modelo

Descarga los pesos preentrenados de MobileSAM desde los assets de Ultralytics.

Prompt 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 Cuadro

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

Tanto MobileSAM como SAM comparten la misma API. Para más detalles sobre su uso, consulta la documentación de SAM.

Construye conjuntos de datos de segmentación automáticamente usando un modelo de detección

Para anotar tu conjunto de datos automáticamente con el framework de Ultralytics, utiliza 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="yolo26x.pt", sam_model="mobile_sam.pt")
ArgumentoTipoPredeterminadoDescripción
datastrrequeridoRuta al directorio que contiene las imágenes objetivo para la anotación o segmentación.
det_modelstr'yolo26x.pt'Ruta del modelo de detección YOLO para la detección inicial de objetos.
sam_modelstr'sam_b.pt'Ruta del modelo SAM para segmentación (admite SAM, variantes de SAM2 y modelos MobileSAM).
devicestr''Dispositivo de computación (p. ej., 'cuda:0', 'cpu', o '' para la detección automática del dispositivo).
conffloat0.25Umbral de confianza de detección de YOLO para filtrar detecciones débiles.
ioufloat0.45Umbral de IoU para la supresión no máxima (NMS) para filtrar cajas superpuestas.
imgszint640Tamaño de entrada para redimensionar imágenes (debe ser múltiplo de 32).
max_detint300Número máximo de detecciones por imagen para la eficiencia de la memoria.
classeslist[int]NoneLista de índices de clase a detectar (p. ej., [0, 1] para persona y bicicleta).
output_dirstrNoneDirectorio de guardado para anotaciones (por defecto es './labels' relativo a la ruta de los datos).

Citas y reconocimientos

Si MobileSAM te resulta útil en tu investigación o desarrollo, considera citar el siguiente artículo:

Cita
@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}
}

Lee el artículo de MobileSAM completo en arXiv.

Preguntas frecuentes

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

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

¿Cómo puedo probar MobileSAM utilizando Ultralytics?

Probar MobileSAM en Ultralytics es sencillo. Puedes usar prompts de Punto y de Cuadro para predecir segmentos. Por ejemplo, utilizando un prompt 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 más detalles, consulta la sección Probando MobileSAM en Ultralytics.

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

MobileSAM es ideal para aplicaciones móviles y de borde debido a su diseño ligero y a su rápida velocidad de inferencia. En comparación con el SAM original, MobileSAM es unas 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 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 (el 1% de las imágenes originales) en menos de un día. Aunque el código de entrenamiento se publicará en el futuro, actualmente puedes acceder a los pesos preentrenados y a los detalles de la implementación desde el repositorio de GitHub de MobileSAM.

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

MobileSAM está diseñado para una segmentación de imágenes rápida y eficiente en entornos móviles y de 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 computación limitada
  • Integración en aplicaciones móviles impulsadas por IA para realidad aumentada (RA), analítica y más

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

Comentarios