Ultralytics YOLO27:
Get Started

Modelo de segmentación de cualquier cosa (SAM)#

Evolución de SAM

Este es el modelo SAM original de Meta. Para obtener capacidades mejoradas, consulta SAM 2 para la segmentación de vídeo o SAM 3 para la segmentación de conceptos guiada por indicaciones con texto e imágenes de ejemplo.

How to use Segment Anything In Colab

Te damos la bienvenida a la vanguardia de la segmentación de imágenes con el Modelo de segmentación de cualquier cosa, o SAM. Este revolucionario modelo ha cambiado las reglas del juego al introducir la segmentación de imágenes guiada por indicaciones con rendimiento en tiempo real, estableciendo nuevos estándares en este campo.

Introducción a SAM: el modelo de segmentación de cualquier cosa#

El Modelo de segmentación de cualquier cosa, o SAM, es un modelo de segmentación de imágenes de última generación que permite realizar segmentaciones guiadas por indicaciones y ofrece una versatilidad sin igual en tareas de análisis de imágenes. SAM es el núcleo de la iniciativa Segment Anything, un proyecto revolucionario que presenta 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 conocimientos previos, una característica conocida como transferencia zero-shot. Entrenado con el amplio conjunto de datos SA-1B, que contiene más de 1.000 millones de máscaras distribuidas en 11 millones de imágenes cuidadosamente seleccionadas, SAM ha demostrado un rendimiento zero-shot impresionante, superando en muchos casos los resultados anteriores totalmente supervisados.

Ejemplo del conjunto de datos SA-1B con máscaras de segmentación automática Imágenes de ejemplo de SA-1B. Imágenes del conjunto de datos superpuestas con máscaras del nuevo conjunto de datos SA-1B. SA-1B contiene 11 millones de imágenes diversas, de alta resolución, con licencia y que protegen la privacidad, así como 1.100 millones de máscaras de segmentación de alta calidad. SAM anotó estas máscaras de forma totalmente automática y, según confirman las valoraciones humanas y numerosos experimentos, son de gran calidad y diversidad. Las imágenes se agrupan según el número de máscaras por imagen para su visualización (hay una media de ∼100 máscaras por imagen).

Características principales del Modelo de segmentación de cualquier cosa (SAM)#

  • Tarea de segmentación guiada por indicaciones: SAM se diseñó para realizar tareas de segmentación guiadas por indicaciones, lo que le permite generar máscaras de segmentación válidas a partir de cualquier indicación, como pistas espaciales o textuales que identifican un objeto.
  • Arquitectura avanzada: El Modelo de segmentación de cualquier cosa emplea un potente codificador de imágenes, un codificador de indicaciones y un decodificador de máscaras ligero. Esta arquitectura única permite proporcionar indicaciones de forma flexible, calcular máscaras en tiempo real y tener en cuenta la ambigüedad en las tareas de segmentación.
  • El conjunto de datos SA-1B: Presentado por el proyecto Segment Anything, el conjunto de datos SA-1B incluye más de 1.000 millones de máscaras en 11 millones de imágenes. Como 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 zero-shot: SAM ofrece un rendimiento zero-shot excepcional en diversas tareas de segmentación, por lo que es una herramienta lista para usar en distintas aplicaciones que apenas requiere ingeniería de indicaciones.

Para conocer en profundidad el Modelo de segmentación de cualquier cosa y el conjunto de datos SA-1B, visita el GitHub de Segment Anything y consulta el artículo de investigación Segment Anything.

SAM en la plataforma Ultralytics

SAM impulsa la función de anotación inteligente en Ultralytics Platform, que permite crear máscaras inteligentes mediante clics para etiquetar conjuntos de datos rápidamente. Consulta la guía de anotación para obtener más detalles.

Modelos disponibles, tareas compatibles y modos de funcionamiento#

Esta tabla presenta los modelos disponibles con sus pesos preentrenados específicos, las tareas compatibles y su compatibilidad con distintos modos de funcionamiento, como Inferencia, Validación, Entrenamiento y Exportación. Los emojis ✅ indican los modos compatibles y los emojis ❌, los modos no compatibles.

Tipo de modeloPesos preentrenadosTareas compatiblesEntrenamientoValidaciónInferenciaExportar
SAM basesam_b.ptSegmentación de instancias❌❌✅❌
SAM grandesam_l.ptSegmentación de instancias❌❌✅❌

Cómo usar SAM: versatilidad y potencia en la segmentación de imágenes#

El Modelo de segmentación de cualquier cosa puede emplearse en multitud de tareas posteriores que van más allá de sus datos de entrenamiento. Entre ellas se incluyen 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 indicaciones, SAM puede adaptarse rápidamente a nuevas tareas y distribuciones de datos de forma zero-shot, lo que lo convierte en una herramienta versátil y potente para todas tus necesidades de segmentación de imágenes.

Ejemplo de predicción de SAM#

Segmentar con indicaciones

Segmenta la imagen con las indicaciones proporcionadas.

from ultralytics import SAM

# Cargar un modelo
model = SAM("sam_b.pt")

# Mostrar información del modelo (opcional)
model.info()

# Ejecutar inferencia con una indicación de cuadros delimitadores
results = model("ultralytics/assets/zidane.jpg", bboxes=[439, 437, 524, 709])

# Ejecutar inferencia con un único punto
results = model(points=[900, 370], labels=[1])

# Ejecutar inferencia con varios puntos
results = model(points=[[400, 370], [900, 370]], labels=[1, 1])

# Ejecutar inferencia con una indicación de varios puntos por objeto
results = model(points=[[[400, 370], [900, 370]]], labels=[[1, 1]])

# Ejecutar inferencia con una indicación de puntos negativos
results = model(points=[[[400, 370], [900, 370]]], labels=[[1, 0]])
Segmentarlo todo

Segmenta toda la imagen.

from ultralytics import SAM

# Cargar un modelo
model = SAM("sam_b.pt")

# Mostrar información del modelo (opcional)
model.info()

# Ejecutar inferencia
model("path/to/image.jpg")
  • La lógica consiste en segmentar toda la imagen si no se proporciona ninguna indicación (bboxes/puntos/máscaras).
Ejemplo de SAMPredictor

De este modo, puedes establecer la imagen una vez y ejecutar inferencias con varias indicaciones sin tener que ejecutar el codificador de imágenes varias veces.

import cv2

from ultralytics.models.sam import Predictor as SAMPredictor

# Crear SAMPredictor
overrides = {"conf": 0.25, "task": "segment", "mode": "predict", "imgsz": 1024, "model": "mobile_sam.pt"}
predictor = SAMPredictor(overrides=overrides)

# Configura la imagen
predictor.set_image("ultralytics/assets/zidane.jpg")  # Establecer con un archivo de imagen
predictor.set_image(cv2.imread("ultralytics/assets/zidane.jpg"))  # Establecer con np.ndarray
results = predictor(bboxes=[439, 437, 524, 709])

# Ejecutar inferencia con una indicación de un solo punto
results = predictor(points=[900, 370], labels=[1])

# Ejecutar inferencia con indicaciones de varios puntos
results = predictor(points=[[400, 370], [900, 370]], labels=[1, 1])

# Ejecutar inferencia con una indicación de puntos negativos
results = predictor(points=[[[400, 370], [900, 370]]], labels=[[1, 0]])

# Restablecer imagen
predictor.reset_image()

Segmentarlo todo con argumentos adicionales.

from ultralytics.models.sam import Predictor as SAMPredictor

# Crear SAMPredictor
overrides = {"conf": 0.25, "task": "segment", "mode": "predict", "imgsz": 1024, "model": "mobile_sam.pt"}
predictor = SAMPredictor(overrides=overrides)

# Segmentar con argumentos adicionales
results = predictor(source="ultralytics/assets/zidane.jpg", crop_n_layers=1, points_stride=64, min_mask_region_area=100)
Nota

Todos los results que se devuelven en los ejemplos anteriores son objetos Results que permiten acceder fácilmente a las máscaras predichas y a la imagen de origen.

Comparación de SAM frente a YOLO#

Aquí comparamos el modelo SAM-b de Meta con los modelos de segmentación de Ultralytics, incluido YOLO26n-seg:

ModeloTamaño
(MB)
Parámetros
(M)
Velocidad (CPU)
(ms/im)
Meta SAM-b37593.741703
MobileSAM40.710.123802
FastSAM-s con backbone YOLOv823.911.858.0
Ultralytics YOLOv8n-seg7.1 (52.8x más pequeño)3.4 (27.6x menos)24.8 (1682x más rápido)
Ultralytics YOLO11n-seg6.2 (60.5x más pequeño)2.9 (32.3x menos)24.3 (1716x más rápido)
Ultralytics YOLO26n-seg6.7 (56.0x más pequeño)2.7 (34.7x menos)25.2 (1655x más rápido)

Esta comparación muestra las diferencias considerables de tamaño y velocidad entre las variantes de SAM y los modelos de segmentación YOLO. Aunque SAM ofrece capacidades únicas de segmentación automática, los modelos YOLO, en particular YOLOv8n-seg, YOLO11n-seg y YOLO26n-seg, son mucho más pequeños, rápidos y eficientes desde el punto de vista computacional.

Las velocidades de SAM se han medido con PyTorch y las de YOLO, con ONNX Runtime. Las pruebas se han realizado en un Apple M4 Air de 2025 con 16 GB de RAM usando torch==2.10.0, ultralytics==8.4.31 y onnxruntime==1.24.4. Para reproducir esta prueba:

Ejemplo
from ultralytics import ASSETS, SAM, YOLO, FastSAM

# Perfilar SAM-b, MobileSAM
for file in ["sam_b.pt", "mobile_sam.pt"]:
    model = SAM(file)
    model.info()
    model(ASSETS)

# Perfilar FastSAM-s
model = FastSAM("FastSAM-s.pt")
model.info()
model(ASSETS)

# Perfilar modelos YOLO (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, nms=False)  # Cabezal sin NMS de YOLO26; no hace nada con YOLOv8/YOLO11
    model = YOLO(onnx_path)
    model(ASSETS)

Anotación automática: una forma rápida de crear conjuntos de datos de segmentación#

La anotación automática es una función clave de SAM que permite generar un conjunto de datos de segmentación mediante un modelo de detección preentrenado. Esta función permite anotar una gran cantidad de imágenes de forma rápida y precisa, sin necesidad de invertir tiempo en el etiquetado manual.

Genera tu conjunto de datos de segmentación con un modelo de detección#

Para anotar automáticamente tu conjunto de datos con el framework de 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="yolo26x.pt", sam_model="sam_b.pt")
ArgumentoTipoPredeterminadoDescripción
datastrobligatorioRuta al directorio que contiene las imágenes de destino que se van a anotar o segmentar.
det_modelstr'yolo26x.pt'Ruta al modelo de detección YOLO para la detección inicial de objetos.
sam_modelstr'sam_b.pt'Ruta al modelo SAM para la segmentación (admite los pesos de SAM, SAM 2, MobileSAM y SAM 3).
devicestr''Dispositivo de cálculo (p. ej., 'cuda:0', 'cpu' o '' para detectar automáticamente el dispositivo).
conffloat0.25Umbral de confianza de detección YOLO para filtrar las detecciones poco fiables.
ioufloat0.45Umbral de IoU para la supresión no máxima (NMS) y el filtrado de cajas superpuestas.
imgszint640Tamaño de entrada para cambiar el tamaño de las imágenes (se redondea al múltiplo de 32 más cercano por exceso si es necesario).
max_detint300Número máximo de detecciones por imagen para optimizar el uso de memoria.
classeslist[int]NoneLista de índices de clase que se van a detectar (p. ej., [0, 1] para persona y bicicleta).
output_dirstrNoneDirectorio donde se guardan las anotaciones (por defecto: directorio hermano de <data>_auto_annotate_labels).

La función auto_annotate recibe la ruta a tus imágenes y argumentos opcionales para especificar los modelos de detección y segmentación SAM preentrenados, el dispositivo en el que se ejecutarán los modelos y el directorio de salida donde se guardarán 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 resulta especialmente útil para 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 SAM te resulta útil en tus trabajos de investigación o desarrollo, considera citar el artículo:

Cita
@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 dar las gracias a Meta AI por crear y mantener este valioso recurso para la comunidad de visión artificial.

Preguntas frecuentes#

  • El Modelo de segmentación de cualquier cosa (SAM) de Meta es un revolucionario modelo de segmentación de imágenes diseñado para tareas de segmentación guiadas por indicaciones. Aprovecha una arquitectura avanzada que combina codificadores de imágenes e indicaciones con un decodificador de máscaras ligero para generar máscaras de segmentación de alta calidad a partir de distintas indicaciones, como pistas espaciales o textuales. Entrenado con el amplio conjunto de datos SA-1B, SAM destaca por su rendimiento zero-shot y se adapta a nuevas distribuciones de imágenes y tareas sin conocimientos previos.

  • Puedes utilizar el Modelo de segmentación de cualquier cosa (SAM) para segmentar imágenes ejecutando inferencias con distintas indicaciones, como cuadros delimitadores o puntos. Aquí tienes un ejemplo con Python:

    from ultralytics import SAM
    
    # Cargar un modelo
    model = SAM("sam_b.pt")
    
    # Segmentar con un prompt de caja delimitadora
    model("ultralytics/assets/zidane.jpg", bboxes=[439, 437, 524, 709])
    
    # Segmentar con una indicación de puntos
    model("ultralytics/assets/zidane.jpg", points=[900, 370], labels=[1])
    
    # Segmentar con indicaciones de varios puntos
    model("ultralytics/assets/zidane.jpg", points=[[400, 370], [900, 370]], labels=[1, 1])
    
    # Segmentar con indicaciones de varios puntos por objeto
    model("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 1]])
    
    # Segmentar con una indicación de puntos negativos.
    model("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 0]])

    También puedes ejecutar inferencias con SAM desde la interfaz de línea de comandos (CLI):

    yolo predict model=sam_b.pt source=path/to/image.jpg

    Para obtener instrucciones de uso más detalladas, visita la sección de segmentación.

  • 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 56x más pequeño y más de 1650x 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 eficiente desde el punto de vista computacional, mientras que los modelos SAM destacan en tareas de segmentación flexible, guiada por indicaciones y zero-shot.

  • SAM de Ultralytics ofrece una función de anotación automática que permite generar conjuntos de datos de segmentación mediante 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 recibe la ruta a tus imágenes y argumentos opcionales para los modelos de detección y segmentación SAM preentrenados, además de especificaciones del dispositivo y del directorio de salida. Consulta Anotación automática para ver la guía completa.

  • SAM se entrena con el amplio conjunto de datos SA-1B, que contiene más de 1.000 millones de máscaras distribuidas 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 rendimiento zero-shot impresionante en distintas tareas de segmentación. Para obtener más detalles, visita la sección de conjuntos de datos.

Comentarios