You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
117 lines
6.4 KiB
117 lines
6.4 KiB
1 year ago
|
---
|
||
|
comments: true
|
||
|
description: Obtén más información sobre MobileSAM, su implementación, comparación con SAM original y cómo descargarlo y probarlo en el framework de Ultralytics. ¡Mejora tus aplicaciones móviles hoy mismo!
|
||
|
keywords: MobileSAM, Ultralytics, SAM, aplicaciones móviles, Arxiv, GPU, API, codificador de imágenes, decodificador de máscaras, descarga de modelos, método de prueba
|
||
|
---
|
||
|
|
||
|
![Logotipo de MobileSAM](https://github.com/ChaoningZhang/MobileSAM/blob/master/assets/logo2.png?raw=true)
|
||
|
|
||
|
# Segmentación Móvil de Cualquier Cosa (MobileSAM)
|
||
|
|
||
|
El artículo de MobileSAM ahora está disponible en [arXiv](https://arxiv.org/pdf/2306.14289.pdf).
|
||
|
|
||
|
Una demostración de MobileSAM funcionando en una CPU se puede acceder en este [enlace de demostración](https://huggingface.co/spaces/dhkim2810/MobileSAM). El rendimiento en una CPU Mac i5 tarda aproximadamente 3 segundos. En la demostración de Hugging Face, la interfaz y las CPUs de menor rendimiento contribuyen a una respuesta más lenta, pero sigue funcionando de manera efectiva.
|
||
|
|
||
|
MobileSAM se implementa en varios proyectos, incluyendo [Grounding-SAM](https://github.com/IDEA-Research/Grounded-Segment-Anything), [AnyLabeling](https://github.com/vietanhdev/anylabeling) y [Segment Anything in 3D](https://github.com/Jumpat/SegmentAnythingin3D).
|
||
|
|
||
|
MobileSAM se entrena en una sola GPU con un conjunto de datos de 100k (1% de las imágenes originales) en menos de un día. El código para este entrenamiento estará disponible en el futuro.
|
||
|
|
||
|
## Modelos Disponibles, Tareas Admitidas y Modos de Operación
|
||
|
|
||
|
Esta tabla presenta los modelos disponibles con sus pesos pre-entrenados específicos, las tareas que admiten y su compatibilidad con diferentes modos de operación como [Inference (Inferencia)](../modes/predict.md), [Validation (Validación)](../modes/val.md), [Training (Entrenamiento)](../modes/train.md) y [Export (Exportación)](../modes/export.md), indicados por emojis ✅ para los modos admitidos y emojis ❌ para los modos no admitidos.
|
||
|
|
||
|
| Tipo de Modelo | Pesos Pre-entrenados | Tareas Admitidas | Inferencia | Validación | Entrenamiento | Exportación |
|
||
|
|----------------|----------------------|---------------------------------------------------|------------|------------|---------------|-------------|
|
||
|
| MobileSAM | `mobile_sam.pt` | [Segmentación de Instancias](../tasks/segment.md) | ✅ | ❌ | ❌ | ✅ |
|
||
|
|
||
|
## Adaptación de SAM a MobileSAM
|
||
|
|
||
|
Dado que MobileSAM mantiene el mismo pipeline que SAM original, hemos incorporado el pre-procesamiento, post-procesamiento y todas las demás interfaces del original. En consecuencia, aquellos que actualmente utilizan SAM original pueden hacer la transición a MobileSAM con un esfuerzo mínimo.
|
||
|
|
||
|
MobileSAM tiene un rendimiento comparable a SAM original y mantiene el mismo pipeline excepto por un cambio en el codificador de imágenes. Específicamente, reemplazamos el codificador de imágenes original ViT-H pesado (632M) por uno más pequeño, Tiny-ViT (5M). En una sola GPU, MobileSAM funciona a aproximadamente 12ms por imagen: 8ms en el codificador de imágenes y 4ms en el decodificador de máscaras.
|
||
|
|
||
|
La siguiente tabla proporciona una comparación de los codificadores de imágenes basados en ViT:
|
||
|
|
||
|
| Codificador de Imágenes | SAM Original | MobileSAM |
|
||
|
|-------------------------|--------------|-----------|
|
||
|
| Parámetros | 611M | 5M |
|
||
|
| Velocidad | 452ms | 8ms |
|
||
|
|
||
|
Tanto SAM original como MobileSAM utilizan el mismo decodificador de máscaras guiado por instrucciones:
|
||
|
|
||
|
| Decodificador de Máscaras | SAM Original | MobileSAM |
|
||
|
|---------------------------|--------------|-----------|
|
||
|
| Parámetros | 3.876M | 3.876M |
|
||
|
| Velocidad | 4ms | 4ms |
|
||
|
|
||
|
Aquí está la comparación de todo el pipeline:
|
||
|
|
||
|
| Pipeline Completo (Enc+Dec) | SAM Original | MobileSAM |
|
||
|
|-----------------------------|--------------|-----------|
|
||
|
| Parámetros | 615M | 9.66M |
|
||
|
| Velocidad | 456ms | 12ms |
|
||
|
|
||
|
El rendimiento de MobileSAM y SAM original se demuestra utilizando tanto un punto como una caja como instrucciones.
|
||
|
|
||
|
![Imagen con Punto como Instrucción](https://raw.githubusercontent.com/ChaoningZhang/MobileSAM/master/assets/mask_box.jpg?raw=true)
|
||
|
|
||
|
![Imagen con Caja como Instrucción](https://raw.githubusercontent.com/ChaoningZhang/MobileSAM/master/assets/mask_box.jpg?raw=true)
|
||
|
|
||
|
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 están disponibles en la [página del proyecto de MobileSAM](https://github.com/ChaoningZhang/MobileSAM).
|
||
|
|
||
|
## Probando MobileSAM en Ultralytics
|
||
|
|
||
|
Al igual que SAM original, ofrecemos un método sencillo de prueba en Ultralytics, que incluye modos tanto para instrucciones de Punto como para Caja.
|
||
|
|
||
|
### Descarga del Modelo
|
||
|
|
||
|
Puedes descargar el modelo [aquí](https://github.com/ChaoningZhang/MobileSAM/blob/master/weights/mobile_sam.pt).
|
||
|
|
||
|
### Instrucción de Punto
|
||
|
|
||
|
!!! Example "Ejemplo"
|
||
|
|
||
|
=== "Python"
|
||
|
```python
|
||
|
from ultralytics import SAM
|
||
|
|
||
|
# Carga el modelo
|
||
|
model = SAM('mobile_sam.pt')
|
||
|
|
||
|
# Predice un segmento basado en una instrucción de punto
|
||
|
model.predict('ultralytics/assets/zidane.jpg', points=[900, 370], labels=[1])
|
||
|
```
|
||
|
|
||
|
### Instrucción de Caja
|
||
|
|
||
|
!!! Example "Ejemplo"
|
||
|
|
||
|
=== "Python"
|
||
|
```python
|
||
|
from ultralytics import SAM
|
||
|
|
||
|
# Carga el modelo
|
||
|
model = SAM('mobile_sam.pt')
|
||
|
|
||
|
# Predice un segmento basado en una instrucción de caja
|
||
|
model.predict('ultralytics/assets/zidane.jpg', bboxes=[439, 437, 524, 709])
|
||
|
```
|
||
|
|
||
|
Hemos implementado `MobileSAM` y `SAM` utilizando la misma API. Para obtener más información sobre cómo usarlo, consulta la [página de SAM](sam.md).
|
||
|
|
||
|
## Citaciones y Reconocimientos
|
||
|
|
||
|
Si encuentras útil MobileSAM en tu investigación o trabajo de desarrollo, considera citar nuestro artículo:
|
||
|
|
||
|
!!! Quote ""
|
||
|
|
||
|
=== "BibTeX"
|
||
|
|
||
|
```bibtex
|
||
|
@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}
|
||
|
}
|