Segmento móvil Cualquier cosa (MobileSAM)
MobileSAM es un modelo de segmentación de imágenes compacto y eficaz, diseñado específicamente para dispositivos móviles y de última generación. Diseñado para aportar la potencia del modelo Segment Anything de Meta (SAM) de Meta a entornos con computación limitada, MobileSAM ofrece una segmentación casi instantánea a la vez que mantiene la compatibilidad con el pipeline SAM original. Ya sea que esté desarrollando aplicaciones en tiempo real o despliegues ligeros, MobileSAM proporciona impresionantes resultados de segmentación con una fracción de los requisitos de tamaño y velocidad de sus predecesores.
Observa: Cómo ejecutar la inferencia con MobileSAM utilizando Ultralytics | Guía paso a paso 🎉
MobileSAM se ha adoptado en diversos proyectos, como SAM, AnyLabeling y Segment Anything in 3D.
MobileSAM se entrenó en una sola GPU utilizando un conjunto de datos de 100.000 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 describe el modelo MobileSAM disponible, sus pesos preentrenados, las tareas admitidas y la compatibilidad con distintos modos de funcionamiento, como Inferencia, Validación, Entrenamiento y Exportación. Los modos compatibles se indican con ✅ y los no compatibles con ❌.
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
La siguiente comparación pone de relieve las diferencias entre las variantes SAM de Meta, MobileSAM, y los modelos de segmentación más pequeños de Ultralytics, incluido 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 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 los modelos SAM ofrecen capacidades únicas de segmentación automática, los modelos YOLO -especialmente YOLOv8n y YOLO11n-seg- son significativamente más pequeños, más rápidos y más eficientes desde el punto de vista computacional.
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 original SAMoriginal, incluidos el preprocesamiento, el posprocesamiento y todas las interfaces. Esto significa que puede pasar de SAM a MobileSAM con cambios mínimos en su flujo de trabajo.
La diferencia clave es el codificador de imágenes: 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 12 ms (8 ms para el codificador y 4 ms para el descodificador de máscaras).
Comparación de codificadores de imágenes basados en ViT
Codificador de imágenes | Original SAM | MobileSAM |
---|---|---|
Parámetros | 611M | 5M |
Velocidad | 452ms | 8ms |
Descodificador de máscaras guiado por instrucciones
Decodificador de máscaras | Original SAM | MobileSAM |
---|---|---|
Parámetros | 3.876M | 3.876M |
Velocidad | 4ms | 4ms |
Comparación de toda la cadena
Tubería completa (Enc+Dec) | Original SAM | MobileSAM |
---|---|---|
Parámetros | 615M | 9.66M |
Velocidad | 456 ms | 12ms |
A continuación se ilustra el rendimiento de MobileSAM y del SAM original utilizando tanto indicaciones de puntos como de casillas.
MobileSAM es aproximadamente 5 veces más pequeño y 7 veces más rápido que FastSAM. Para más detalles, visite la página del proyectoMobileSAM .
Pruebas MobileSAM en Ultralytics
Igual que el original SAMoriginal, Ultralytics ofrece una interfaz sencilla para probar MobileSAM, que admite tanto mensajes de punto como de caja.
Descarga de modelos
Descargue los pesos preentrenados de MobileSAM de los activos deUltralytics .
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]])
Ambos MobileSAM
y SAM
comparten la misma API. Para más detalles sobre su uso, consulte la Documentación SAM.
Creación automática de conjuntos de datos de segmentación mediante un modelo de detección
Para anotar automáticamente su conjunto de datos con 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 MobileSAM le resulta útil en su investigación o desarrollo, considere la posibilidad de 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 MobileSAM 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 bordes. Mantiene la misma estructura que el SAM original, pero sustituye el gran codificador ViT-H (632 millones de parámetros) por un codificador compacto Tiny-ViT (5 millones de parámetros). De este modo, MobileSAM es 5 veces más pequeño y 7 veces más rápido que el SAM original, ya que funciona a unos 12 ms por imagen frente a los 456 ms de SAM. Más información sobre la implementación de MobileSAM en el repositorio GitHubMobileSAM .
¿Cómo puedo probar MobileSAM con Ultralytics?
Probar MobileSAM en Ultralytics es sencillo. Puede utilizar los indicadores Point y Box para predecir segmentos. Por 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])
Para más detalles, consulte la sección Pruebas de MobileSAM en Ultralytics.
¿Por qué debería utilizar MobileSAM para mi aplicación móvil?
MobileSAM es ideal para aplicaciones móviles y de borde gracias a su diseño ligero y 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 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 formó MobileSAM y está disponible el código de formación?
MobileSAM se entrenó en una sola GPU con un conjunto de datos de 100.000 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 implementación desde el repositorio GitHub de MobileSAM .
¿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 y periféricos. 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 computación limitada
- Integración en aplicaciones móviles basadas en IA para realidad aumentada (RA), análisis, etc.
Para más detalles sobre casos de uso y rendimiento, consulte Adaptación de SAM a MobileSAM y el blog deUltralytics sobre aplicaciones MobileSAM .