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