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.
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
results = model("ultralytics/assets/zidane.jpg", bboxes=[439, 437, 524, 709])
# Run inference with single point
results = model(points=[900, 370], labels=[1])
# Run inference with multiple points
results = model(points=[[400, 370], [900, 370]], labels=[1, 1])
# Run inference with multiple points prompt per object
results = model(points=[[[400, 370], [900, 370]]], labels=[[1, 1]])
# Run inference with negative points prompt
results = model(points=[[[400, 370], [900, 370]]], labels=[[1, 0]])
Segmenta todo
Segmenta toda la imagen.
- 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])
# Run inference with single point prompt
results = predictor(points=[900, 370], labels=[1])
# Run inference with multiple points prompt
results = predictor(points=[[400, 370], [900, 370]], labels=[[1, 1]])
# Run inference with negative points prompt
results = predictor(points=[[[400, 370], [900, 370]]], labels=[[1, 0]])
# 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)
Nota
Todos los devueltos results
en los ejemplos anteriores son Resultados que permite acceder fácilmente a las máscaras predichas y a la imagen de origen.
- Más argumentos adicionales para
Segment everything
consultaPredictor/generate
Referencia.
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 | Tamaño (MB) | Parámetros (M) | Velocidad (CPU) (ms/im) |
---|---|---|---|
Meta SAM-b | 358 | 94.7 | 51096 |
MobileSAM | 40.7 | 10.1 | 46122 |
FastSAM-s con YOLOv8 columna vertebral | 23.7 | 11.8 | 115 |
Ultralytics YOLOv8n-seg | 6,7 (53,4 veces menor) | 3,4 (27,9 veces menos) | 59 (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 ASSETS, SAM, YOLO, FastSAM
# Profile SAM-b, MobileSAM
for file in ["sam_b.pt", "mobile_sam.pt"]:
model = SAM(file)
model.info()
model(ASSETS)
# Profile FastSAM-s
model = FastSAM("FastSAM-s.pt")
model.info()
model(ASSETS)
# Profile YOLOv8n-seg
model = YOLO("yolov8n-seg.pt")
model.info()
model(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
Argumento | Tipo | Descripción | Por defecto |
---|---|---|---|
data | str | Ruta a una carpeta que contenga las imágenes que se van a anotar. | |
det_model | str opcional | Modelo de detección preentrenado YOLO . Por defecto es 'yolo11x.pt'. | 'yolo11x.pt' |
sam_model | str opcional | Modelo de segmentación preentrenado SAM . Por defecto 'sam_b.pt'. | 'sam_b.pt' |
device | str opcional | Dispositivo en el que se ejecutarán los modelos. Por defecto es una cadena vacía (CPU o GPU, si está disponible). | |
conf | float opcional | Umbral de confianza para el modelo de detección; por defecto es 0,25. | 0.25 |
iou | float opcional | Umbral de IoU para filtrar las cajas superpuestas en los resultados de detección; por defecto es 0,45. | 0.45 |
imgsz | int opcional | Dimensión de redimensionamiento de la imagen de entrada; por defecto es 640. | 640 |
max_det | int opcional | Limita las detecciones por imagen para controlar las salidas en escenas densas. | 300 |
classes | list opcional | Filtra las predicciones a los ID de clase especificados, devolviendo sólo las detecciones relevantes. | None |
output_dir | str Ninguno, opcional | Directorio para guardar los resultados anotados. Por defecto es una carpeta "etiquetas" en el mismo directorio que "datos". | None |
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.
PREGUNTAS FRECUENTES
¿Qué es el modelo Segment Anything (SAM) de Ultralytics?
El Segment Anything Model (SAM) de Ultralytics es un revolucionario modelo de segmentación de imágenes diseñado para tareas de segmentación con indicaciones. Aprovecha una arquitectura avanzada, que incluye codificadores de imágenes y avisos combinados con un descodificador de máscaras ligero, para generar máscaras de segmentación de alta calidad a partir de varios avisos, como señales espaciales o de texto. Entrenado en el amplio conjunto de datos SA-1B, SAM destaca en el rendimiento sin disparos, adaptándose a nuevas distribuciones de imágenes y tareas sin necesidad de conocimientos previos. Más información aquí.
¿Cómo puedo utilizar el Segment Anything Model (SAM) para la segmentación de imágenes?
Puedes utilizar el Segment Anything Model (SAM) para la segmentación de imágenes ejecutando la inferencia con diversas indicaciones, como cuadros delimitadores o puntos. Aquí tienes un ejemplo utilizando Python:
from ultralytics import SAM
# Load a model
model = SAM("sam_b.pt")
# Segment with bounding box prompt
model("ultralytics/assets/zidane.jpg", bboxes=[439, 437, 524, 709])
# Segment with points prompt
model("ultralytics/assets/zidane.jpg", points=[900, 370], labels=[1])
# Segment with multiple points prompt
model("ultralytics/assets/zidane.jpg", points=[[400, 370], [900, 370]], labels=[[1, 1]])
# Segment with multiple points prompt per object
model("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 1]])
# Segment with negative points prompt.
model("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 0]])
Alternativamente, puedes ejecutar la inferencia con SAM en la interfaz de línea de comandos (CLI):
Para obtener instrucciones de uso más detalladas, visita la sección Segmentación.
¿Cómo se comparan SAM y YOLOv8 en términos de rendimiento?
En comparación con YOLOv8, los modelos SAM como SAM-b y FastSAM-s son más grandes y lentos, pero ofrecen capacidades únicas para la segmentación automática. Por ejemplo, Ultralytics YOLOv8n -seg es 53,4 veces más pequeño y 866 veces más rápido que SAM-b. Sin embargo, el rendimiento sin disparos de SAM lo hace muy flexible y eficaz en diversas tareas no entrenadas. Obtén más información sobre las comparaciones de rendimiento entre SAM y YOLOv8 aquí.
¿Cómo puedo auto-anotar mi conjunto de datos utilizando SAM?
Ultralytics' SAM ofrece una función de anotación automática que permite generar conjuntos de datos de segmentación utilizando un modelo de detección preentrenado. Aquí tienes un ejemplo en Python:
from ultralytics.data.annotator import auto_annotate
auto_annotate(data="path/to/images", det_model="yolov8x.pt", sam_model="sam_b.pt")
Esta función toma la ruta a tus imágenes y argumentos opcionales para los modelos preentrenados de detección y segmentación SAM , junto con las especificaciones del dispositivo y del directorio de salida. Para una guía completa, consulta Anotación automática.
¿Qué conjuntos de datos se utilizan para entrenar el Modelo de Cualquier Segmento (SAM)?
SAM se entrena en el extenso conjunto de datos SA-1B, que comprende más de 1.000 millones de máscaras en 11 millones de imágenes. SA-1B es el mayor conjunto de datos de segmentación hasta la fecha, y proporciona datos de entrenamiento diversos y de alta calidad, lo que garantiza un impresionante rendimiento de cero disparos en diversas tareas de segmentación. Para más detalles, visita la sección Conjunto de datos.