Modelo "Segment Anything" (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 a demanda con rendimiento en tiempo real, estableciendo nuevos estándares en este campo.
Introducción a SAM: El modelo Segment Anything
El modelo Segment Anything, o SAM, es un modelo vanguardista de segmentación de imágenes que permite la segmentación a demanda, lo que proporciona una versatilidad sin precedentes en las tareas de análisis de imágenes. SAM constituye el núcleo 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.
SAMEl avanzado diseño de le permite adaptarse a nuevas distribuciones de imágenes y tareas sin necesidad de conocimientos previos, una característica conocida como transferencia sin disparos. Entrenado en el amplio conjunto de datos SA-1B, que contiene más de mil 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 nuevo conjunto de datos SA-1B. SA-1B contiene 11 millones de imágenes diversas, de alta resolución, con licencia y con protección de la privacidad, y 1.100 máscaras de segmentación de alta calidad. Estas máscaras fueron anotadas de forma totalmente automática por SAM y, según se ha comprobado mediante valoraciones humanas y numerosos experimentos, son de gran 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 principales del modelo Segment Anything (SAM)
- Tarea de segmentación con estímulo: SAM se diseñó teniendo en cuenta una tarea de segmentación con estímulo, lo que le permite generar máscaras de segmentación válidas a partir de cualquier estímulo, como pistas espaciales o de texto que identifiquen un objeto.
- Arquitectura avanzada: El modelo Segment Anything emplea un potente codificador de imágenes, un codificador de avisos y un descodificador de máscaras ligero. Esta arquitectura única permite realizar consultas flexibles, calcular máscaras en tiempo real y detectar ambigüedades en las tareas de segmentación.
- El conjunto de datos SA-1B: Introducido por el proyecto Segment Anything, el conjunto de datos SA-1B incluye más de mil 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 presenta un rendimiento de disparo cero excepcional en diversas 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 inmediata.
Para conocer en profundidad el modelo Segment Anything y el conjunto de datos SA-1B, visite el sitio web de Segment Anything y consulte 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 mediante emojis ✅ para los modos admitidos y emojis ❌ para los modos no admitidos.
Tipo de modelo | Pesas preentrenadas | 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 Segment Anything 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 sus 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]])
Segmentar 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, puede configurar la imagen una vez y ejecutar la inferencia de avisos varias veces sin tener que 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
véasePredictor/generate
Referencia.
Comparación SAM vs YOLO
Aquí comparamos el modelo SAM de Meta con el modelo de segmentación más pequeño de Ultralytics , YOLO11n-seg:
Modelo | Tamaño (MB) |
Parámetros (M) |
Velocidad (CPU) (ms/im) |
---|---|---|---|
Meta SAM-b | 375 | 93.7 | 49401 |
MobileSAM | 40.7 | 10.1 | 25381 |
FastSAM conred troncal YOLOv8 | 23.7 | 11.8 | 55.9 |
Ultralytics YOLOv8n-seg | 6,7 (11,7 veces menor) | 3,4 (11,4 veces menos) | 24,5 (1061 veces más rápido) |
Ultralytics YOLO11n-seg | 5,9 (13,2x menor) | 2,9 (13,4 veces menos) | 30,1 (864 veces más rápido) |
Esta comparación demuestra las diferencias sustanciales de tamaño y velocidad de los modelos entre las variantes de SAM y los modelos de segmentación de YOLO . Mientras que SAM proporciona capacidades únicas de segmentación automática, los modelos YOLO , en particular YOLOv8n y YOLO11n-seg, son significativamente más pequeños, más rápidos y más eficientes desde el punto de vista computacional.
Pruebas realizadas en un Apple M4 Pro 2025 con 24 GB de RAM utilizando torch==2.6.0
y ultralytics==8.3.90
. Para reproducir esta prueba:
Ejemplo
from ultralytics import ASSETS, SAM, YOLO, FastSAM
# Profile SAM2-t, SAM2-b, SAM-b, MobileSAM
for file in ["sam_b.pt", "sam2_b.pt", "sam2_t.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
for file_name in ["yolov8n-seg.pt", "yolo11n-seg.pt"]:
model = YOLO(file_name)
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 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 la anotación rápida y precisa de un gran número de imágenes, evitando la necesidad de un laborioso etiquetado manual.
Genere su conjunto de datos de segmentación utilizando un modelo de detección
Para auto-anotar su conjunto de datos con el marco Ultralytics , utilice la función auto_annotate
como se muestra a continuación:
Ejemplo
Argumento | Tipo | Por defecto | 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 |
'yolo11x.pt' |
YOLO trayectoria del modelo de detección para la detección inicial de objetos. |
sam_model |
str |
'sam_b.pt' |
Trayectoria del modelo SAM para la segmentación (admite las variantes SAM, SAM2 y los modelos mobile_sam). |
device |
str |
'' |
Dispositivo de cálculo (por ejemplo, 'cuda:0', 'cpu', o '' para la detección automática de dispositivos). |
conf |
float |
0.25 |
YOLO umbral de confianza de detección para filtrar las detecciones débiles. |
iou |
float |
0.45 |
Umbral IoU de Supresión No Máxima para filtrar cajas solapadas. |
imgsz |
int |
640 |
Tamaño de entrada para redimensionar las imágenes (debe ser múltiplo de 32). |
max_det |
int |
300 |
Número máximo de detecciones por imagen para ahorrar memoria. |
classes |
list[int] |
None |
Lista de índices de clase a detectar (por ejemplo, [0, 1] para persona y bicicleta). |
output_dir |
str |
None |
Guardar directorio para anotaciones (por defecto './labels' relativo a la ruta de datos). |
En auto_annotate
toma la ruta de acceso a sus imágenes, con argumentos opcionales para especificar los modelos de detección y segmentación SAM preentrenados, 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 encuentra útil SAM en su trabajo de investigación o desarrollo, considere la posibilidad de 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 por computador.
PREGUNTAS FRECUENTES
¿Qué es el Segment Anything Model (SAM) de Ultralytics?
El Segment Anything ModelSAM) de Ultralytics es un revolucionario modelo de segmentación de imágenes diseñado para tareas de segmentación a partir de 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 extenso 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.
¿Cómo puedo utilizar el modelo Segment Anything Model (SAM) para la segmentación de imágenes?
Puede utilizar el Segment Anything Model (SAM) para la segmentación de imágenes ejecutando la inferencia con varias indicaciones como cajas delimitadoras o puntos. He aquí un ejemplo que utiliza 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, puede ejecutar la inferencia con SAM en la interfaz de línea de comandos (CLI):
Para obtener instrucciones de uso más detalladas, visite la sección Segmentación.
¿Cómo se comparan los modelos SAM y YOLO en términos de rendimiento?
En comparación con los modelos YOLO , las variantes de SAM como SAM, SAM2, MobileSAM y FastSAM suelen ser más grandes y lentas, pero ofrecen capacidades únicas de segmentación zero-shot. Por ejemplo, Ultralytics YOLOv8n es 11,7 veces más pequeño y 1069 veces más rápido que el modelo SAM original de Meta, lo que pone de manifiesto la importante ventaja de YOLO en cuanto a velocidad y eficacia. Del mismo modo, el más reciente YOLO11n-seg ofrece un tamaño aún menor y mantiene una impresionante velocidad de inferencia. 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 sobresalen en tareas de segmentación flexibles, con posibilidad de respuesta y sin disparos.
¿Cómo puedo autoanotar mi conjunto de datos mediante 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. He aquí 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 sus imágenes y argumentos opcionales para los modelos de detección preentrenados y de segmentación SAM , junto con las especificaciones del dispositivo y del directorio de salida. Para obtener una guía completa, consulte Anotación automática.
¿Qué conjuntos de datos se utilizan para entrenar el modelo Segment Anything (SAM)?
SAM se entrena con el extenso conjunto de datos SA-1B, que incluye más de mil 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 sin disparos en diversas tareas de segmentación. Si desea más información, visite la sección Conjunto de datos.