La segmentación de imágenes es otra tarea popular de visión por computadora que tiene aplicaciones con diferentes modelos. Su utilidad en diferentes industrias y campos ha permitido más investigaciones y mejoras. Maskformer es parte de otra revolución de la segmentación de imágenes, utilizando su mecanismo de atención de máscara para detectar objetos que se superponen a sus cuadros delimitadores.
Realizar tareas como esta sería un desafío con otros modelos de segmentación de imágenes, ya que solo detectan imágenes utilizando el mecanismo por píxel. Maskformer resuelve este problema con su arquitectura transformadora. Existen otros modelos como R-CNN y DETR que también tienen esta capacidad. Aún así, examinaremos cómo el formador de máscaras rompe la segmentación de imágenes tradicional con su enfoque de objetos complejos.
Objetivos de aprendizaje
- Aprenda sobre la segmentación de instancias usando Maskformer.
- Obtener información sobre el principio de funcionamiento de este modelo.
- Estudiar la arquitectura modelo de maskformer.
- Inferencia en ejecución del modelo de formador de máscaras.
- Explorando aplicaciones de la vida real de Maskformer.
Este artículo fue publicado como parte del Blogatón de ciencia de datos.
¿Qué es Maskformer?
La segmentación de imágenes con este modelo viene con varias dimensiones. Masformer muestra un gran rendimiento con la segmentación semántica y de instancias. Conocer la diferencia entre estas dos tareas es esencial para la visión por computadora.
La segmentación semántica se centra en trabajar cada píxel de una imagen de forma individual. Entonces, agrupa los objetos en una clase según la etiqueta de clase; eso significa que si hay más de un automóvil en una imagen, el modelo los segmenta todos en la etiqueta de clase “automóvil”. Sin embargo, la segmentación de instancias va más allá de simplemente segmentar cada píxel y asignar una etiqueta de clase. La segmentación de instancias separa varias instancias de la misma clase, por lo que en los casos en que tenga más de un automóvil en una imagen, puede clasificarlos todos, es decir, Car1 y Car2.
La diferencia entre estas segmentaciones muestra la singularidad del modelo de formador de máscaras. Mientras que otros modelos pueden tratar uno u otro, Maskformer puede manejar tanto la segmentación semántica como la de instancia de manera unificada utilizando su enfoque de clasificación de máscaras.
El enfoque de clasificación de máscaras predice una etiqueta de clase y una máscara binaria para todas las instancias de un objeto en la imagen. Este concepto, combinado con una evaluación adicional consistente con la segmentación semántica y de instancia, ayuda a clasificar el enfoque de clasificación de máscaras de este modelo.
Arquitectura modelo del modelo Maskformer
La arquitectura del modelo de maskformer emplea diferentes características a lo largo de la fase de procesamiento de imágenes para garantizar que realice la tarea de segmentación tanto en situaciones semánticas como de instancia. Al igual que otros modelos recientes de visión por computadora, Maskformer utiliza una arquitectura transformadora, siguiendo una estructura codificador-decodificador para completar las tareas de segmentación.
Este proceso comienza extrayendo algunas características esenciales de la imagen de la entrada, y la columna vertebral organiza esta fase. En este caso, la columna vertebral podría ser cualquier arquitectura popular de red neuronal convolucional (CNN). Estos sistemas extraen características de la imagen y las denotan (por ejemplo, F).
Luego, las características indicadas se pasan a un decodificador de píxeles que genera incrustaciones por píxel. La mayoría de las veces esto se denomina 'E'. Maneja el contexto global y local de un píxel en la imagen. Sin embargo, Maskformer hace más que la segmentación por píxel cuando trabaja con imágenes. Y eso trae la sección sobre incrustaciones por segmento.
Por otro lado, un decodificador transformador también maneja características de la imagen. Pero esta vez, genera un conjunto de incrustaciones 'N' por segmento (Q). Esto localiza el segmento de imagen que desea clasificar, asignando diferentes pesos importantes a varios aspectos de la imagen. La identificación por segmento es la instancia potencial del objeto en la imagen que el formador de máscara busca identificar.
Este proceso varía de la arquitectura de transformador tradicional. Por lo general, las imágenes de entrada se encuentran con un codificador, mientras que el decodificador usa los datos para procesar una salida. Sin embargo, para modelos como Maskformer, la columna vertebral actúa como codificador, que maneja la entrada. Estos datos de entrada generan mapas de características que proporcionan los datos de la entrada.
Este concepto es la base de cómo este modelo procesa imágenes. Pero, ¿cómo proporciona el resultado? Hay algunos detalles sobre cómo funcionan las predicciones de clase y las etiquetas para este modelo. Profundicemos en ello;
Las incrustaciones por segmento generadas en este proceso son útiles para la predicción de clases en una imagen. La incrustación de N máscara también puede manejar posibles instancias de objetos en la imagen de entrada.
A continuación, MaskFormer genera máscaras binarias realizando un producto escalar entre incrustaciones de píxeles e incrustaciones de máscaras, seguido de una activación sigmoidea. Este paso produce máscaras binarias para cada instancia de objeto, lo que permite que algunas máscaras se superpongan.
Para la segmentación semántica, MaskFormer combina las máscaras binarias y las etiquetas de clase mediante la multiplicación de matrices para crear la imagen clasificada segmentada final. La segmentación semántica en este modelo se centra en etiquetar cada etiqueta de clase en función de cada píxel de una imagen.
Por lo tanto, etiqueta cada clase y no la instancia de estas clases. Un buen ejemplo de segmentación semántica es el modelo que etiqueta la clase de cada ser humano en una imagen como “Humanos”. Pero la segmentación de instancias etiquetaría cada escenario en la imagen y los clasificaría en “humano1” y “humano2”. Estos atributos le dan a Masformer la ventaja en la segmentación en comparación con otros modelos.
DETR es otro modelo que puede realizar segmentación de instancias. Aunque no es tan eficiente como Maskformer, su método es una mejora de la segmentación por píxel. Este modelo utiliza cuadros delimitadores para predecir las probabilidades de clase de los objetos en la imagen en lugar de la segmentación de máscaras.
A continuación se muestra un ejemplo de cómo funciona la segmentación con DETR:
Cómo ejecutar el modelo
Ejecutar este modelo requiere unos sencillos pasos. Usaremos la biblioteca de transformadores de caras abrazadas para obtener los recursos para realizar la segmentación de instancias en una imagen.
Importar las bibliotecas necesarias
En primer lugar, debe importar herramientas para procesar y segmentar imágenes en objetos. Y ahí es donde 'MaskFormerFeatureExtractor' y 'MaskFormerForInstanceSegmentation' entran en escena; la biblioteca PIL maneja imágenes mientras que la 'solicitud' recupera la URL de la imagen.
from transformers import MaskFormerFeatureExtractor, MaskFormerForInstanceSegmentation
from PIL import Image
import requests
Cargando el modelo Maskformer previamente entrenado
La primera línea de código inicia un extractor de características que prepara una imagen para el modelo. Implica cambiar el tamaño de la imagen, normalizarla y crear tensores de imagen. Luego, cargamos el modelo (entrenado en el conjunto de datos de coco). Maskformer puede realizar la segmentación de instancias y acabamos de preparar el entorno para esta tarea.
feature_extractor = MaskFormerFeatureExtractor.from_pretrained("facebook/maskformer-swin-base-coco")
model = MaskFormerForInstanceSegmentation.from_pretrained("facebook/maskformer-swin-base-coco")
Preparando la imagen
Como tenemos la biblioteca PIL, podemos cargar y modificar imágenes en nuestro entorno. Puede cargar una imagen usando su URL. Este código también ayuda a preparar la imagen en el formato necesario para el modelo MaskFormer.
# Load image from URL
url = "https://images.pexels.com/photos/5079180/pexels-photo-5079180.jpeg"
image = Image.open(requests.get(url, stream=True).raw)
inputs = feature_extractor(images=image, return_tensors="pt")
Ejecutar el modelo en la imagen preprocesada
outputs = model(**inputs)
# model predicts class_queries_logits of shape `(batch_size, num_queries)`
# and masks_queries_logits of shape `(batch_size, num_queries, height, width)`
class_queries_logits = outputs.class_queries_logits
masks_queries_logits = outputs.masks_queries_logits
Esto intenta proporcionar al modelo predicciones de clase de cada instancia de objeto en la imagen. El proceso de segmentación mostraría datos que representan la cantidad de instancias de objetos potenciales que detecta la imagen. Además, también obtenemos máscaras binarias que indican sus posiciones en la imagen.
Resultados
# you can pass them to feature_extractor for postprocessing
result = feature_extractor.post_process_panoptic_segmentation(outputs, target_sizes=(image.size(::-1)))(0)
# we refer to the demo notebooks for visualization (see "Resources" section in the MaskFormer docs)
predicted_panoptic_map = result("segmentation")
Finalmente, utilizamos el extractor de características para convertir la salida del modelo a un formato adecuado. Luego, llamamos a la función que devuelve una lista de resultados en la imagen; almacena el mapa de segmentación final donde a cada píxel se le asigna una etiqueta correspondiente a una clase de objeto. Entonces, el mapa de segmentación completo define la clase del objeto a través de cada etiqueta de píxel.
Para mostrar la imagen segmentada, debe asegurarse de que la antorcha y las bibliotecas metabólicas estén disponibles en el entorno. Esto le ayudará a visualizar y procesar el resultado del modelo.
import torch
import matplotlib.pyplot as plt
Aquí, visualizamos la salida para convertirla a un formato de imagen que podamos mostrar.
# Convert to PIL image format and display
plt.imshow(predicted_panoptic_map)
plt.axis('off')
plt.show()
Aplicación de Maskformer en la vida real
A continuación se muestran algunas aplicaciones útiles de este modelo en diversas industrias;
- Este modelo puede resultar valioso en la industria médica. La segmentación de instancias puede ayudar en diversos diagnósticos e imágenes médicas.
- La segmentación de instancias también ha encontrado aplicación en la interpretación de imágenes de satélite.
- La videovigilancia es otra forma de aprovechar los modelos de segmentación de instancias. Estos modelos pueden ayudarle a detectar imágenes e identificar objetos en diversas situaciones.
Hay muchas formas de utilizar Maskformer en la vida real. El reconocimiento facial, los coches autónomos y muchas otras aplicaciones pueden adoptar las capacidades de segmentación de instancias de este modelo.
Conclusión
Maskformer puede resultar útil para manejar tareas complejas de segmentación de imágenes, especialmente cuando se trata de imágenes con objetos superpuestos. Esta capacidad lo distingue de otros modelos tradicionales de segmentación de imágenes. Su arquitectura única basada en transformadores lo hace lo suficientemente versátil para tareas semánticas y de segmentación de instancias. Maskformer mejora los métodos tradicionales por píxel y establece un nuevo estándar en segmentación, abriendo un mayor potencial para aplicaciones avanzadas de visión por computadora.
Recursos
Conclusiones clave
Hay muchos puntos de conversación sobre este tema, pero aquí hay algunos aspectos destacados de la exploración de este modelo;
- Enfoque único de Maskformer: este modelo emplea una técnica especial con el mecanismo de atención de máscara con un marco basado en transformador para segmentar objetos de imágenes con diferentes instancias.
- Versatilidad en la aplicación: este modelo se utiliza para diversos fines en diferentes industrias, incluida la conducción autónoma, el diagnóstico médico y el espacio (interpretación satelital).
- Capacidades de segmentación: no muchos modelos tradicionales pueden manejar la segmentación dual como Maskformer, ya que este modo puede realizar segmentación semántica y de instancias.
Preguntas frecuentes
R. Este modelo utiliza un mecanismo de atención de máscara dentro de un marco de transformador, lo que le permite manejar objetos superpuestos en imágenes mejor que los modelos que utilizan métodos por píxel.
R. MaskFormer es capaz de realizar segmentación semántica (etiquetar todas las instancias de clase) y segmentación de instancias (distinguir instancias individuales dentro de una clase).
R. MaskFormer es ampliamente aplicable en industrias como la atención médica (para diagnóstico e imágenes médicas), análisis geoespacial (para imágenes satelitales) y seguridad (para sistemas de vigilancia).
R. Combina máscaras binarias con etiquetas de clase mediante la multiplicación de matrices, creando una imagen final segmentada y clasificada que resalta con precisión cada instancia de objeto.
Los medios que se muestran en este artículo no son propiedad de Analytics Vidhya y se utilizan a discreción del autor.