Ultralytics YOLO27:

Modelo rápido de segmentación de cualquier objeto (FastSAM)#

El Modelo rápido de segmentación de cualquier objeto (FastSAM) es una solución novedosa basada en CNN y capaz de funcionar en tiempo real para la tarea de segmentar cualquier objeto. Esta tarea está diseñada para segmentar cualquier objeto dentro de una imagen a partir de varios posibles tipos de indicaciones de interacción del usuario. FastSAM reduce significativamente las necesidades computacionales, a la vez que mantiene un rendimiento competitivo, lo que lo convierte en una opción práctica para diversas tareas de visión.



Watch: Object Tracking using FastSAM with Ultralytics

Arquitectura del modelo#

Descripción general de la arquitectura del Modelo rápido de segmentación de cualquier objeto (FastSAM)

Descripción general#

FastSAM está diseñado para abordar las limitaciones del Modelo de segmentación de cualquier objeto (SAM), un modelo Transformer pesado que requiere muchos recursos computacionales. FastSAM divide la tarea de segmentar cualquier objeto en dos etapas secuenciales: segmentación de instancias de todas las instancias y selección guiada por indicaciones. En la primera etapa, utiliza YOLOv8-seg para generar las máscaras de segmentación de todas las instancias de la imagen. En la segunda etapa, genera la región de interés correspondiente a la indicación.

Características principales#

  1. Solución en tiempo real: Al aprovechar la eficiencia computacional de las CNN, FastSAM proporciona una solución en tiempo real para la tarea de segmentar cualquier objeto, lo que la hace valiosa para aplicaciones industriales que requieren resultados rápidos.

  2. Eficiencia y rendimiento: FastSAM reduce significativamente las necesidades computacionales y de recursos sin comprometer la calidad del rendimiento. Logra un rendimiento comparable al de SAM, pero con muchos menos recursos computacionales, lo que permite su uso en aplicaciones en tiempo real.

  3. Segmentación guiada por indicaciones: FastSAM puede segmentar cualquier objeto dentro de una imagen mediante varios posibles tipos de indicaciones de interacción del usuario, lo que proporciona flexibilidad y adaptabilidad en distintos escenarios.

  4. Basado en YOLOv8-seg: FastSAM se basa en YOLOv8-seg, un detector de objetos equipado con una rama de segmentación de instancias. Esto le permite generar eficazmente las máscaras de segmentación de todas las instancias de una imagen.

  5. Resultados competitivos en benchmarks: En la tarea de propuesta de objetos de MS COCO, FastSAM obtiene puntuaciones altas a una velocidad considerablemente superior a la de SAM en una única NVIDIA RTX 3090, lo que demuestra su eficiencia y capacidad.

  6. Aplicaciones prácticas: El enfoque propuesto ofrece una solución nueva y práctica para un gran número de tareas de visión a una velocidad muy alta, decenas o cientos de veces superior a la de los métodos actuales.

  7. Viabilidad de la compresión del modelo: FastSAM demuestra la viabilidad de un enfoque que puede reducir significativamente el esfuerzo computacional mediante la introducción de un prior artificial en la estructura, lo que abre nuevas posibilidades para arquitecturas de modelos grandes destinadas a tareas generales de visión.

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, indicados mediante emojis ✅ para los modos compatibles y emojis ❌ para los no compatibles.

Tipo de modeloPesos preentrenadosTareas compatiblesEntrenamientoValidaciónInferenciaExportar
FastSAM-sFastSAM-s.ptSegmentación de instancias
FastSAM-xFastSAM-x.ptSegmentación de instancias

Comparativa de FastSAM con YOLO#

Aquí comparamos FastSAM-s con las variantes de SAM de Meta y los modelos de segmentación de Ultralytics, incluido YOLO26n-seg:

ModeloTamaño
(MB)
Parámetros
(M)
Velocidad (CPU)
(ms/im)
Meta SAM-b37593.741703
Meta SAM2-b16280.828867
Meta SAM2-t78.138.923430
MobileSAM40.710.123802
FastSAM-s con backbone de YOLOv823.911.858.0
Ultralytics YOLOv8n-seg7.1 (11.0 veces más pequeño)3.4 (11.4 veces menos)24.8 (945 veces más rápido)
Ultralytics YOLO11n-seg6.2 (12.6x más pequeño)2.9 (13.4 veces menos)24.3 (964x más rápido)
Ultralytics YOLO26n-seg6.7 (11.7 veces más pequeño)2.7 (14.4x menos)25.2 (930 veces más rápido)

Esta comparación demuestra las diferencias sustanciales 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, especialmente YOLOv8n-seg, YOLO11n-seg y YOLO26n-seg, son considerablemente 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 utilizando 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

# 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 (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)  # YOLO26 NMS-free head; no-op for YOLOv8/YOLO11
    model = YOLO(onnx_path)
    model(ASSETS)

Ejemplos de uso#

Los modelos FastSAM son fáciles de integrar en tus aplicaciones de Python. Ultralytics proporciona una API de Python y comandos de CLI fáciles de usar para agilizar el desarrollo.

Uso de Predict#

Para segmentar una imagen, utiliza el método predict como se muestra a continuación:

Ejemplo
from ultralytics import FastSAM

# Define an inference source
source = "path/to/bus.jpg"

# Create a FastSAM model
model = FastSAM("FastSAM-s.pt")  # or FastSAM-x.pt

# Run inference on an image
everything_results = model(source, device="cpu", retina_masks=True, imgsz=1024, conf=0.4, iou=0.9)

# Run inference with bboxes prompt
results = model(source, bboxes=[439, 437, 524, 709])

# Run inference with points prompt
results = model(source, points=[[200, 200]], labels=[1])

# Run inference with texts prompt
results = model(source, texts="a photo of a dog")

# Run inference with bboxes and points and texts prompt at the same time
results = model(source, bboxes=[439, 437, 524, 709], points=[[200, 200]], labels=[1], texts="a photo of a dog")

Este fragmento muestra lo sencillo que es cargar un modelo preentrenado y ejecutar una predicción en una imagen.

Ejemplo de FastSAMPredictor

De esta forma puedes ejecutar la inferencia en una imagen y obtener todos los results de segmentación una vez, para después ejecutar la inferencia con distintas indicaciones varias veces sin repetir la inferencia.

from ultralytics.models.fastsam import FastSAMPredictor

# Create FastSAMPredictor
overrides = {"conf": 0.25, "task": "segment", "mode": "predict", "model": "FastSAM-s.pt", "save": False, "imgsz": 1024}
predictor = FastSAMPredictor(overrides=overrides)

# Segment everything
everything_results = predictor("ultralytics/assets/bus.jpg")

# Prompt inference
bbox_results = predictor.prompt(everything_results, bboxes=[[200, 200, 300, 300]])
point_results = predictor.prompt(everything_results, points=[200, 200])
text_results = predictor.prompt(everything_results, texts="a photo of a dog")
Nota

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.

Uso de Val#

Ten en cuenta que FastSAM solo admite la detección y segmentación de una única clase de objetos. Esto significa que reconocerá y segmentará todos los objetos como si pertenecieran a la misma clase. Por tanto, al preparar el conjunto de datos, debes convertir todos los ID de categoría de objeto a 0.

La validación del modelo en un conjunto de datos puede realizarse de la siguiente manera:

Ejemplo
from ultralytics import FastSAM

# Create a FastSAM model
model = FastSAM("FastSAM-s.pt")  # or FastSAM-x.pt

# Validate the model
results = model.val(data="coco8-seg.yaml")

Uso de Track#

Para realizar el seguimiento de objetos en una imagen, utiliza el método track como se muestra a continuación:

Ejemplo
from ultralytics import FastSAM

# Create a FastSAM model
model = FastSAM("FastSAM-s.pt")  # or FastSAM-x.pt

# Track with a FastSAM model on a video
results = model.track(source="path/to/video.mp4", imgsz=640)

Uso oficial de FastSAM#

FastSAM también está disponible directamente desde el repositorio CASIA-LMC-Lab/FastSAM. Aquí tienes un breve resumen de los pasos típicos que podrías seguir para utilizar FastSAM:

Instalación#

  1. Clona el repositorio de FastSAM:

    git clone https://github.com/CASIA-LMC-Lab/FastSAM.git
  2. Crea y activa un entorno de Conda con Python 3.9:

    conda create -n FastSAM python=3.9
    conda activate FastSAM
  3. Accede al repositorio clonado e instala los paquetes necesarios:

    cd FastSAM
    pip install -r requirements.txt
  4. Instala el modelo CLIP:

    pip install git+https://github.com/ultralytics/CLIP.git

Ejemplo de uso#

  1. Descarga un punto de control del modelo.

  2. Utiliza FastSAM para la inferencia. Ejemplos de comandos:

    • Segmenta todo lo que haya en una imagen:

      python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg
    • Segmenta objetos específicos mediante una indicación de texto:

      python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --text_prompt "the yellow dog"
    • Segmenta objetos dentro de un cuadro delimitador (proporciona las coordenadas del cuadro en formato xywh):

      python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --box_prompt "[570,200,230,400]"
    • Segmenta objetos cercanos a puntos específicos:

      python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --point_prompt "[[520,360],[620,300]]" --point_label "[1,0]"

Además, puedes probar FastSAM a través de la demostración de Colab de CASIA-LMC-Lab.

Citas y agradecimientos#

Queremos reconocer las importantes contribuciones de los autores de FastSAM al campo de la segmentación de instancias en tiempo real:

Cita
@misc{zhao2023fast,
      title={Fast Segment Anything},
      author={Xu Zhao and Wenchao Ding and Yongqi An and Yinglong Du and Tao Yu and Min Li and Ming Tang and Jinqiao Wang},
      year={2023},
      eprint={2306.12156},
      archivePrefix={arXiv},
      primaryClass={cs.CV}
}

El artículo original de FastSAM está disponible en arXiv. Los autores han puesto su trabajo a disposición del público, y el código fuente puede consultarse en GitHub. Agradecemos sus esfuerzos por impulsar este campo y hacer su trabajo accesible a una comunidad más amplia.

Preguntas frecuentes#

  • FastSAM, abreviatura de Modelo rápido de segmentación de cualquier objeto, es una solución basada en una red neuronal convolucional (CNN) diseñada para funcionar en tiempo real y reducir las necesidades computacionales, manteniendo un rendimiento alto en tareas de segmentación de objetos. A diferencia del Modelo de segmentación de cualquier objeto (SAM), que utiliza una arquitectura más pesada basada en Transformer, FastSAM aprovecha Ultralytics YOLOv8-seg para realizar una segmentación de instancias eficiente en dos etapas: segmentación de todas las instancias seguida de selección guiada por indicaciones.

  • FastSAM logra la segmentación en tiempo real dividiendo la tarea de segmentación en dos etapas: segmentación de todas las instancias con YOLOv8-seg y selección guiada por indicaciones. Al utilizar la eficiencia computacional de las CNN, FastSAM reduce significativamente las necesidades computacionales y de recursos, al tiempo que mantiene un rendimiento competitivo. Este enfoque en dos etapas permite a FastSAM ofrecer una segmentación rápida y eficiente, adecuada para aplicaciones que requieren resultados inmediatos.

  • FastSAM resulta práctico para diversas tareas de visión artificial que requieren un rendimiento de segmentación en tiempo real. Entre sus aplicaciones se incluyen:

    • Automatización industrial para el control y la garantía de calidad
    • Análisis de vídeo en tiempo real para seguridad y vigilancia
    • Vehículos autónomos para la detección y segmentación de objetos
    • Procesamiento de imágenes médicas para tareas de segmentación precisas y rápidas

    Su capacidad para gestionar distintos tipos de indicaciones de interacción del usuario hace que FastSAM sea adaptable y flexible para diversos escenarios.

  • Para utilizar FastSAM para la inferencia en Python, puedes seguir el ejemplo siguiente:

    from ultralytics import FastSAM
    
    # Define an inference source
    source = "path/to/bus.jpg"
    
    # Create a FastSAM model
    model = FastSAM("FastSAM-s.pt")  # or FastSAM-x.pt
    
    # Run inference on an image
    everything_results = model(source, device="cpu", retina_masks=True, imgsz=1024, conf=0.4, iou=0.9)
    
    # Run inference with bboxes prompt
    results = model(source, bboxes=[439, 437, 524, 709])
    
    # Run inference with points prompt
    results = model(source, points=[[200, 200]], labels=[1])
    
    # Run inference with texts prompt
    results = model(source, texts="a photo of a dog")
    
    # Run inference with bboxes and points and texts prompt at the same time
    results = model(source, bboxes=[439, 437, 524, 709], points=[[200, 200]], labels=[1], texts="a photo of a dog")

    Para obtener más información sobre los métodos de inferencia, consulta la sección Uso de Predict de la documentación.

  • FastSAM admite varios tipos de indicaciones para guiar las tareas de segmentación:

    • Indicación de todo: Genera la segmentación de todos los objetos visibles.
    • Indicación de cuadro delimitador (BBox): Segmenta los objetos dentro de un cuadro delimitador especificado.
    • Indicación de texto: Utiliza un texto descriptivo para segmentar los objetos que coinciden con la descripción.
    • Indicación de punto: Segmenta los objetos cercanos a puntos definidos por el usuario.

    Esta flexibilidad permite a FastSAM adaptarse a una amplia variedad de escenarios de interacción del usuario, lo que aumenta su utilidad en distintas aplicaciones. Para obtener más información sobre el uso de estas indicaciones, consulta la sección Características principales.

Comentarios