FastSAM para Tareas de Segmentación de Imágenes: Una Explicación Sencilla
La segmentación de imágenes es una tarea popular en visión artificial, cuyo objetivo es particionar una imagen de entrada en múltiples regiones, donde cada región representa un objeto separado.
Varios enfoques clásicos del pasado involucraron tomar el "backbone" de un 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 impulsó a la comunidad de aprendizaje automático a cambiar gradualmente el enfoque hacia el desarrollo de soluciones de aprendizaje "zero-shot".
El concepto "zero-shot" juega un papel importante al permitir que se omita la fase de ajuste fino, 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 artificial, Meta lanzó el ampliamente conocido "Segment Anything Model" (SAM) de propósito general en 2023, que permitió realizar tareas de segmentación con una calidad decente de manera "zero-shot".
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 (CASIA IVA) de la Academia China de Ciencias lanzó el modelo FastSAM. Como sugiere el adjetivo "fast" (rápido), FastSAM aborda las limitaciones de velocidad de SAM acelerando el proceso de inferencia hasta 50 veces, manteniendo al mismo tiempo una alta calidad de segmentación.
En este artículo, exploraremos la arquitectura de 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.
Se recomienda encarecidamente estar familiarizado con los conceptos básicos de la visión artificial, el modelo YOLO y comprender el objetivo de las tareas de segmentación.
Arquitectura
El proceso de inferencia en FastSAM se lleva a cabo en dos pasos:
1. Segmentación de todas las instancias. El objetivo es producir máscaras de segmentación para todos los objetos en la imagen.
2. Selección guiada por "prompt". Después de obtener todas las máscaras posibles, la selección guiada por "prompt" devuelve la región de la imagen que corresponde al "prompt" de entrada.
Comencemos con la segmentación de todas las instancias.
#### Segmentación de todas las instancias
Antes de examinar visualmente la arquitectura, veamos lo que dice la investigación 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 YOLACT" - Fast Segment Anything paper.
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, proporcionaremos una intuición simple sobre qué son y cómo se utilizan.
#### YOLACT (You Only Look at CoefficienTs)
YOLACT es un modelo convolucional de segmentación de instancias en tiempo real que se enfoca en la detección de alta velocidad, inspirado en el modelo YOLO, y logra un rendimiento comparable al del modelo Mask R-CNN.
YOLACT consta de dos módulos (ramas) principales:
1. Rama de prototipos. YOLACT crea un conjunto de máscaras de segmentación llamadas prototipos.
2. Rama de predicción. YOLACT realiza la detección de objetos prediciendo 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.
Para extraer las características iniciales de la imagen, YOLACT utiliza ResNet, seguido de una Red Piramidal de Características (FPN) para obtener características de múltiples escalas. Cada uno de los niveles P (que se muestran en la imagen) procesa características de diferentes tamaños mediante convoluciones (por ejemplo, P3 contiene las características más pequeñas, mientras que P7 captura las características de nivel superior de la imagen). Este enfoque ayuda a YOLACT a tener en cuenta los objetos en 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 encabezados:
1. Encabezado de detección. Se utiliza para predecir cuadros delimitadores y clases.
2. Encabezado de segmentación. Se utiliza para generar máscaras y combinarlas.
La diferencia clave es que YOLOv8-seg utiliza una arquitectura de "backbone" YOLO en lugar del "backbone" ResNet y FPN utilizados en YOLACT. Esto hace que YOLOv8-seg sea más ligero y rápido durante la inferencia.
Tanto YOLACT como YOLOv8-seg utilizan el número predeterminado de prototipos k = 32, que es un hiperparámetro ajustable. En la mayoría de los escenarios, esto proporciona una buena compensación entre velocidad y rendimiento de 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 utilizan luego para combinar linealmente los prototipos para producir la máscara final para el objeto.
#### Arquitectura FastSAM
La arquitectura de FastSAM se basa en YOLOv8-seg, pero también incorpora una FPN, similar a YOLACT. Incluye tanto encabezados de detección como de 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 luego para producir la máscara de segmentación final.
3. Durante el posprocesamiento, FastSAM extrae regiones, calcula cuadros delimitadores y realiza la segmentación de instancias para cada objeto.
Aunque el artículo no menciona detalles sobre el posprocesamiento, se puede observar que el repositorio oficial de FastSAM en GitHub utiliza el método cv2.findContours() de OpenCV en la etapa de predicción.
En la práctica, existen varios métodos para extraer máscaras de instancia de la máscara de segmentación final. Algunos ejemplos incluyen la detección de contornos (utilizada en FastSAM) y el análisis de componentes conectados (cv2.connectedComponents()).
#### Entrenamiento
Los investigadores de FastSAM utilizaron el mismo conjunto de datos SA-1B que los desarrolladores de SAM, pero entrenaron el detector CNN en solo el 2% de los datos. A pesar de esto, el detector CNN logra un rendimiento comparable al del 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ápida.
A modo de 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 Vision Transformer (ViT), que es conocida por sus altos requisitos computacionales. Por el contrario, FastSAM realiza la segmentación utilizando CNN, que son mucho más ligeras.
#### Selección guiada por "prompt"
La "tarea de segmentar cualquier cosa" implica producir una máscara de segmentación para un "prompt" dado, que puede representarse en diferentes formas.
#### "Prompt" de punto
Después de obtener múltiples prototipos para una imagen, se puede utilizar un "prompt" 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 de las máscaras de prototipo.
Al igual que SAM, FastSAM permite seleccionar múltiples puntos y especificar si pertenecen al primer plano o al fondo. Si un punto de primer plano correspondiente al objeto aparece en varias máscaras, se pueden utilizar puntos de fondo para filtrar las máscaras irrelevantes.
Sin embargo, si varias máscaras aún satisfacen los "prompts" de punto después del filtrado, se aplica la fusión de máscaras 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.
#### "Prompt" de cuadro
El "prompt" de cuadro implica seleccionar la máscara cuyo cuadro delimitador tiene la mayor Intersección sobre Unión (IoU) con el cuadro delimitador especificado en el "prompt".
#### "Prompt" de texto
Del mismo modo, para el "prompt" de texto, se selecciona la máscara que mejor se corresponde con la descripción del texto. Para lograr esto, se utiliza el modelo CLIP:
1. Se calculan las incrustaciones para el "prompt" de texto y las máscaras de prototipo k = 32.
2. Luego, se calculan las similitudes entre la incrustación de texto y los prototipos. El prototipo con la similitud más alta se posprocesa y se devuelve.
En general, para la mayoría de los modelos de segmentación, el "prompt" generalmente se aplica a nivel de prototipo.
Repositorio FastSAM
A continuación, se muestra el enlace al repositorio oficial de FastSAM, que incluye un archivo README.md claro y documentación.
Si planea usar una Raspberry Pi y desea ejecutar el modelo FastSAM en ella, asegúrese de consultar el repositorio de GitHub: Hailo-Application-Code-Examples. Contiene todo el código y los scripts necesarios para iniciar FastSAM en dispositivos periféricos.
En este artículo, hemos analizado FastSAM, una versión mejorada de SAM. Al combinar las mejores prácticas de los modelos YOLACT y YOLOv8-seg, FastSAM mantiene una alta calidad de segmentación al tiempo que logra un aumento significativo en la velocidad de predicción, acelerando la inferencia varias docenas de veces en comparación con el SAM original.
La capacidad de usar "prompts" con FastSAM proporciona una forma flexible de recuperar máscaras de segmentación para objetos de interés. Además, se ha demostrado que desacoplar la selección guiada por "prompt" de la segmentación de todas las instancias reduce la complejidad.
A continuación, se muestran algunos ejemplos de uso de FastSAM con diferentes "prompts", lo que demuestra visualmente que aún conserva la alta calidad de segmentación de SAM:
Recursos
- Fast Segment Anything | Xu Zhao, Wenchao Ding, et al. (2023)
- Segment Anything | Meta AI Research | Alexander Kirillov, Eric Mintum, et al. (2023)
- YOLACT, Real-time Instance Segmentation | Daniel Bolya, Chong Zhou, et al. (2019)
- SA-1B Dataset | Meta
Todas las imágenes son del autor a menos que se indique lo contrario.