Link to this sectionSegment Anything Model (SAM)#
Bienvenido a la vanguardia de la segmentación de imágenes con el Segment Anything Model, o SAM. Este modelo revolucionario ha cambiado las reglas del juego al introducir la segmentación de imágenes basada en prompts con rendimiento en tiempo real, estableciendo nuevos estándares en el campo.
Link to this sectionIntroducción a SAM: El Segment Anything Model#
El Segment Anything Model, o SAM, es un modelo de segmentación de imágenes de vanguardia que permite la segmentación basada en prompts, proporcionando una versatilidad sin igual en tareas de análisis de imágenes. SAM constituye el corazón de la iniciativa Segment Anything, un proyecto innovador que introduce un modelo, una tarea y un conjunto de datos novedosos para la segmentación de imágenes.
El diseño avanzado de SAM le permite adaptarse a nuevas distribuciones de imágenes y tareas sin conocimiento previo, una característica conocida como transferencia zero-shot. Entrenado en el extenso 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 rendimiento impresionante en zero-shot, superando los resultados totalmente supervisados anteriores en muchos casos.
Imágenes de ejemplo de SA-1B. Máscaras superpuestas en imágenes del conjunto de datos del recién introducido SA-1B. SA-1B contiene 11 millones de imágenes diversas, de alta resolución, con licencia y que protegen la privacidad, junto con 1.100 millones de máscaras de segmentación de alta calidad. Estas máscaras fueron anotadas de forma totalmente automática por SAM y, como se verificó mediante 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 unas 100 máscaras por imagen de media).
Link to this sectionCaracterísticas principales del Segment Anything Model (SAM)#
- Tarea de segmentación basada en prompts: SAM fue diseñado pensando en una tarea de segmentación basada en prompts, lo que le permite generar máscaras de segmentación válidas a partir de cualquier prompt dado, como pistas espaciales o de texto que identifiquen un objeto.
- Arquitectura avanzada: El Segment Anything Model emplea un potente codificador de imágenes, un codificador de prompts y un decodificador de máscaras ligero. Esta arquitectura única permite una creación de prompts flexible, el cálculo de máscaras en tiempo real y la concienciación sobre 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 cuenta con más de 1.000 millones de máscaras en 11 millones de imágenes. Como el conjunto de datos de segmentación más grande hasta la fecha, proporciona a SAM una fuente de datos de entrenamiento diversa y a gran escala.
- Rendimiento Zero-Shot: SAM muestra un rendimiento excepcional en zero-shot en diversas tareas de segmentación, lo que lo convierte en una herramienta lista para usar en diversas aplicaciones con una necesidad mínima de ingeniería de prompts.
Para una visión detallada del Segment Anything Model y el conjunto de datos SA-1B, visita el GitHub de Segment Anything y consulta el artículo de investigación Segment Anything.
SAM impulsa la función de anotación inteligente en Ultralytics Platform, permitiendo el enmascaramiento inteligente basado en clics para un etiquetado rápido de conjuntos de datos. Consulta la guía de anotación para más detalles.
Link to this sectionModelos disponibles, tareas compatibles y modos de funcionamiento#
Esta tabla presenta los modelos disponibles con sus pesos preentrenados específicos, las tareas que admiten y su compatibilidad con diferentes modos de funcionamiento como Inferencia, Validación, Entrenamiento y Exportación, indicados con emojis ✅ para los modos admitidos y ❌ para los no admitidos.
| Tipo de modelo | Pesos preentrenados | Tareas compatibles | Inferencia | Validación | Entrenamiento | Exportar |
|---|---|---|---|---|---|---|
| SAM base | sam_b.pt | Segmentación de instancias | ✅ | ❌ | ❌ | ❌ |
| SAM grande | sam_l.pt | Segmentación de instancias | ✅ | ❌ | ❌ | ❌ |
Link to this sectionCómo usar SAM: Versatilidad y potencia en la segmentación de imágenes#
El Segment Anything Model 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 la ingeniería de prompts, SAM puede adaptarse rápidamente a nuevas tareas y distribuciones de datos de forma zero-shot, consolidándose como una herramienta versátil y potente para todas tus necesidades de segmentación de imágenes.
Link to this sectionEjemplo de predicción de SAM#
Segmentar imagen con prompts dados.
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]])Segmentar la imagen completa.
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")- La lógica aquí es segmentar toda la imagen si no pasas ningún prompt (bboxes/puntos/máscaras).
De esta forma puedes configurar la imagen una vez y ejecutar la inferencia de prompts múltiples veces sin ejecutar el codificador de imágenes múltiples veces.
import cv2
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()Segmentar todo con argumentos 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)Todos los results devueltos en los ejemplos anteriores son objetos Results que permiten acceder fácilmente a las máscaras predichas y a la imagen de origen.
- More additional args for
Segment everythingseePredictor/generateReference.
Link to this sectionComparativa de SAM frente a YOLO#
Aquí comparamos el modelo SAM-b de Meta con los modelos de segmentación de Ultralytics, incluido YOLO26n-seg:
| Modelo | Tamaño (MB) | Parámetros (M) | Velocidad (CPU) (ms/im) |
|---|---|---|---|
| Meta SAM-b | 375 | 93.7 | 41703 |
| MobileSAM | 40.7 | 10.1 | 23802 |
| FastSAM-s con backbone de YOLOv8 | 23.9 | 11.8 | 58.0 |
| Ultralytics YOLOv8n-seg | 7.1 (52.8x más pequeño) | 3.4 (27.6x menos) | 24.8 (1682x más rápido) |
| Ultralytics YOLO11n-seg | 6.2 (60.5x más pequeño) | 2.9 (32.3x menos) | 24.3 (1716x más rápido) |
| Ultralytics YOLO26n-seg | 6.7 (56.0x más pequeño) | 2.7 (34.7x menos) | 25.2 (1655x más rápido) |
Esta comparativa demuestra las diferencias sustanciales en los tamaños y velocidades de los modelos entre las variantes de SAM y los modelos de segmentación YOLO. Mientras que SAM proporciona capacidades de segmentación automática únicas, los modelos YOLO, particularmente YOLOv8n-seg, YOLO11n-seg y YOLO26n-seg, son significativamente más pequeños, rápidos y computacionalmente eficientes.
Velocidades de SAM medidas con PyTorch, velocidades de YOLO medidas con ONNX Runtime. Pruebas realizadas en un Apple M4 Air de 2025 con 16GB de RAM usando torch==2.10.0, ultralytics==8.4.31 y onnxruntime==1.24.4. Para reproducir esta prueba:
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 YOLO models (ONNX)
for file_name in ["yolov8n-seg.pt", "yolo11n-seg.pt", "yolo26n-seg.pt"]:
model = YOLO(file_name)
model.info()
onnx_path = model.export(format="onnx", dynamic=True)
model = YOLO(onnx_path)
model(ASSETS)Link to this sectionAuto-anotación: Un camino rápido hacia conjuntos de datos de segmentación#
La auto-anotación es una característica 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 una anotación rápida y precisa de un gran número de imágenes, evitando la necesidad de un etiquetado manual que consume mucho tiempo.
Link to this sectionGenera tu conjunto de datos de segmentación utilizando un modelo de detección#
Para auto-anotar tu conjunto de datos con el framework de Ultralytics, usa la función auto_annotate como se muestra a continuación:
from ultralytics.data.annotator import auto_annotate
auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="sam_b.pt")| Argumento | Tipo | Predeterminado | 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 | 'yolo26x.pt' | Ruta del modelo de detección YOLO para la detección inicial de objetos. |
sam_model | str | 'sam_b.pt' | Ruta del modelo SAM para la segmentación (admite pesos de SAM, SAM 2, MobileSAM y SAM 3). |
device | str | '' | Dispositivo de computación (ej. 'cuda:0', 'cpu', o '' para detección automática de dispositivo). |
conf | float | 0.25 | Umbral de confianza de detección YOLO para filtrar detecciones débiles. |
iou | float | 0.45 | Umbral de IoU para la supresión de no máximos (NMS) con el fin de filtrar cajas superpuestas. |
imgsz | int | 640 | Tamaño de entrada para redimensionar imágenes (debe ser múltiplo de 32). |
max_det | int | 300 | Número máximo de detecciones por imagen para la eficiencia de la memoria. |
classes | list[int] | None | Lista de índices de clases a detectar (p. ej., [0, 1] para persona y bicicleta). |
output_dir | str | None | Directorio de guardado para anotaciones (predeterminado: el hermano de <data>_auto_annotate_labels). |
La función auto_annotate toma la ruta a tus imágenes, con argumentos opcionales para especificar los modelos de detección preentrenados y de segmentación SAM, el dispositivo en el que ejecutar los modelos y el directorio de salida para guardar los resultados anotados.
La auto-anotación 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 investigadores y desarrolladores que tratan con grandes colecciones de imágenes, ya que les permite centrarse en el desarrollo y la evaluación del modelo en lugar de en la anotación manual.
Link to this sectionCitas y reconocimientos#
Si encuentras SAM útil en tu investigación o trabajo de desarrollo, considera citar nuestro artículo:
@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}
}Nos gustaría expresar nuestra gratitud a Meta AI por crear y mantener este valioso recurso para la comunidad de visión artificial.
Link to this sectionPreguntas frecuentes#
Link to this section¿Qué es el Segment Anything Model (SAM) de Ultralytics?#
El Segment Anything Model (SAM) de Ultralytics es un modelo revolucionario de segmentación de imágenes diseñado para tareas de segmentación basada en prompts. Aprovecha una arquitectura avanzada, que incluye codificadores de imagen y de prompt combinados con un decodificador de máscara ligero, para generar máscaras de segmentación de alta calidad a partir de diversos prompts, como señales espaciales o de texto. Entrenado en el extenso conjunto de datos SA-1B, SAM destaca en el rendimiento zero-shot, adaptándose a nuevas distribuciones de imágenes y tareas sin conocimiento previo.
Link to this section¿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 varios prompts, como cajas delimitadoras 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):
yolo predict model=sam_b.pt source=path/to/image.jpgPara obtener instrucciones de uso más detalladas, visita la sección de segmentación.
Link to this section¿Cómo se comparan SAM y los modelos YOLO en términos de rendimiento?#
En comparación con los modelos YOLO, las variantes de SAM como SAM-b, MobileSAM y FastSAM-s suelen ser más grandes y lentas, pero ofrecen capacidades únicas de segmentación zero-shot. Por ejemplo, YOLO26n-seg es 56 veces más pequeño y más de 1650 veces más rápido que el modelo SAM-b original de Meta en CPU. Esto hace que los modelos YOLO sean ideales para aplicaciones que requieren una segmentación rápida, ligera y computacionalmente eficiente, mientras que los modelos SAM destacan en tareas de segmentación flexibles, basadas en prompts y zero-shot.
Link to this section¿Cómo puedo auto-anotar mi conjunto de datos utilizando SAM?#
SAM de Ultralytics ofrece una función de auto-anotación 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="yolo26x.pt", sam_model="sam_b.pt")Esta función toma la ruta a tus imágenes y argumentos opcionales para los modelos de detección y segmentación SAM preentrenados, junto con especificaciones de dispositivo y directorio de salida. Para obtener una guía completa, consulta Auto-Annotation.
Link to this section¿Qué conjuntos de datos se utilizan para entrenar el Segment Anything Model (SAM)?#
SAM está entrenado en el extenso conjunto de datos SA-1B, que comprende más de 1000 millones de máscaras en 11 millones de imágenes. SA-1B es el conjunto de datos de segmentación más grande hasta la fecha, proporcionando datos de entrenamiento diversos y de alta calidad, garantizando un rendimiento zero-shot impresionante en tareas de segmentación variadas. Para más detalles, visita la sección de conjunto de datos.