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