Saltar al contenido

Modelo de todo por segmentos rápidos (FastSAM)

El Modelo Rápido de Segmentar Cualquier Cosa (FastSAM) es una novedosa solución basada en CNN en tiempo real para la tarea Segmentar Cualquier Cosa. Esta tarea está diseñada para segmentar cualquier objeto dentro de una imagen basándose en varias posibles indicaciones de interacción del usuario. FastSAM reduce significativamente las demandas computacionales manteniendo un rendimiento competitivo, lo que lo convierte en una opción práctica para diversas tareas de visión.

Visión general de la arquitectura del Modelo de Todo Segmento Rápido (FastSAM)

Visión general

FastSAM está diseñado para hacer frente a las limitaciones del Modelo Segmentar Cualquier Cosa (SAM), un pesado modelo Transformador con importantes requisitos de recursos computacionales. El FastSAM desacopla la tarea de segmentar cualquier cosa en dos etapas secuenciales: la segmentación de todas las instancias y la selección guiada por instrucciones. 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, produce la región de interés correspondiente a la indicación.

Características principales

  1. Solución en tiempo real: Al aprovechar la eficacia 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 aplicaciones industriales que requieren resultados rápidos.

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

  3. Segmentación guiada por indicaciones: FastSAM puede segmentar cualquier objeto dentro de una imagen guiada por varias indicaciones posibles de interacción con el usuario, lo que proporciona flexibilidad y adaptabilidad en diferentes escenarios.

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

  5. Resultados competitivos en pruebas comparativas: En la tarea de propuesta de objetos en MS COCO, FastSAM consigue puntuaciones altas a una velocidad significativamente más rápida que SAM en una única NVIDIA RTX 3090, lo que demuestra su eficacia y capacidad.

  6. Aplicaciones prácticas: El enfoque propuesto proporciona una solución nueva y 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ápida que los métodos actuales.

  7. Viabilidad de la compresión de modelos: FastSAM demuestra la viabilidad de una vía que puede reducir significativamente el esfuerzo computacional introduciendo un previo artificial en la estructura, abriendo así nuevas posibilidades para la arquitectura de modelos grandes para tareas de visión general.

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 con ✅ emojis para los modos admitidos y ❌ emojis para los modos no admitidos.

Tipo de modelo Pesos preentrenados Tareas admitidas Inferencia Validación Formación Exportar
FastSAM-s FastSAM-s.pt Segmentación de instancias
FastSAM-x FastSAM-x.pt Segmentación de instancias

Ejemplos de uso

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

Predecir el uso

Para realizar la detección de objetos en una imagen, utiliza la función predict como se muestra a continuación:

Ejemplo

from ultralytics import FastSAM
from ultralytics.models.fastsam import FastSAMPrompt

# 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)

# Prepare a Prompt Process object
prompt_process = FastSAMPrompt(source, everything_results, device='cpu')

# Everything prompt
ann = prompt_process.everything_prompt()

# Bbox default shape [0,0,0,0] -> [x1,y1,x2,y2]
ann = prompt_process.box_prompt(bbox=[200, 200, 300, 300])

# Text prompt
ann = prompt_process.text_prompt(text='a photo of a dog')

# Point prompt
# points default [[0,0]] [[x1,y1],[x2,y2]]
# point_label default [0] [1,0] 0:background, 1:foreground
ann = prompt_process.point_prompt(points=[[200, 200]], pointlabel=[1])
prompt_process.plot(annotations=ann, output='./')
# 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 sencillez de cargar un modelo preentrenado y ejecutar una predicción sobre una imagen.

Uso de Val

La validación del modelo en un conjunto de datos puede hacerse del siguiente modo:

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 sólo admite la detección y segmentación de una única clase de objetos. Esto significa que reconocerá y segmentará todos los objetos como de la misma clase. Por tanto, al preparar el conjunto de datos, debes convertir todos los ID de categoría de objeto a 0.

Uso de la pista

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

FastSAM Uso oficial

FastSAM también está disponible directamente en el repositorio https://github.com/CASIA-IVA-Lab/FastSAM. He aquí un breve resumen de los pasos típicos que puedes dar para utilizar FastSAM:

Instalación

  1. Clona el repositorio FastSAM :
git clone https://github.com/CASIA-IVA-Lab/FastSAM.git
  1. Crea y activa un entorno Conda con Python 3.9:
conda create -n FastSAM python=3.9
conda activate FastSAM
  1. Navega hasta el repositorio clonado e instala los paquetes necesarios:
cd FastSAM
pip install -r requirements.txt
  1. Instala el modelo CLIP:
    pip install git+https://github.com/ultralytics/CLIP.git
    

Ejemplo de uso

  1. Descarga un modelo de punto de control.

  2. Utiliza FastSAM para hacer inferencias. Comandos de ejemplo:

    • Segmenta todo en una imagen:
    python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg
    
    • Segmenta objetos concretos utilizando la 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 una caja delimitadora (proporciona las coordenadas de la caja 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 concretos:
      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 una demo de Colab o en la demo webHuggingFace para tener una experiencia visual.

Citas y agradecimientos

Nos gustaría agradecer a los autores de FastSAM 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 FastSAM puede consultarse en arXiv. Los autores han puesto su trabajo a disposición del público, y se puede acceder al código base en GitHub. Agradecemos sus esfuerzos por hacer avanzar el campo y poner su trabajo a disposición de la comunidad en general.



Creado 2023-11-12, Actualizado 2024-05-01
Autores: RizwanMunawar (1), glenn-jocher (8), Laughing-q (1), berry-ding (1)

Comentarios