Saltar al contenido

Modelo de todo por segmentos (SAM)

Bienvenido a la frontera de la segmentaci贸n de im谩genes con el Segment Anything Model, o SAM. Este revolucionario modelo ha cambiado las reglas del juego al introducir la segmentaci贸n de im谩genes con un rendimiento en tiempo real, estableciendo nuevos est谩ndares en este campo.

Introducci贸n a SAM: El modelo Segment Anything

El Modelo Segmentar Cualquier Cosa, o SAM, es un modelo de segmentaci贸n de im谩genes de vanguardia que permite la segmentaci贸n a demanda, proporcionando una versatilidad sin precedentes en las tareas de an谩lisis de im谩genes. SAM constituye el n煤cleo de la iniciativa Segmentar Cualquier Cosa, un proyecto innovador que introduce un modelo, una tarea y un conjunto de datos novedosos para la segmentaci贸n de im谩genes.

SAMle permite adaptarse a nuevas distribuciones de im谩genes y tareas sin conocimientos previos, una caracter铆stica conocida como transferencia sin disparos. Entrenado en el amplio conjunto de datos SA-1B, que contiene m谩s de 1.000 millones de m谩scaras repartidas en 11 millones de im谩genes cuidadosamente seleccionadas, SAM ha mostrado un impresionante rendimiento sin disparos, superando en muchos casos los resultados anteriores totalmente supervisados.

Imagen de muestra del conjunto de datos SA-1B Im谩genes de ejemplo. M谩scaras superpuestas de im谩genes del conjunto de datos SA-1B, recientemente introducido. SA-1B contiene 11M de im谩genes diversas, de alta resoluci贸n, con licencia y protecci贸n de la privacidad, y 1,1B de m谩scaras de segmentaci贸n de alta calidad. Estas m谩scaras fueron anotadas de forma totalmente autom谩tica por SAM, y seg煤n lo verificado por valoraciones humanas y numerosos experimentos, son de alta calidad y diversidad. Las im谩genes se agrupan por n煤mero de m谩scaras por imagen para su visualizaci贸n (hay 鈭100 m谩scaras por imagen de media).

Caracter铆sticas clave del modelo de todo por segmentos (SAM)

  • Tarea de segmentaci贸n con indicaci贸n: SAM se dise帽贸 teniendo en cuenta una tarea de segmentaci贸n con indicaci贸n, lo que le permite generar m谩scaras de segmentaci贸n v谩lidas a partir de cualquier indicaci贸n, como pistas espaciales o de texto que identifiquen un objeto.
  • Arquitectura avanzada: El Modelo Segmentar Cualquier Cosa emplea un potente codificador de im谩genes, un codificador de indicaciones y un decodificador de m谩scaras ligero. Esta arquitectura 煤nica permite una orientaci贸n flexible, el c谩lculo de m谩scaras en tiempo real y el conocimiento de la ambig眉edad en las tareas de segmentaci贸n.
  • El conjunto de datos SA-1B: Introducido por el proyecto Segment Anything, el conjunto de datos SA-1B presenta m谩s de 1.000 millones de m谩scaras en 11 millones de im谩genes. Al ser el mayor conjunto de datos de segmentaci贸n hasta la fecha, proporciona a SAM una fuente de datos de entrenamiento diversa y a gran escala.
  • Rendimiento de disparo cero: SAM muestra un rendimiento de disparo cero excepcional en varias tareas de segmentaci贸n, lo que la convierte en una herramienta lista para usar en diversas aplicaciones con una necesidad m铆nima de ingenier铆a r谩pida.

Para conocer en profundidad el modelo Segment Anything y el conjunto de datos SA-1B, visita el sitio web de Segment Anything y consulta el documento de investigaci贸n Segment Anything.

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 con 鉁 emojis para los modos admitidos y 鉂 emojis para los modos no admitidos.

Tipo de modelo Pesos preentrenados Tareas admitidas Inferencia Validaci贸n Formaci贸n Exportar
SAM base samb.pt Segmentaci贸n de instancias
SAM grande sam_l.pt Segmentaci贸n de instancias

C贸mo utilizar SAM: Versatilidad y potencia en la segmentaci贸n de im谩genes

El Modelo Segmentar Cualquier Cosa puede emplearse para multitud de tareas posteriores que van m谩s all谩 de sus datos de entrenamiento. Esto incluye la detecci贸n de bordes, la generaci贸n de propuestas de objetos, la segmentaci贸n de instancias y la predicci贸n preliminar de texto a m谩scara. Con una ingenier铆a r谩pida, SAM puede adaptarse r谩pidamente a nuevas tareas y distribuciones de datos de forma instant谩nea, estableci茅ndose como una herramienta vers谩til y potente para todas tus necesidades de segmentaci贸n de im谩genes.

SAM ejemplo de predicci贸n

Segmento con indicaciones

Segmenta la imagen con las indicaciones dadas.

from ultralytics import SAM

# Load a model
model = SAM('sam_b.pt')

# Display model information (optional)
model.info()

# Run inference with bboxes prompt
model('ultralytics/assets/zidane.jpg', bboxes=[439, 437, 524, 709])

# Run inference with points prompt
model('ultralytics/assets/zidane.jpg', points=[900, 370], labels=[1])

Segmenta todo

Segmenta toda la imagen.

from ultralytics import SAM

# Load a model
model = SAM('sam_b.pt')

# Display model information (optional)
model.info()

# Run inference
model('path/to/image.jpg')
# Run inference with a SAM model
yolo predict model=sam_b.pt source=path/to/image.jpg
  • La l贸gica aqu铆 es segmentar toda la imagen si no pasas ninguna indicaci贸n (bboxes/puntos/m谩scaras).

Ejemplo de SAMPredictor

De este modo, puedes configurar la imagen una vez y ejecutar la inferencia de avisos varias veces sin ejecutar el codificador de im谩genes varias veces.

from ultralytics.models.sam import Predictor as SAMPredictor

# Create SAMPredictor
overrides = dict(conf=0.25, task='segment', mode='predict', imgsz=1024, model="mobile_sam.pt")
predictor = SAMPredictor(overrides=overrides)

# Set image
predictor.set_image("ultralytics/assets/zidane.jpg")  # set with image file
predictor.set_image(cv2.imread("ultralytics/assets/zidane.jpg"))  # set with np.ndarray
results = predictor(bboxes=[439, 437, 524, 709])
results = predictor(points=[900, 370], labels=[1])

# Reset image
predictor.reset_image()

Segmenta todo con args adicionales.

from ultralytics.models.sam import Predictor as SAMPredictor

# Create SAMPredictor
overrides = dict(conf=0.25, task='segment', mode='predict', imgsz=1024, model="mobile_sam.pt")
predictor = SAMPredictor(overrides=overrides)

# Segment with additional args
results = predictor(source="ultralytics/assets/zidane.jpg", crop_n_layers=1, points_stride=64)

SAM comparaci贸n vs YOLOv8

Aqu铆 comparamos el modelo de SAM m谩s peque帽o de Meta, SAM-b, con el modelo de segmentaci贸n m谩s peque帽o de Ultralytics , YOLOv8n-seg:

Modelo Talla Par谩metros Velocidad (CPU)
Meta's SAM-b 358 MB 94.7 M 51096 ms/im
MobileSAM 40,7 MB 10.1 M 46122 ms/im
FastSAM-s con YOLOv8 columna vertebral 23,7 MB 11.8 M 115 ms/im
Ultralytics YOLOv8n-seg 6,7 MB (53,4 veces m谩s peque帽o) 3,4 M (27,9 veces menos) 59 ms/im (866 veces m谩s r谩pido)

Esta comparaci贸n muestra las diferencias de orden de magnitud en los tama帽os y velocidades de los modelos entre s铆. Aunque SAM presenta capacidades 煤nicas para la segmentaci贸n autom谩tica, no es un competidor directo de los modelos de segmentaci贸n de YOLOv8 , que son m谩s peque帽os, r谩pidos y eficaces.

Las pruebas se realizan en un Macbook M2 de Apple 2023 con 16 GB de RAM. Para reproducir esta prueba

Ejemplo

from ultralytics import FastSAM, SAM, YOLO

# Profile SAM-b
model = SAM('sam_b.pt')
model.info()
model('ultralytics/assets')

# Profile MobileSAM
model = SAM('mobile_sam.pt')
model.info()
model('ultralytics/assets')

# Profile FastSAM-s
model = FastSAM('FastSAM-s.pt')
model.info()
model('ultralytics/assets')

# Profile YOLOv8n-seg
model = YOLO('yolov8n-seg.pt')
model.info()
model('ultralytics/assets')

Anotaci贸n autom谩tica: Un camino r谩pido hacia los conjuntos de datos de segmentaci贸n

La anotaci贸n autom谩tica es una funci贸n clave de SAM, que permite a los usuarios generar un conjunto de datos de segmentaci贸n utilizando un modelo de detecci贸n preentrenado. Esta funci贸n permite la anotaci贸n r谩pida y precisa de un gran n煤mero de im谩genes, evitando la necesidad de un laborioso etiquetado manual.

Genera tu conjunto de datos de segmentaci贸n utilizando un modelo de detecci贸n

Para auto-anotar tu conjunto de datos con el marco 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="yolov8x.pt", sam_model='sam_b.pt')
Argumento Tipo Descripci贸n Por defecto
datos str Ruta a una carpeta que contenga las im谩genes que se van a anotar.
modelo_det str, opcional Modelo preentrenado de detecci贸n de YOLO . Por defecto 'yolov8x.pt'. 'yolov8x.pt'
samModelo str, opcional Modelo de segmentaci贸n preentrenado SAM . Por defecto 'sam_b.pt'. 'sam_b.pt'
dispositivo str, opcional Dispositivo en el que se ejecutar谩n los modelos. Por defecto es una cadena vac铆a (CPU o GPU, si est谩n disponibles).
directorio_salida str, Ninguno, opcional Directorio para guardar los resultados anotados. Por defecto es una carpeta "etiquetas" en el mismo directorio que "datos". Ninguno

En auto_annotate toma la ruta a tus im谩genes, con argumentos opcionales para especificar los modelos preentrenados de detecci贸n y segmentaci贸n SAM , el dispositivo en el que ejecutar los modelos y el directorio de salida para guardar los resultados anotados.

La anotaci贸n autom谩tica con modelos preentrenados puede reducir dr谩sticamente el tiempo y el esfuerzo necesarios para crear conjuntos de datos de segmentaci贸n de alta calidad. Esta funci贸n es especialmente beneficiosa para los investigadores y desarrolladores que trabajan con grandes colecciones de im谩genes, ya que les permite centrarse en el desarrollo y la evaluaci贸n de modelos en lugar de en la anotaci贸n manual.

Citas y agradecimientos

Si encuentras 煤til SAM en tu trabajo de investigaci贸n o desarrollo, considera la posibilidad de citar nuestro documento:

@misc{kirillov2023segment,
      title={Segment Anything},
      author={Alexander Kirillov and Eric Mintun and Nikhila Ravi and Hanzi Mao and Chloe Rolland and Laura Gustafson and Tete Xiao and Spencer Whitehead and Alexander C. Berg and Wan-Yen Lo and Piotr Doll谩r and Ross Girshick},
      year={2023},
      eprint={2304.02643},
      archivePrefix={arXiv},
      primaryClass={cs.CV}
}

Queremos expresar nuestra gratitud a Meta AI por crear y mantener este valioso recurso para la comunidad de visi贸n por ordenador.

palabras clave: Segmentar Cualquier Cosa, Modelo Segmentar Cualquier Cosa, SAM, Meta SAM, segmentaci贸n de im谩genes, segmentaci贸n promptable, rendimiento cero disparos, conjunto de datos SA-1B, arquitectura avanzada, autoanotaci贸n, Ultralytics, modelos preentrenados, SAM base, SAM grande, segmentaci贸n de instancias, visi贸n por ordenador, IA, inteligencia artificial, aprendizaje autom谩tico, anotaci贸n de datos, m谩scaras de segmentaci贸n, modelo de detecci贸n, YOLO modelo de detecci贸n, bibtex, Meta AI.



Creado 2023-11-12, Actualizado 2024-01-16
Autores: glenn-jocher (9), ChaoningZhang (1), Laughing-q (1)

Comentarios