Modelo de todo por segmentos rápidos (FastSAM)
El Fast Segment Anything Model (FastSAM) es una novedosa solución 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 posibles de interacción con el usuario. FastSAM reduce significativamente las demandas computacionales a la vez que mantiene un rendimiento competitivo, lo que lo convierte en una opción práctica para una gran variedad de tareas de visión.
Observa: Seguimiento de objetos mediante FastSAM con Ultralytics
Arquitectura modelo
Visión general
FastSAM está diseñado para hacer frente a las limitaciones del Segment Anything Model (SAM), un pesado modelo Transformer con importantes requisitos de recursos computacionales. FastSAM desacopla la tarea de segmentar cualquier cosa en dos etapas secuenciales: lasegmentació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, se obtiene la región de interés correspondiente a la solicitud.
Características principales
-
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 aplicaciones industriales que requieren resultados rápidos.
-
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 recursos computacionales drásticamente reducidos, lo que permite una aplicación en tiempo real.
-
Segmentación guiada por instrucciones: FastSAM puede segmentar cualquier objeto dentro de una imagen guiada por varias instrucciones posibles de interacción con el usuario, lo que proporciona flexibilidad y adaptabilidad en diferentes escenarios.
-
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.
-
Resultados competitivos en pruebas comparativas: En la tarea de propuesta de objetos en MS COCO, FastSAM obtiene puntuaciones elevadas a una velocidad significativamente mayor que SAM en un único NVIDIA RTX 3090, lo que demuestra su eficiencia y capacidad.
-
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.
-
Viabilidad de la compresión de modelos: FastSAM demuestra la viabilidad de una vía que puede reducir significativamente el esfuerzo computacional mediante la introducción de un previo artificial en la estructura, abriendo así nuevas posibilidades para la arquitectura de grandes modelos 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 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 |
---|---|---|---|---|---|---|
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 sus aplicaciones Python . Ultralytics proporciona una API Python y comandos CLI fáciles de usar para agilizar el desarrollo.
Predecir el uso
Para realizar detección de objetos en una imagen, utilice la función 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 demuestra la simplicidad de cargar un modelo preentrenado y ejecutar una predicción sobre una imagen.
Ejemplo de FastSAMPredictor
De esta manera se puede ejecutar la inferencia en la imagen y obtener todo el segmento results
una vez y ejecutar la inferencia 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 devueltos results
en los ejemplos anteriores son Resultados 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 puede hacerse del siguiente modo:
Ejemplo
Tenga 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 lo tanto, al preparar el conjunto de datos, debe convertir todos los ID de categoría de objeto a 0.
Uso de la pista
Para realizar el seguimiento de objetos en una imagen, utilice la función track
como se muestra a continuación:
Ejemplo
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 puede seguir para utilizar FastSAM:
Instalación
-
Clone el repositorio FastSAM :
-
Crear y activar un entorno Conda con Python 3.9:
-
Navegue hasta el repositorio clonado e instale los paquetes necesarios:
-
Instale el modelo CLIP:
Ejemplo de uso
-
Descargar un modelo de puesto de control.
-
Utilice FastSAM para realizar inferencias. Comandos de ejemplo:
-
Segmenta todo en una imagen:
-
Segmentar objetos específicos utilizando la indicación de texto:
-
Segmenta objetos dentro de una caja delimitadora (proporciona las coordenadas de la caja en formato xywh):
-
Segmentar objetos cerca de puntos específicos:
-
Además, puede 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:
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 este campo y poner su trabajo a disposición de la comunidad en general.
PREGUNTAS FRECUENTES
¿Qué es FastSAM y en qué se diferencia de SAM?
FastSAM, abreviatura de Fast Segment Anything Model, es una solución basada en redes neuronales convolucionales (CNN) en tiempo real diseñada para reducir las demandas computacionales manteniendo un alto rendimiento en tareas de segmentación de objetos. A diferencia del Segment Anything Model (SAM), que utiliza una arquitectura más pesada basada en transformadores, FastSAM aprovecha Ultralytics YOLOv8 -seg para una segmentación de instancias eficiente en dos etapas: segmentación de todas las instancias seguida de una selección guiada por indicaciones.
¿Cómo consigue FastSAM un rendimiento de segmentación en tiempo real?
FastSAM logra la segmentación en tiempo real desacoplando la tarea de segmentación en una segmentación en toda la instancia con YOLOv8-seg y etapas de selección guiadas por pronósticos. Al utilizar la eficiencia computacional de las CNN, FastSAM ofrece reducciones significativas en las demandas computacionales y de recursos, al tiempo que mantiene un rendimiento competitivo. Este enfoque de doble etapa permite a FastSAM ofrecer una segmentación rápida y eficaz, adecuada para aplicaciones que requieren resultados rápidos.
¿Cuáles son las aplicaciones prácticas de FastSAM?
FastSAM es práctico para una gran variedad de tareas de visión por ordenador 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
- Imágenes médicas para tareas de segmentación precisas y rápidas
Su capacidad para manejar diversas indicaciones de interacción con el usuario hace que FastSAM sea adaptable y flexible para diversos escenarios.
¿Cómo se utiliza el modelo FastSAM para la inferencia en Python?
Para utilizar FastSAM para la inferencia en Python, puede seguir el siguiente 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")
Para más detalles sobre los métodos de inferencia, consulte la sección Predecir el uso de la documentación.
¿Qué tipos de indicaciones admite FastSAM para las tareas de segmentación?
FastSAM admite varios tipos de avisos para guiar las tareas de segmentación:
- Todo a la vista: Genera segmentación para todos los objetos visibles.
- Indicador de cuadro delimitador (BBox): Segmenta objetos dentro de un cuadro delimitador especificado.
- Texto descriptivo: Utiliza un texto descriptivo para segmentar los objetos que coinciden con la descripción.
- Indicación de punto: Segmenta objetos cercanos a puntos específicos definidos por el usuario.
Esta flexibilidad permite a FastSAM adaptarse a una amplia gama de escenarios de interacción con el usuario, mejorando su utilidad en diferentes aplicaciones. Para más información sobre el uso de estas instrucciones, consulte la sección Características principales.