Ir al contenido

Modelo de Segmentación Rápida de Cualquier Cosa (FastSAM)

El modelo Fast Segment Anything (FastSAM) es una solución novedosa basada en CNN en tiempo real para la tarea Segment Anything. Esta tarea está diseñada para segmentar cualquier objeto dentro de una imagen basándose en varias indicaciones de interacción del usuario posibles. FastSAM reduce significativamente las demandas computacionales al tiempo que mantiene un rendimiento competitivo, lo que la convierte en una opción práctica para una variedad de tareas de visión.



Ver: Seguimiento de objetos usando FastSAM con Ultralytics

Arquitectura del Modelo

Descripción general de la arquitectura del Modelo de Segmentación Rápida de Cualquier Cosa (FastSAM)

Visión general

FastSAM está diseñado para abordar las limitaciones del Segment Anything Model (SAM), un modelo Transformer pesado con importantes requisitos de recursos computacionales. FastSAM desacopla la tarea de segmentar cualquier cosa en dos etapas secuenciales: segmentación de todas las instancias y selección guiada por indicaciones. La primera etapa utiliza YOLOv8-seg para producir las máscaras de segmentación de todas las instancias de la imagen. En la segunda etapa, emite la región de interés correspondiente a la indicación.

Características clave

  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 cosa, lo que la hace valiosa para las aplicaciones industriales que requieren resultados rápidos.

  2. Eficiencia y rendimiento: FastSAM ofrece una reducción significativa en las demandas computacionales y de recursos sin comprometer la calidad del rendimiento. Alcanza un rendimiento comparable al de SAM, pero con recursos computacionales drásticamente reducidos, lo que permite su aplicación en tiempo real.

  3. Segmentación Guiada por Prompts: FastSAM puede segmentar cualquier objeto dentro de una imagen guiado por varios prompts de interacción del usuario posibles, proporcionando flexibilidad y adaptabilidad en diferentes 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 producir eficazmente las máscaras de segmentación de todas las instancias en una imagen.

  5. Resultados Competitivos en Benchmarks: En la tarea de propuesta de objetos en MS COCO, FastSAM logra altas puntuaciones a una velocidad significativamente mayor que SAM en una sola NVIDIA RTX 3090, lo que demuestra su eficiencia y capacidad.

  6. Aplicaciones Prácticas: El enfoque propuesto proporciona una nueva solución práctica para un gran número de tareas de visión a una velocidad realmente alta, decenas o cientos de veces más rápido que los métodos actuales.

  7. Viabilidad de la Compresión de Modelos: FastSAM demuestra la viabilidad de una ruta que puede reducir significativamente el esfuerzo computacional al introducir un conocimiento previo artificial a la estructura, abriendo así nuevas posibilidades para la arquitectura de modelos grandes para tareas de visión general.

Modelos disponibles, tareas compatibles y modos de funcionamiento

Esta tabla presenta los modelos disponibles con sus pesos pre-entrenados específicos, las tareas que admiten y su compatibilidad con diferentes modos de operación como Inferencia, Validación, Entrenamiento y Exportación, indicados por emojis ✅ para los modos compatibles y emojis ❌ para los modos no compatibles.

Tipo de Modelo Pesos Pre-entrenados Tareas admitidas Inferencia Validación Entrenamiento Exportar
FastSAM-s FastSAM-s.pt Segmentación de instancias
FastSAM-x FastSAM-x.pt Segmentación de instancias

Comparación de FastSAM vs YOLO

Aquí comparamos los modelos SAM2 de Meta, incluyendo la variante SAM2-t más pequeña, 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
Meta SAM2-b 162 80.8 31901
Meta SAM2-t 78.1 38.9 25997
MobileSAM 40.7 10.1 25381
FastSAM-s con backbone YOLOv8 23.7 11.8 55.9
Ultralytics YOLOv8n-seg 6.7 (11.7 veces más pequeño) 3.4 (11.4 veces menos) 24.5 (1061 veces más rápido)
Ultralytics YOLO11n-seg 5.9 (13.2 veces más pequeño) 2.9 (13.4 veces menos) 30.1 (864 veces más rápido)

Esta comparación 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. Si bien SAM proporciona capacidades únicas de segmentación automática, los modelos YOLO, particularmente YOLOv8n-seg y YOLO11n-seg, son significativamente más pequeños, rápidos y computacionalmente eficientes.

Pruebas realizadas en un Apple M4 Pro 2025 con 24 GB de RAM usando 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)

Ejemplos de uso

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

Uso de Predicción

Para realizar detección de objetos en una imagen, use el predict método 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")
# Load a FastSAM model and segment everything with it
yolo segment predict model=FastSAM-s.pt source=path/to/bus.jpg imgsz=640

Este fragmento demuestra la simplicidad de cargar un modelo pre-entrenado y ejecutar una predicción en una imagen.

Ejemplo de FastSAMPredictor

De esta manera, puede ejecutar la inferencia en la imagen y obtener todo el segmento results una vez y ejecutar la inferencia de prompts varias veces sin ejecutar la inferencia varias veces.

from ultralytics.models.fastsam import FastSAMPredictor

# Create FastSAMPredictor
overrides = dict(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 elementos devueltos results en los ejemplos anteriores son Resultados objeto que permite acceder fácilmente a las máscaras predichas y a la imagen de origen.

Uso de Val

La validación del modelo en un conjunto de datos se puede hacer 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")
# Load a FastSAM model and validate it on the COCO8 example dataset at image size 640
yolo segment val model=FastSAM-s.pt data=coco8.yaml imgsz=640

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

Seguimiento del uso

Para realizar el seguimiento de objetos en una imagen, utiliza el track método 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)
yolo segment track model=FastSAM-s.pt source="path/to/video.mp4" imgsz=640

Uso oficial de FastSAM

FastSAM también está disponible directamente desde el repositorio https://github.com/CASIA-IVA-Lab/FastSAM. Aquí hay una breve descripción de los pasos típicos que puede seguir para usar FastSAM:

Instalación

  1. Clonar el repositorio FastSAM:

    git clone https://github.com/CASIA-IVA-Lab/FastSAM.git
    
  2. Cree y active un entorno Conda con Python 3.9:

    conda create -n FastSAM python=3.9
    conda activate FastSAM
    
  3. Navegue al repositorio clonado e instale los paquetes requeridos:

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

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

Ejemplo de uso

  1. Descargue un punto de control del modelo.

  2. Utiliza FastSAM para la inferencia. Comandos de ejemplo:

    • Segmentar todo en una imagen:

      python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg
      
    • Segmentar objetos específicos utilizando un prompt de texto:

      python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --text_prompt "the yellow dog"
      
    • Segmentar 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]"
      
    • Segmentar objetos cerca de 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 demo de Colab de CASIA-IVA-Lab.

Citas y agradecimientos

Nos gustaría reconocer a los autores de FastSAM por sus importantes contribuciones en el campo de la segmentación de instancias en tiempo real:

@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 se puede encontrar en arXiv. Los autores han hecho que su trabajo esté disponible públicamente y se puede acceder a la base de código en GitHub. Agradecemos sus esfuerzos para avanzar en el campo y hacer que su trabajo sea accesible a la comunidad en general.

Preguntas frecuentes

¿Qué es FastSAM y en qué se diferencia de SAM?

FastSAM, abreviatura de Fast Segment Anything Model (Modelo de Segmentación Rápida de Cualquier Cosa), es una solución en tiempo real basada en una red neuronal convolucional (CNN) diseñada para reducir las demandas computacionales manteniendo un alto rendimiento en las tareas de segmentación de objetos. A diferencia del Segment Anything Model (SAM), que utiliza una arquitectura más pesada basada en Transformer, FastSAM aprovecha Ultralytics YOLOv8-seg para una segmentación eficiente de instancias en dos etapas: segmentación de todas las instancias seguida de una selección guiada por indicaciones.

¿Cómo logra FastSAM un rendimiento de segmentación en tiempo real?

FastSAM logra la segmentación en tiempo real al desacoplar la tarea de segmentación en segmentación de todas las instancias con YOLOv8-seg y etapas de selección guiada por indicaciones. Al utilizar la eficiencia computacional de las CNN, FastSAM ofrece reducciones significativas en las demandas computacionales y de recursos, manteniendo al mismo tiempo un rendimiento competitivo. Este enfoque de dos etapas permite a FastSAM ofrecer una segmentación rápida y eficiente, adecuada para aplicaciones que requieren resultados rápidos.

¿Cuáles son las aplicaciones prácticas de FastSAM?

FastSAM es práctico para una variedad de tareas de visión artificial que requieren un rendimiento de segmentación en tiempo real. Las aplicaciones 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
  • Imágenes médicas para tareas de segmentación precisas y rápidas

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

¿Cómo utilizo el modelo FastSAM para la inferencia en python?

Para utilizar FastSAM para la inferencia en python, puede seguir el ejemplo a continuación:

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 detalles sobre los métodos de inferencia, consulta la sección Uso de Predicción de la documentación.

¿Qué tipos de prompts admite FastSAM para tareas de segmentación?

FastSAM admite múltiples tipos de indicaciones para guiar las tareas de segmentación:

  • Prompt para todo: Genera la segmentación de todos los objetos visibles.
  • Prompt de cuadro delimitador (BBox): Segmenta objetos dentro de un cuadro delimitador especificado.
  • Indicador de texto: Utiliza un texto descriptivo para segmentar objetos que coincidan con la descripción.
  • Indicador puntual: Segmenta objetos cerca de puntos específicos definidos por el usuario.

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



📅 Creado hace 1 año ✏️ Actualizado hace 2 meses

Comentarios