Fastsam para tareas de segmentación de imágenes – explicado simplemente

segmentación es una tarea popular en la visión por computadora, con el objetivo de dividir una imagen de entrada en múltiples regiones, donde cada región representa un objeto separado.

Varios enfoques clásicos del pasado implicaron tomar una columna vertebral modelo (por ejemplo, U-NET) y ajustarlo en conjuntos de datos especializados. Si bien el ajuste fino funciona bien, la aparición de GPT-2 y GPT-3 llevó a la comunidad de aprendizaje automático a cambiar gradualmente el enfoque hacia el desarrollo de soluciones de aprendizaje de disparo cero.

El aprendizaje de cero-shot se refiere a la capacidad de un modelo para realizar una tarea sin haber recibido explícitamente ningún ejemplo de capacitación.

El concepto de disparo cero juega un papel importante al permitir que la fase de ajuste fino sea omitida, con la esperanza de que el modelo sea lo suficientemente inteligente como para resolver cualquier tarea sobre la marcha.

En el contexto de la visión por computadora, Meta lanzó el uso general ampliamente conocido “Segmento cualquier modelo”(SAM) en 2023, que permitió que las tareas de segmentación se realizarán con una calidad decente de manera cero.

La tarea de segmentación tiene como objetivo dividir una imagen en múltiples partes, con cada parte que representa un solo objeto.

Si bien los resultados a gran escala de SAM fueron impresionantes, varios meses después, el grupo de análisis de imágenes y videos de la Academia de Ciencias de China (Casia IVA) lanzó el modelo Fastsam. Como sugiere el adjetivo “rápido”, FastSam aborda las limitaciones de velocidad de SAM al acelerar el proceso de inferencia hasta 50 veces, mientras se mantiene una alta calidad de segmentación.

En este artículo, exploraremos la arquitectura Fastsam, las posibles opciones de inferencia y examinaremos qué lo hace “rápido” en comparación con el modelo SAM estándar. Además, veremos un ejemplo de código para ayudar a solidificar nuestra comprensión.

Como requisito previo, se recomienda encarecidamente que esté familiarizado con los conceptos básicos de la visión por computadora, el modelo YOLO y comprenda el objetivo de las tareas de segmentación.

Arquitectura

El proceso de inferencia en Fastsam tiene lugar en dos pasos:

  1. Segmentación de todas las instancias. El objetivo es producir máscaras de segmentación para todos los objetos de la imagen.
  2. Selección guiada por aviso. Después de obtener todas las máscaras posibles, la selección guiada por aviso devuelve la región de la imagen correspondiente a la solicitud de entrada.
La inferencia de Fastsam tiene lugar en dos pasos. Después de obtener las máscaras de segmentación, la selección guiada por aviso se usa para filtrar y fusionarlas en la máscara final.

Comencemos con la segmentación de todas las instancias.

Segmentación de todas las instancias

Antes de examinar visualmente la arquitectura, consulte el artículo original:

“La arquitectura de Fastsam se basa en Yolov8-seg, un detector de objetos equipado con la rama de segmentación de instancias, que utiliza el método de yolact”–Segmento rápido cualquier cosa papel

La definición puede parecer compleja para aquellos que no están familiarizados con Yolov8-Seg y Yolact. En cualquier caso, para aclarar mejor el significado detrás de estos dos modelos, proporcionaré una intuición simple sobre lo que son y cómo se usan.

Yolact (solo miras coeficientes)

Yolact es un modelo convolucional de segmentación de instancias en tiempo real que se centra en la detección de alta velocidad, inspirado en el modelo YOLO, y logra un rendimiento comparable al modelo Mask R-CNN.

Yolact consta de dos módulos principales (ramas):

  1. Rama prototipo. Yolact crea un conjunto de máscaras de segmentación llamadas prototipos.
  2. Rama de predicción. Yolact realiza la detección de objetos mediante la predicción de cuadros delimitadores y luego estima los coeficientes de máscara, que le dicen al modelo cómo combinar linealmente los prototipos para crear una máscara final para cada objeto.
Arquitectura de yolact: los bloques amarillos indican parámetros capacitables, mientras que los bloques grises indican parámetros no traenables. Fuente: Yolact, segmentación de instancias en tiempo real. El número de propotipos de máscaras en la imagen es k = 4. Imade adaptado por el autor.

Para extraer las características iniciales de la imagen, Yolact usa resnet, seguido de una red Pyramid Network (FPN) para obtener características a escala múltiple. Cada uno de los niveles P (que se muestran en la imagen) procesa características de diferentes tamaños utilizando convoluciones (por ejemplo, P3 contiene las características más pequeñas, mientras que P7 captura características de imagen de nivel superior). Este enfoque ayuda a Yolact a explicar objetos a varias escalas.

Yolov8-seg

Yolov8-Seg es un modelo basado en yolact e incorpora los mismos principios con respecto a los prototipos. También tiene dos cabezas:

  1. Cabeza de detección. Se utiliza para predecir cajas y clases delimitadoras.
  2. Cabezal de segmentación. Se usa para generar máscaras y combinarlas.

La diferencia clave es que YOLOV8-SEG utiliza una arquitectura troncal de Yolo en lugar de la columna vertebral de resnet y FPN utilizados en Yolact. Esto hace que Yolov8-seg sea más ligero y más rápido durante la inferencia.

Tanto Yolact como Yolov8-seg usan el número predeterminado de prototipos K = 32, que es un hiperparámetro sintonizable. En la mayoría de los escenarios, esto proporciona una buena compensación entre la velocidad y el rendimiento de la segmentación.

En ambos modelos, para cada objeto detectado, se predice un vector de tamaño K = 32, que representa los pesos para los prototipos de máscara. Estos pesos se usan para combinar linealmente los prototipos para producir la máscara final para el objeto.

Arquitectura de Fastsam

La arquitectura de Fastsam se basa en Yolov8-seg, pero también incorpora un FPN, similar a Yolact. Incluye cabezales de detección y segmentación, con K = 32 Prototipos. Sin embargo, dado que FastSam realiza la segmentación de todos los objetos posibles en la imagen, su flujo de trabajo difiere del de Yolov8-Seg y Yolact:

  1. Primero, Fastsam realiza la segmentación produciendo K = 32 Máscaras de imagen.
  2. Estas máscaras se combinan para producir la máscara de segmentación final.
  3. Durante el postprocesamiento, Fastsam extrae regiones, calcula las cajas limitadas y realiza la segmentación de instancias para cada objeto.
Arquitectura de Fastsam: los bloques amarillos indican parámetros capacitables, mientras que los bloques grises indican parámetros no traenables. Fuente: Segmento rápido cualquier cosa. Imagen adaptada por el autor.

Nota

Aunque el documento no menciona detalles sobre el postprocesamiento, se puede observar que el repositorio oficial de Fastsam GitHub utiliza el método CV2.FindConTours () de OpenCV en la etapa de predicción.

# The use of cv2.findContours() method the during prediction stage.
# Source: FastSAM repository (FastSAM / fastsam / prompt.py)  

def _get_bbox_from_mask(self, mask):
      mask = mask.astype(np.uint8)
      contours, hierarchy = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
      x1, y1, w, h = cv2.boundingRect(contours[0])
      x2, y2 = x1 + w, y1 + h
      if len(contours) > 1:
          for b in contours:
              x_t, y_t, w_t, h_t = cv2.boundingRect(b)
              # Merge multiple bounding boxes into one.
              x1 = min(x1, x_t)
              y1 = min(y1, y_t)
              x2 = max(x2, x_t + w_t)
              y2 = max(y2, y_t + h_t)
          h = y2 - y1
          w = x2 - x1
      return [x1, y1, x2, y2]

En la práctica, hay varios métodos para extraer máscaras de instancias de la máscara de segmentación final. Algunos ejemplos incluyen la detección de contornos (utilizado en FastSam) y el análisis de componentes conectados (cv2.connectedComponents ()).

Capacitación

Los investigadores de Fastsam usaron lo mismo Conjunto de datos SA-1B Como desarrolladores de SAM, pero capacitó al detector CNN en solo el 2% de los datos. A pesar de esto, el detector CNN logra un rendimiento comparable al SAM original, al tiempo que requiere significativamente menos recursos para la segmentación. ¡Como resultado, la inferencia en Fastsam es hasta 50 veces más rápido!

Como referencia, SA-1B consta de 11 millones de imágenes diversas y 1.100 millones de máscaras de segmentación de alta calidad.

¿Qué hace que Fastsam sea más rápido que Sam? SAM utiliza la arquitectura del transformador de visión (VIT), que es conocida por sus fuertes requisitos computacionales. Por el contrario, Fastsam realiza la segmentación utilizando CNN, que son mucho más ligeros.

Selección guiada rápida

El “Segmento de cualquier tarea” implica producir una máscara de segmentación para un mensaje dado, que puede representarse en diferentes formas.

Diferentes tipos de indicaciones procesadas por Fastsam. Fuente: Segmento rápido cualquier cosa. Imagen adaptada por el autor.

Punto de vista

Después de obtener múltiples prototipos para una imagen, se puede utilizar un mensaje de punto para indicar que el objeto de interés se encuentra (o no) en un área específica de la imagen. Como resultado, el punto especificado influye en los coeficientes para las máscaras prototipo.

Similar a SAM, Fastsam permite seleccionar múltiples puntos y especificar si pertenecen al primer plano o al fondo. Si aparece un punto de primer plano correspondiente al objeto en múltiples máscaras, se pueden usar puntos de fondo para filtrar máscaras irrelevantes.

Sin embargo, si varias máscaras aún satisfacen las indicaciones del punto después del filtrado, se aplica la fusión de la máscara para obtener la máscara final para el objeto.

Además, los autores aplican operadores morfológicos para suavizar la forma final de la máscara y eliminar pequeños artefactos y ruido.

Aviso

El indicador del cuadro implica seleccionar la máscara cuyo cuadro delimitador tiene la intersección más alta sobre la Unión (IOU) con el cuadro delimitador especificado en la solicitud.

Mensaje de texto

Del mismo modo, para el mensaje de texto, se selecciona la máscara que mejor corresponde a la descripción del texto. Para lograr esto, el Modelo de clip se usa:

  1. Se calculan los incrustaciones para el mensaje de texto y las máscaras prototipo K = 32.
  2. Luego se calculan las similitudes entre la inclusión del texto y los prototipos. El prototipo con la mayor similitud se procesa y se devuelve.
Para el mensaje de texto, el modelo de clip se usa para calcular la inclusión de texto de la solicitud y las insertas de la imagen de los prototipos de máscara. Se calculan las similitudes entre la incrustación de texto y los incrustaciones de la imagen, y se selecciona el prototipo correspondiente a la inserción de la imagen con la mayor similitud.

En general, para la mayoría de los modelos de segmentación, la solicitud generalmente se aplica a nivel de prototipo.

Repositorio de Fastsam

A continuación se muestra el enlace al Repositorio oficial de Fastsamque incluye un archivo y documentación clara de ReadMe.md.

Si planea usar una Raspberry Pi y desea ejecutar el modelo Fastsam, asegúrese de revisar el repositorio de GitHub: HAILO-APLICACIÓN Código de examen. Contiene todos los códigos y scripts necesarios para iniciar dispositivos FastSam en Edge.

En este artículo, hemos analizado Fastsam, una versión mejorada de SAM. Combinando las mejores prácticas de los modelos Yolact y Yolov8-Seg, Fastsam mantiene una alta calidad de segmentación al tiempo que logran un impulso significativo en la velocidad de predicción, acelerando la inferencia por varias docenas de veces en comparación con el SAM original.

La capacidad de usar indicaciones con FastSam proporciona una forma flexible de recuperar máscaras de segmentación para objetos de interés. Además, se ha demostrado que el desacoplamiento de la selección guiada por aviso de la segmentación de todas las instancias reduce la complejidad.

A continuación se presentan algunos ejemplos de uso de Fastsam con diferentes indicaciones, lo que demuestra visualmente que aún conserva la alta calidad de segmentación de SAM:

Fuente: Segmento rápido cualquier cosa
Fuente: Segmento rápido cualquier cosa

Recursos

Todas las imágenes son del autor a menos que se indique lo contrario.