Saltar al contenido

Modelo de todo en 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 alcanza 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 un camino 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.

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/openai/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-01-25
Autores: glenn-jocher (7), berry-ding (1)

Comentarios