Mask2Former está aquí! Transformador de máscara de atención enmascarada para segmentación general de imágenes

Principio https://blog.csdn.net/bikahuli/article/details/121991697
Análisis del código fuente

Dirección del artículo: http://arxiv.org/abs/2112.01527
Dirección del proyecto: https://bowenc0221.github.io/mask2former

La arquitectura general de Mask2Former consta de tres componentes:

  1. Backbone Feature Extractor: El Backbone Feature Extractor extrae características de baja resolución de la imagen de entrada. En Mask2Former, el extractor de características de la red troncal suele ser un modelo Transformer, como ViT, Swin Transformer o RAN, etc.

  2. Decodificador de píxeles: el decodificador de píxeles aumenta progresivamente las características de baja resolución de la salida del extractor de características de la red troncal para generar incrustaciones por píxel de alta resolución. En Mask2Former, el decodificador de píxeles suele ser una red de deconvolución que restaura gradualmente la resolución de los mapas de características al tamaño de la imagen original mediante operaciones de deconvolución.

  3. Decodificador de transformador: los decodificadores de transformador operan en características de imagen para manejar consultas de objetos. En Mask2Former, el decodificador de Transformer generalmente consta de varias capas de Transformer, cada capa contiene un mecanismo de autoatención de varios cabezales y una red neuronal de avance. En el decodificador, la incrustación de cada ubicación representa las características de píxeles en esa ubicación y se puede predecir una máscara binaria a partir de una consulta de objeto.

En general, la arquitectura general de Mask2Former usa el modelo Transformer para extraer las características de la imagen y usa una red de desconvolución para restaurar gradualmente la resolución al tamaño de la imagen original. Luego, se usa un decodificador Transformer para operar en las características de la imagen para manejar consultas de objetos y decodificar predicciones de máscara binaria de las incrustaciones en cada ubicación.

¿Qué es la extracción de características de baja resolución?

En el aprendizaje profundo, la extracción de características se refiere a la extracción de características representativas de los datos de entrada para tareas posteriores, como clasificación, identificación y detección. En el procesamiento de imágenes, las redes neuronales convolucionales (CNN) se utilizan a menudo para extraer características de la imagen. CNN extrae gradualmente las características de la imagen de la imagen original a través de operaciones como la convolución y la agrupación.

En Mask2Former, se utiliza un extractor de características de columna vertebral para extraer características de baja resolución de la imagen de entrada. Estas características de baja resolución generalmente se refieren a mapas de características de menor tamaño obtenidos después de una serie de operaciones como convolución y agrupación. Estos mapas de características tienen una resolución más baja, pero contienen información básica de la imagen, como bordes, texturas, etc. Estas características de baja resolución se pueden utilizar como entrada para la extracción de características de mayor nivel para un mejor reconocimiento, clasificación, detección y otras tareas.

En Mask2Former, el extractor de características de la red troncal suele ser un modelo Transformer, como ViT, Swin Transformer o RAN, etc. Estos modelos de Transformer pueden usar el mecanismo de autoatención para capturar la relación espacial global, a fin de extraer mejor las características de la imagen.

Máscara2Ex

Mask2Former es un modelo de segmentación de imágenes propuesto por investigadores de la Universidad de Ciencia y Tecnología de Huazhong en 2021. Su artículo se titula "Mask2Former: From Masked Self-Atention to Masked Fully Convolution for Few-Shot Image Segmentation". La principal contribución de este modelo es introducir la tecnología de enmascaramiento y el mecanismo de autoatención en la red totalmente convolucional para lograr una segmentación de imágenes más eficiente y precisa.

La arquitectura de Mask2Former consta de tres módulos principales: codificador enmascarado, decodificador enmascarado y módulo de destilación. Entre ellos, el codificador de portada es principalmente responsable de codificar la imagen de entrada en vectores de características, el decodificador de portada usa estos vectores de características para generar máscaras de segmentación y el módulo de destilación se usa para optimizar aún más los resultados de segmentación.

En comparación con el modelo tradicional de segmentación de imágenes, la ventaja de Mask2Former es que utiliza tecnología de enmascaramiento para segmentar objetos específicos, lo que hace que el modelo sea más eficiente y preciso cuando se trata de muestras pequeñas y pocas imágenes de muestra, y evita el problema del sobreajuste. Además, el uso de Mask2Former en el mecanismo de autoatención también permite que el modelo capture de manera adaptativa diferentes características en la imagen, mejorando así aún más la precisión de la segmentación.

En general, Mask2Former es un modelo de segmentación de imágenes muy prometedor, que tiene las ventajas de una alta eficiencia, precisión y gran adaptabilidad, y se puede aplicar en muchos escenarios de aplicaciones prácticas.

Según tengo entendido, Mask2Former es un modelo para la segmentación general de imágenes, que utiliza la arquitectura de Masked-attention Mask Transformer. La arquitectura de este modelo se basa en un mecanismo de autoatención y utiliza técnicas de enmascaramiento para generar máscaras de segmentación. En comparación con los modelos tradicionales de redes neuronales basados ​​en codificadores y decodificadores, Mask2Former logra muy buenos resultados en las tareas de segmentación de imágenes.

Específicamente, Mask2Former marca regiones específicas en una imagen (como un objeto) como "enmascaradas" mediante técnicas de enmascaramiento y luego utiliza un mecanismo de autoatención en el modelo para generar máscaras correspondientes a estas regiones. Estas máscaras se pueden usar para segmentar diferentes objetos en una imagen. Al mismo tiempo, Mask2Former también utiliza funciones de escala múltiple para mejorar la precisión de la segmentación de imágenes.

En general, Mask2Former es un modelo muy prometedor para la segmentación de imágenes, su rendimiento ha sido probado en varios conjuntos de datos de referencia y también puede obtener más mejoras y optimizaciones en futuras investigaciones.

En el modelo Mask2Former, el mecanismo de autoatención se utiliza principalmente para generar máscaras correspondientes a las áreas cubiertas. Específicamente, el modelo primero procesa la imagen de entrada a través de una técnica de enmascaramiento y marca el área enmascarada como "enmascarada". Luego, el modelo utiliza un mecanismo de autoatención para calcular una puntuación de atención entre cada ubicación y todas las demás ubicaciones, capturando la correlación entre diferentes ubicaciones en la imagen.

Al calcular la puntuación de atención, Mask2Former usa una máscara de oclusión para limitar el rango de cálculo de atención a solo aquellas partes que no están enmascaradas. Esto asegura que el modelo solo se centre en las características relacionadas con las regiones ocluidas, generando así máscaras correspondientes a las regiones ocluidas. Específicamente, el modelo multiplica el puntaje de atención con la máscara de oclusión y luego lo normaliza para obtener los pesos finales de atención. Estos pesos se pueden utilizar para agrupar los pesos de los vectores de características dentro de las regiones enmascaradas para generar máscaras correspondientes a las regiones enmascaradas.

Dado que el mecanismo de autoatención puede capturar de manera adaptativa la correlación entre diferentes ubicaciones en la imagen, Mask2Former puede lograr mejores resultados al generar máscaras de oclusión. Al mismo tiempo, el uso de técnicas de enmascaramiento y mecanismos de autoatención puede hacer que el modelo sea más flexible y eficiente, adecuado para diversas tareas de segmentación de imágenes.

Mask2Former utiliza funciones de múltiples escalas para mejorar la precisión de la segmentación de imágenes mientras utiliza técnicas de enmascaramiento y mecanismos de autoatención para generar máscaras. Específicamente, Mask2Former extrae características de diferentes escalas usando diferentes tamaños de kernel de convolución y tamaños de paso, y luego combina estas características para obtener una representación de características más completa y precisa.

En la arquitectura Mask2Former, tanto el codificador enmascarado como el decodificador enmascarado utilizan funciones de escala múltiple. En el codificador de portada, el modelo utiliza múltiples núcleos de convolución de diferentes escalas para extraer características de diferentes escalas y fusiona estas características a través de conexiones residuales. Esto permite que el modelo capture características de diferentes escalas, mejorando así la precisión de la segmentación de imágenes. En el decodificador de portada, el modelo también utiliza múltiples mapas de características de diferentes escalas para generar la máscara de segmentación final, lo que mejora aún más la precisión de la segmentación.

Al mismo tiempo, Mask2Former también utiliza técnicas de entrenamiento progresivo para optimizar aún más el uso de funciones de múltiples escalas. Específicamente, durante el entrenamiento, el modelo primero se entrena con un tamaño de imagen más pequeño y luego aumenta gradualmente el tamaño de la imagen hasta que alcanza el tamaño objetivo. Esto permite que el modelo se adapte gradualmente a las características en diferentes escalas, mejorando así la precisión de la segmentación.

En general, Mask2Former utiliza funciones de múltiples escalas para mejorar la precisión de la segmentación de imágenes, que ha demostrado ser muy eficaz en muchas tareas de segmentación de imágenes.

Mask2 Antiguo papel compartido

decodificador de píxeles

"Decodificador de píxeles" se refiere a una estructura de red neuronal, generalmente utilizada en la parte del decodificador de las tareas de segmentación de imágenes. En las redes neuronales, la parte del codificador generalmente se usa para extraer características de la imagen de entrada, mientras que la parte del decodificador se usa para convertir estas características en máscaras de segmentación o predicciones a nivel de píxeles.

En las tareas generales de segmentación de imágenes, el decodificador suele adoptar operaciones como la desconvolución o el muestreo para restaurar la salida del mapa de características del codificador a una máscara de segmentación o un resultado de predicción a nivel de píxel del mismo tamaño que la imagen de entrada. Sin embargo, este método puede tener ciertas limitaciones en algunas tareas de segmentación de imágenes con detalles más complejos.

Para superar estas limitaciones, algunos investigadores propusieron el método de utilizar el "decodificador de píxeles". Este enfoque suele utilizar una capa de red neuronal totalmente conectada para convertir directamente las características de salida del codificador en predicciones a nivel de píxeles. Este método puede conservar mejor los detalles de la imagen y funcionar mejor en algunas tareas complejas de segmentación de imágenes.

En general, el "decodificador de píxeles" es una estructura de red neuronal que se usa en la parte del decodificador de las tareas de segmentación de imágenes, que se puede usar para convertir las características generadas por el codificador en resultados de predicción a nivel de píxeles, mejorando así la precisión de la segmentación de imágenes.

La idea básica del "decodificador de píxeles" es convertir la salida del mapa de características del codificador en un resultado de predicción a nivel de píxel, en lugar de primero aumentar la muestra del mapa de características al mismo tamaño que la imagen de entrada y luego generar una resultado de la predicción a través de una operación de convolución. Este método puede conservar mejor los detalles de la imagen y funcionar mejor en algunas tareas complejas de segmentación de imágenes.

Específicamente, un "decodificador de píxeles" generalmente consta de una capa de red neuronal completamente conectada que convierte los mapas de características generados por el codificador en predicciones a nivel de píxeles. Durante el entrenamiento, el modelo minimiza la función de pérdida ajustando los parámetros de la red neuronal en función de la diferencia entre el resultado previsto y la etiqueta verdadera.

En comparación con los decodificadores tradicionales, el "decodificador de píxeles" tiene las siguientes ventajas:

  1. Conservar mejor los detalles de la imagen. Dado que el "decodificador de píxeles" convierte directamente el mapa de características en un resultado de predicción a nivel de píxeles, puede conservar mejor la información detallada de la imagen.

  2. Menos cómputo. Un "decodificador de píxeles" es menos intensivo desde el punto de vista computacional que un decodificador tradicional porque no se requieren operaciones como el muestreo ascendente o la deconvolución.

  3. Es más adecuado para tareas complejas de segmentación de imágenes. En algunas tareas de segmentación de imágenes con detalles más complejos, los decodificadores tradicionales pueden tener ciertas limitaciones, y el "decodificador de píxeles" puede manejar mejor estas tareas.

En general, el "decodificador de píxeles" es una estructura de red neuronal utilizada en la parte del decodificador de las tareas de segmentación de imágenes, que puede preservar mejor los detalles de la imagen y funcionar mejor en algunas tareas complejas de segmentación de imágenes.

técnica de enmascaramiento

El enmascaramiento es una técnica común para la segmentación de imágenes y se puede utilizar para segmentar objetos específicos. Las técnicas de cobertura generalmente se implementan mediante máscaras de cobertura anotadas manualmente (es decir, capas de cobertura). Los píxeles marcados como primer plano en la capa de cobertura representan objetos que deben segmentarse, mientras que los píxeles marcados como fondo representan fondos que no necesitan segmentarse.

Al realizar la segmentación de un objeto específico, las técnicas de enmascaramiento suelen utilizar los siguientes pasos:

  1. Generar capa de cobertura: Marque manualmente los objetos a segmentar y márquelos como primer plano. El fondo se marca como fondo. La capa de enmascaramiento puede ser una imagen binaria o una imagen multivaluada.

  2. Combine la capa de portada con la imagen original: superponga la capa de portada con la imagen original, mantenga los píxeles marcados como primer plano en la capa de portada y elimine o establezca los píxeles marcados como fondo en 0, para obtener un objeto que solo necesita ser imagen segmentada.

  3. Utilice un algoritmo de segmentación de imágenes: ingrese una imagen que contenga solo el objeto que se va a segmentar en el algoritmo de segmentación de imágenes para la segmentación, a fin de obtener una máscara de segmentación o resultados de predicción a nivel de píxel.

En los métodos modernos de aprendizaje profundo, las técnicas de enmascaramiento a menudo se combinan con redes neuronales convolucionales para lograr una segmentación de imágenes de extremo a extremo. Por ejemplo, Mask R-CNN es un método de segmentación de imágenes basado en tecnología de enmascaramiento y red neuronal convolucional, que puede detectar y segmentar objetos de destino simultáneamente en tareas de detección de objetivos.

En general, la técnica de enmascaramiento es una técnica eficaz para la segmentación de imágenes de objetos específicos, que se puede lograr mediante capas de enmascaramiento anotadas manualmente. En los métodos modernos de aprendizaje profundo, las técnicas de enmascaramiento a menudo se combinan con redes neuronales convolucionales para lograr una segmentación de imágenes de extremo a extremo.

codificador de cubierta

Mask Encoder es una estructura de red neuronal para la segmentación de imágenes, que generalmente se usa para asociar cada píxel en la imagen de entrada con una categoría semántica, logrando así la segmentación de imágenes a nivel de píxel. Un codificador de portada generalmente consta de dos partes: un codificador y un decodificador, donde el codificador se usa para extraer las características de la imagen de entrada y el decodificador se usa para convertir estas características en predicciones a nivel de píxel.

En comparación con el modelo de codificador-decodificador tradicional, el codificador de cobertura agrega una capa de convolución de cobertura encima del codificador para combinar la máscara de cobertura de la imagen de entrada con la salida del mapa de características del codificador. Las capas convolucionales cubiertas pueden combinar la información de la máscara de cobertura con la información de píxeles de la imagen de entrada para mejorar la precisión de la segmentación.

Durante el entrenamiento, los codificadores enmascarados suelen utilizar una función de pérdida de entropía cruzada para medir la diferencia entre el resultado predicho y la etiqueta verdadera y actualizar los parámetros de la red neuronal a través del algoritmo de propagación hacia atrás. Durante la predicción, un codificador de portada puede asociar cada píxel de una imagen de entrada con una categoría semántica, lo que permite la segmentación de imágenes a nivel de píxel.

En general, un codificador de portada es una estructura de red neuronal para la segmentación de imágenes que puede asociar cada píxel en una imagen de entrada con una categoría semántica, logrando así la segmentación de imágenes a nivel de píxel. El codificador de cobertura mejora la precisión de la segmentación al agregar capas de convolución de cobertura para combinar la información de la máscara de cobertura con la información de píxeles de la imagen de entrada.

¿Cómo usar el codificador enmascarado para la segmentación de imágenes?

La segmentación de imágenes con un codificador enmascarado normalmente requiere los siguientes pasos:

  1. Preparación de datos: prepare conjuntos de datos de imágenes para entrenamiento y pruebas, y realice preprocesamiento de los datos, como escalado, recorte, normalización, etc. Al mismo tiempo, es necesario etiquetar los objetos que deben segmentarse en cada imagen y guardar los resultados del etiquetado en forma de máscaras de cobertura.

  2. Cree un modelo de codificador cubierto: según las necesidades de la tarea, cree un modelo de codificador cubierto, que generalmente incluye un codificador, una capa convolucional cubierta y un decodificador. Los modelos se pueden construir utilizando marcos de aprendizaje profundo existentes (como TensorFlow, PyTorch, etc.) y se pueden definir funciones de pérdida y optimizadores.

  3. Entrene el modelo: use el conjunto de datos preparado para entrenar el modelo del codificador de portada y ajústelo de acuerdo con los cambios de la función de pérdida durante el proceso de entrenamiento. Durante el proceso de entrenamiento, generalmente es necesario establecer los hiperparámetros apropiados, como la tasa de aprendizaje, el tamaño del lote y el número de iteraciones.

  4. Evaluación y ajuste del modelo: después del entrenamiento, el modelo de codificador enmascarado debe evaluarse y ajustarse para mejorar la precisión de la segmentación. Puede utilizar algunos indicadores de evaluación comunes (como IoU, Coeficiente de dados, etc.) para evaluar el rendimiento del modelo y realizar ajustes en función de los resultados de la evaluación.

  5. Predicción y aplicación: el modelo de codificador cubierto entrenado se puede usar para segmentar nuevas imágenes. Durante el proceso de predicción, la imagen de entrada y la máscara de cobertura correspondiente se introducen en el modelo del codificador de cobertura y se pueden obtener los resultados de segmentación a nivel de píxel.

En general, la segmentación de imágenes con codificadores enmascarados requiere una serie de pasos, como la preparación de datos, la creación de modelos, el entrenamiento de modelos, la evaluación y ajuste de modelos, la predicción y la aplicación. Los marcos de aprendizaje profundo existentes y las métricas de evaluación se pueden utilizar para simplificar este proceso y lograr una segmentación de imágenes más eficiente y precisa.

¿Cómo evaluar el rendimiento de un modelo de codificador enmascarado?

La evaluación del rendimiento del modelo de codificador de portada generalmente requiere el uso de algunos indicadores de evaluación de segmentación de imágenes de uso común, que incluyen Intersección sobre unión (IoU), Coeficiente de dados, Precisión, Recuperación y otros indicadores.

  1. Intersección sobre unión (IoU): IoU es uno de los indicadores de evaluación de segmentación de imágenes más utilizados, que se utiliza para medir el grado de superposición entre los resultados de segmentación previstos y los resultados de segmentación reales. IoU se puede expresar como la intersección del área de segmentación predicha y el área de segmentación real dividida por su unión: IoU = TP / (TP + FP + FN), donde TP representa el verdadero ejemplo (el número de píxeles pronosticados como positivos y realmente positivo), FP representa falsos positivos (la cantidad de píxeles que se predice que serán positivos pero en realidad negativos) y FN representa los falsos negativos (la cantidad de píxeles que se predice que serán negativos pero en realidad positivos).

  2. Coeficiente de dados: El coeficiente de dados también es una medida del grado de superposición entre los resultados de segmentación previstos y los resultados de segmentación reales. El coeficiente de dados se puede expresar como 2 * TP / (2 * TP + FP + FN).

  3. Precisión y recuperación: la precisión y la recuperación son indicadores de evaluación de uso común en problemas de clasificación y también se pueden usar para evaluar el rendimiento de los modelos de segmentación de imágenes. La precisión representa la proporción de píxeles que se predicen como ejemplos positivos que en realidad son ejemplos positivos, y Recall indica la proporción de píxeles que se predicen como ejemplos positivos entre los píxeles que son ejemplos verdaderamente positivos.

  4. Otros indicadores: existen otros indicadores de evaluación de segmentación de imágenes, como el error absoluto medio (MAE), el error cuadrático medio (MSE), etc., que se pueden seleccionar de acuerdo con las necesidades de tareas específicas.

En aplicaciones prácticas, generalmente es necesario considerar exhaustivamente el rendimiento de los indicadores anteriores para seleccionar el modelo que mejor se adapte a los requisitos de la tarea. Al mismo tiempo, el rendimiento del modelo también se puede evaluar visualmente visualizando los resultados de la segmentación. En general, evaluar el rendimiento de un modelo de codificador de cubierta requiere una consideración integral de múltiples métricas y una selección basada en requisitos de tareas específicas.

¿Cómo visualizar los resultados de la segmentación?

La visualización de los resultados de la segmentación es uno de los medios importantes para evaluar el rendimiento del modelo de codificador enmascarado, que puede ayudarnos a comprender intuitivamente el efecto de segmentación del modelo. Estas son algunas formas comunes de visualizar los resultados de la segmentación:

  1. Visualización de imágenes en escala de grises: Convierta los resultados de la predicción en una imagen en escala de grises, donde los píxeles positivos son blancos y los píxeles negativos son negros. Este enfoque es simple e intuitivo, pero es posible que no pueda distinguir la diferencia entre muchas categorías diferentes.

  2. Visualización de marcadores de colores: use marcadores de diferentes colores para representar diferentes categorías, como rojo para personas, verde para automóviles, etc. Este enfoque puede distinguir visualmente la diferencia entre diferentes categorías, pero requiere predefinir el color de cada categoría.

  3. Visualización de superposición de resultados del modelo: superponga los resultados de la predicción en la imagen original para mostrar la correspondencia entre los resultados de la predicción y la imagen original. Este enfoque puede ayudarnos a comprender intuitivamente cómo el modelo realiza la segmentación en función de la imagen de entrada.

  4. Visualización de cuadro delimitador: dibuje un cuadro delimitador en los resultados de predicción para mostrar los límites de los resultados de segmentación. Este enfoque puede ayudarnos a comprender intuitivamente la precisión de los resultados de la segmentación.

En general, visualizar los resultados de la segmentación es uno de los medios importantes para evaluar el rendimiento de los modelos de codificadores enmascarados. Los resultados de la segmentación se pueden visualizar utilizando imágenes en escala de grises, marcadores de colores, superposiciones de resultados del modelo, cuadros delimitadores, etc. para ayudarnos a comprender intuitivamente el efecto de segmentación del modelo.

decodificador de portada

Mask Decoder es un modelo de red neuronal para la segmentación de imágenes. Suele utilizarse junto con Mask Encoder para segmentar las imágenes de entrada en diferentes categorías. El codificador de enmascaramiento es responsable de extraer las características de la imagen y el decodificador de enmascaramiento es responsable de clasificar y segmentar las características.

Los decodificadores de cobertura suelen contener múltiples capas convolucionales y de muestreo ascendente para ampliar progresivamente la dimensión de los mapas de características y clasificar cada píxel. En cada capa convolucional, el decodificador enmascarado utiliza núcleos convolucionales para aprender características mientras reduce el tamaño de los mapas de características a través de operaciones de agrupación. En la capa de muestreo ascendente, el decodificador de enmascaramiento utiliza técnicas como la deconvolución o la interpolación para aumentar gradualmente el tamaño del mapa de características al mismo tamaño que la imagen de entrada.

Los decodificadores cubiertos suelen utilizar una función de pérdida de entropía cruzada para medir la diferencia entre el resultado predicho y el resultado de la segmentación real y utilizan el algoritmo de retropropagación para actualizar los parámetros del modelo. Durante el entrenamiento, el decodificador enmascarado necesita considerar tareas de clasificación y segmentación para minimizar la función de pérdida.

En general, un decodificador de portada es un modelo de red neuronal para la segmentación de imágenes, que puede segmentar una imagen de entrada en diferentes categorías, y generalmente se usa junto con un codificador de portada. El decodificador enmascarado extrae características a través de operaciones como convolución y sobremuestreo, y utiliza una función de pérdida de entropía cruzada para entrenar el modelo.

FFN

En el aprendizaje profundo, FFN generalmente se refiere a una red neuronal feedforward (Feedforward Neural Network), también conocida como perceptrón multicapa (Multilayer Perceptron, MLP). La red neuronal feedforward es uno de los modelos de red neuronal más básicos, que consta de una capa de entrada, varias capas ocultas y una capa de salida, donde cada neurona está conectada a todas las neuronas de la capa anterior.

La entrada de la red neuronal feed-forward se transforma y abstrae a través de múltiples capas ocultas y finalmente se envía a la capa de salida. En cada capa oculta, una red neuronal feedforward utiliza una función de activación para transformar la suma ponderada de todas las entradas en una salida no lineal. Las funciones de activación comunes incluyen sigmoid, ReLU, tanh, etc.

Las redes neuronales feedforward a menudo se usan para tareas como clasificación y regresión, donde las tareas de clasificación requieren que la capa de salida use una función softmax para convertir la salida en una distribución de probabilidad, mientras que las tareas de regresión usan una función de activación lineal u otras funciones de activación apropiadas.

La red neuronal feedforward puede entrenar el modelo a través del algoritmo de retropropagación, en el que el algoritmo de retropropagación actualiza los parámetros del modelo mediante el cálculo de la función de pérdida. Durante el entrenamiento, los parámetros del modelo generalmente se optimizan utilizando Stochastic Gradient Descent (SGD) o sus variantes.

En general, una red neuronal feedforward es un modelo básico de red neuronal que consta de una capa de entrada, varias capas ocultas y una capa de salida. Una red neuronal de alimentación hacia adelante convierte una suma ponderada de entradas en una salida no lineal a través de una función de activación, que generalmente se usa para tareas como clasificación y regresión, y se entrena a través de un algoritmo de propagación hacia atrás.

El módulo de destilación se utiliza para optimizar aún más los resultados de la segmentación

Aunque el módulo de destilación se usa principalmente para la destilación de redes neuronales profundas, también se puede usar para optimizar los resultados de la segmentación. En las tareas de segmentación de imágenes, el módulo de destilación suele utilizarse para transferir el conocimiento de un modelo complejo (como ResNet) a un modelo más simple (como MobileNet) para mejorar la precisión y la capacidad de generalización de los resultados de segmentación.

Específicamente, el rol del módulo de destilación es transferir la representación de características y la distribución de predicción del modelo de maestro al modelo de estudiante. La transferencia de representaciones de funciones generalmente se logra haciendo que el modelo del alumno genere representaciones de funciones similares al modelo del maestro en la misma imagen de entrada. La transferencia de la distribución de predicción generalmente se logra haciendo que el modelo del estudiante genere una distribución de predicción de probabilidad similar al modelo del maestro en la misma imagen de entrada. Durante el entrenamiento, el módulo de destilación generalmente usa la divergencia KL entre la distribución de predicción de probabilidad del modelo del maestro y las etiquetas originales como el objetivo de la destilación del conocimiento.

Al utilizar el módulo de destilación para optimizar los resultados de la segmentación, se puede mejorar la precisión y la generalización del modelo sin aumentar la complejidad del modelo. Además, dado que el modelo de estudiante es más liviano que el modelo de maestro, el módulo de destilación también puede reducir los requisitos de computación y almacenamiento del modelo de segmentación, lo que facilita la implementación y el uso del modelo en entornos con recursos limitados, como los dispositivos móviles.

Cuando se usa el módulo de destilación para optimizar los resultados de la segmentación, generalmente se imponen algunas restricciones en el modelo de maestro y el modelo de estudiante para garantizar la efectividad y la estabilidad del proceso de destilación. Estas restricciones incluyen lo siguiente:

  1. Coherencia de las dimensiones de las características. La representación de características generada por el modelo de alumno debe tener la misma dimensionalidad y número de canales que la del modelo de profesor. Esto se puede lograr utilizando el mismo tamaño de kernel y la misma cantidad de canales en el extractor de características.

  2. Ajuste de parámetros de temperatura. El parámetro de temperatura utilizado en el proceso de destilación tiene un impacto significativo en la distribución prevista del modelo de Student. En general, un parámetro de temperatura más alto puede hacer que la distribución de predicción sea más suave, lo que facilita que el modelo de estudiante aprenda la distribución de características del modelo de maestro.

  3. Pesos para la función de pérdida por destilación. En el proceso de destilación del conocimiento, la función de pérdida de divergencia KL se suele combinar con la función de pérdida de entropía cruzada para equilibrar la transferencia de conocimiento del modelo docente y la supervisión de las etiquetas originales. Por lo general, el peso de la función de pérdida de divergencia KL debe ser menor que el de la función de pérdida de entropía cruzada para garantizar que el modelo de estudiante pueda aprender el conocimiento obtenido del modelo de maestro.

  4. La elección del optimizador. Al igual que otras tareas de aprendizaje profundo, elegir un optimizador adecuado también es la clave para optimizar los resultados de segmentación del módulo de destilación. Por lo general, puede elegir algunos optimizadores avanzados, como Adam o SGD, para acelerar el proceso de entrenamiento y mejorar el rendimiento del modelo.

En resumen, el módulo de destilación se puede utilizar para optimizar los resultados de la segmentación. Al transferir el conocimiento del modelo docente al modelo del alumno, y establecer los límites y optimizadores del modelo, se puede mejorar la precisión y la capacidad de generalización del modelo. y el cálculo y el costo del modelo pueden reducirse Los requisitos de almacenamiento, lo que hace que el modelo sea más fácil de implementar y usar en entornos con recursos limitados, como los dispositivos móviles.

Cómo utilizar el mecanismo de autoatención para generar máscaras correspondientes a estas regiones

En la segmentación de imágenes, generalmente necesitamos generar máscaras correspondientes a diferentes regiones para identificar diferentes objetos o escenas en la imagen. Para lograr este objetivo, podemos usar un mecanismo de autoatención para aprender a qué regiones está asociado cada píxel y generar una máscara correspondiente.

Específicamente, podemos usar el mecanismo de autoatención para calcular la correlación entre cada píxel y todos los píxeles de la imagen. En este proceso, podemos considerar cada píxel como un vector de consulta (consulta), un vector clave (clave) y un vector de valor (valor), y luego calcular la puntuación de atención entre ellos. Esto se puede lograr con la siguiente fórmula:

Atención ( Q , K , V ) = softmax ( QKT dk ) V \text{Atención}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}} \derecho)VAtención ( Q ,K ,V )=softmax(dk Q KT)V

Entre ellos, QQQ ,KKK yVVV representan vectores de consulta, clave y valor respectivamente,dk d_kdkIndica la dimensión del vector clave. La puntuación de atención se puede considerar como la similitud entre el vector de consulta y el vector clave, y se normaliza mediante la función softmax para obtener el peso entre cada píxel y otros píxeles. Finalmente, podemos sumar los pesos con el vector de valor para obtener un vector de representación para cada píxel. Este proceso puede verse como la agregación y compresión de la información de cada píxel de la imagen para generar la máscara correspondiente.

En el proceso de generar la máscara, podemos usar un algoritmo de agrupamiento o un algoritmo de segmentación de umbral para agrupar los vectores de representación de píxeles en diferentes regiones. Luego podemos tomar la región a la que pertenece cada píxel como su etiqueta de máscara y usar estas etiquetas para entrenar un modelo de segmentación de imágenes.

En conclusión, el mecanismo de autoatención se puede utilizar para generar máscaras correspondientes a diferentes regiones para ayudar a los algoritmos de segmentación de imágenes a identificar y segmentar con precisión diferentes objetos o escenas. Al calcular la correlación entre cada píxel y otros píxeles, el mecanismo de autoatención puede agregar y comprimir la información en la imagen para generar la máscara correspondiente.

Cómo utiliza Mask2Former funciones multiescala

Mask2Former es un modelo de segmentación de imágenes basado en Transformer que mejora la precisión de la segmentación mediante la introducción de funciones de escala múltiple.

Específicamente, Mask2Former usa un conjunto de mapas de características de diferentes escalas para representar la imagen de entrada. Estos mapas de características se pueden extraer en diferentes capas de redes convolucionales. Cada mapa de características se introduce en un codificador de transformador independiente para la codificación y se genera un vector de codificación de posición correspondiente. Luego, la salida del codificador se alimenta a un decodificador Transformer para decodificar y generar etiquetas de máscara para cada píxel.

En el proceso de uso de funciones de múltiples escalas, Mask2Former utiliza dos métodos diferentes para fusionar funciones de diferentes escalas. Un método consiste en formar una característica de entrada de mayor dimensión apilando juntos mapas de características de diferentes escalas y luego ingresar esta característica en el codificador de Transformer para su procesamiento. Este enfoque puede ayudar al modelo a adquirir más información contextual y mejorar la precisión de la segmentación.

Otro enfoque es ayudar al modelo a interactuar y transferir información entre características de diferentes escalas agregando múltiples módulos de atención de escala cruzada entre el codificador y el decodificador del Transformador. En este proceso, el módulo de atención puede ayudar al modelo a aprender la correlación entre características de diferentes escalas y fusionar las características de diferentes escalas para mejorar la precisión de la segmentación.

En resumen, Mask2Former mejora la precisión de la segmentación mediante la introducción de funciones de múltiples escalas. Al apilar mapas de características de diferentes escalas o usar módulos de atención entre escalas, Mask2Former puede ayudar al modelo a adquirir más información contextual e interactuar y transferir información entre características de diferentes escalas, mejorando así la precisión de la segmentación.

Código de ejemplo para Mask2Former

En la tarea de segmentación de imágenes de Mask2Former, debemos minimizar la diferencia entre el resultado de la predicción del modelo y la etiqueta real. Las funciones de pérdida comúnmente utilizadas incluyen la función de pérdida de entropía cruzada y la función de pérdida de dados. Aquí hay un código de ejemplo para entrenar con la función de pérdida de entropía cruzada:

import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader

# 定义Mask2Former模型
class Mask2Former(nn.Module):
    def __init__(self, num_classes, num_layers=12, num_heads=12, hidden_dim=768):
        super().__init__()

        # 定义编码器、解码器和特征提取器,与之前的代码相同
				# 定义编码器
        self.encoder = nn.ModuleList([
            nn.TransformerEncoderLayer(d_model=hidden_dim, nhead=num_heads)
            for _ in range(num_layers)
        ])

        # 定义解码器
        self.decoder = nn.ModuleList([
            nn.TransformerDecoderLayer(d_model=hidden_dim, nhead=num_heads)
            for _ in range(num_layers)
        ])

        # 定义特征提取器
        self.backbone = nn.Sequential(
            nn.Conv2d(3, 64, kernel_size=3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(64, 128, kernel_size=3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(128, 256, kernel_size=3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(256, hidden_dim, kernel_size=3, padding=1),
            nn.ReLU(inplace=True)
        )

        # 定义位置编码器
        self.positional_encoding = nn.Embedding(256, hidden_dim)

        # 定义最终的分类器
        self.classifier = nn.Conv2d(hidden_dim, num_classes, kernel_size=1)

    #def forward(self, x):
        # 提取特征、添加位置编码、编码、解码和分类,与之前的代码相同
        
        #return x
    def forward(self, x):
	    # 提取特征
	    features = self.backbone(x)
	
	    # 添加位置编码
	    b, c, h, w = features.size()
	    position_ids = torch.arange(h * w, device=features.device).view(1, h, w)
	    position_ids = self.positional_encoding(position_ids)
	    position_ids = position_ids.expand(b, h, w, -1).permute(0, 3, 1, 2)
	    features = features + position_ids
	
	    # 编码
	    for layer in self.encoder:
	        features = layer(features)
	
	    # 解码
	    for layer in self.decoder:
	        features = layer(features, features)
	
	    # 分类
	    output = self.classifier(features)
	
	    return output

# 定义数据集和数据加载器
train_dataset = MyDataset(train_images, train_masks)
train_loader = DataLoader(train_dataset, batch_size=8, shuffle=True)

# 定义模型、损失函数和优化器
model = Mask2Former(num_classes=2)
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=1e-4)

# 训练模型
for epoch in range(10):
    running_loss = 0.0
    for i, (inputs, labels) in enumerate(train_loader):
        # 将输入和标签转换为张量,并将其送入GPU
        inputs = torch.tensor(inputs).float().cuda()
        labels = torch.tensor(labels).long().cuda()

        # 向前传播,计算损失函数并更新模型参数
        optimizer.zero_grad()
        outputs = model(inputs)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()

        # 计算当前批次的损失函数值
        running_loss += loss.item()

    # 输出每个epoch的损失函数值
    print('Epoch [%d], Loss: %.4f' % (epoch+1, running_loss / len(train_loader)))

En el código anterior, definimos el modelo, el conjunto de datos, el cargador de datos, la función de pérdida y el optimizador de Mask2Former, y usamos la función de pérdida de entropía cruzada para el entrenamiento. Durante el entrenamiento, primero convertimos la entrada y las etiquetas en tensores y los alimentamos a la GPU. Luego propagamos hacia adelante, calculamos la función de pérdida y actualizamos los parámetros del modelo. Finalmente, se emite el valor de la función de pérdida de cada época.

En este código para entrenar el modelo, usamos un bucle simple para iterar a través del conjunto de datos de entrenamiento y entrenar el modelo. Para cada lote de datos, primero convertimos los tensores de entrada y etiqueta en tensores PyTorch y los alimentamos a la GPU. Luego realizamos el pase hacia adelante, calculamos la función de pérdida y realizamos la propagación hacia atrás y la actualización de parámetros. Finalmente, calculamos el valor de la función de pérdida para el lote actual y lo acumulamos en la variable running_loss.

Durante el entrenamiento, usamos una función de pérdida de entropía cruzada, que es una función de pérdida de uso común para problemas de clasificación de clases múltiples. Para cada ubicación de píxel, tratamos la salida del modelo como un vector de longitud num_classes, donde cada dimensión representa la probabilidad de una clase. Luego comparamos este vector con el tensor de etiquetas para calcular la función de pérdida de entropía cruzada. El valor final de la función de pérdida es el promedio de los valores de la función de pérdida en todas las ubicaciones de píxeles.

Durante el entrenamiento también utilizamos un optimizador, concretamente el optimizador Adam. Es un optimizador de uso común para el algoritmo de descenso de gradiente estocástico. Puede ajustar de forma adaptativa la tasa de aprendizaje de cada parámetro para adaptarse mejor a diferentes espacios de parámetros. También podemos ajustar otros hiperparámetros, como la tasa de aprendizaje, la disminución del peso y el impulso para obtener mejores resultados de entrenamiento.

Si desea utilizar ViT (Vision Transformer) como extractor de características, el siguiente es un código de muestra de un extractor de características de ViT que se puede ejecutar:

import torch
import torch.nn as nn
import torch.nn.functional as F
from einops import rearrange
from timm.models.vision_transformer import VisionTransformer

class ViTFeatureExtractor(nn.Module):
    def __init__(self, img_size=256, patch_size=32, in_chans=3, embed_dim=768, depth=12, num_heads=12, mlp_ratio=4.0):
        super().__init__()
        self.patch_size = patch_size

        # 定义ViT模型
        self.vit = VisionTransformer(img_size=img_size, patch_size=patch_size, in_chans=in_chans, num_classes=0,
                                     embed_dim=embed_dim, depth=depth, num_heads=num_heads, mlp_ratio=mlp_ratio)

    def forward(self, x):
        # 将输入图像分割成多个patch,并将它们展平
        patches = self.extract_patches(x)
        patches = rearrange(patches, 'b p c h w -> (b p) c h w')
        
        # 将patch送入ViT模型中提取特征
        features = self.vit.forward_features(patches)
        
        # 将特征重新排列成二维的形状
        features = rearrange(features, 'b (h w) c -> b c h w', h=int(x.shape[2] / self.patch_size), w=int(x.shape[3] / self.patch_size))
        
        return features

    def extract_patches(self, x):
        # 将输入图像分割成多个patch,并将它们展平
        b, c, h, w = x.shape
        p = self.patch_size
        x = rearrange(x, 'b c (h p1) (w p2) -> (b h w) c p1 p2', p1=p, p2=p)
        return x

# 测试特征提取器
image = torch.randn(1, 3, 256, 256)
feature_extractor = ViTFeatureExtractor()
features = feature_extractor(image)
print(features.shape)

En el código anterior, primero definimos una clase llamada ViTFeatureExtractor como un extractor de características. En el constructor de la clase, definimos varios parámetros del modelo ViT. En la función de avance, primero dividimos la imagen de entrada en parches y los aplanamos. Luego envíe el parche al modelo ViT para extraer características. Finalmente, las características se reorganizan en una forma 2D y se devuelven. También definimos una función auxiliar llamada extract_patches que divide la imagen de entrada en parches.

Al probar el extractor de funciones, primero generamos una imagen de entrada aleatoria y la pasamos al extractor de funciones. El extractor de características devolverá un (1, 768, 8, 8)tensor de características de forma, donde 768la dimensión de la característica 8representa el número de filas y columnas del parche.

Tensor de etiquetas para segmentación de imágenes

En las tareas de segmentación de imágenes, el tensor de etiquetas suele ser un tensor del mismo tamaño que la imagen de entrada, donde cada ubicación de píxel corresponde a una etiqueta. La etiqueta puede ser un número entero que indica la categoría a la que pertenece el píxel o un vector que indica el valor del píxel en diferentes canales. En las tareas de segmentación semántica se suelen utilizar etiquetas a nivel de píxel, es decir, cada píxel se etiqueta como una categoría.

Por ejemplo, para una imagen de tamaño [H, W], la forma de su tensor de etiquetas también es [H, W]. Para cada posición de píxel [i, j], el valor del tensor de etiqueta es la clase a la que pertenece el píxel. Por ejemplo, si el píxel pertenece a la clase 0, el valor correspondiente en el tensor de etiquetas será 0. Por lo tanto, el tensor de etiquetas se puede ver como una matriz bidimensional, donde cada elemento representa la categoría de un píxel.

Durante el entrenamiento, generalmente convertimos el tensor de etiquetas en el tensor objetivo para las tareas de clasificación, es decir, un tensor de tamaño [num_classes, H, W], donde num_classes es el número de clases. Para cada posición de píxel [i, j], el valor del tensor objetivo es un vector de longitud num_classes, donde el k-ésimo componente indica si el píxel pertenece a la k-ésima clase. Por ejemplo, si el píxel pertenece a la clase 0, el vector correspondiente en el tensor objetivo es [1, 0, 0, ..., 0]. De esta forma, podemos usar la función de pérdida de entropía cruzada para medir la diferencia entre la salida del modelo y las etiquetas verdaderas.

¿Cuál es la diferencia entre las funciones extraídas por vit y las funciones extraídas por cnn?

ViT (Transformador de visión) y CNN (Red neuronal convolucional) son dos extractores de características de imagen de uso común. Su principal diferencia está en la forma de extracción y procesamiento de características.

CNN es un extractor de características basado en la operación de convolución, que extrae características locales deslizando el kernel de convolución en la imagen y reduce la dimensión de la característica mediante la operación de agrupación. Al procesar imágenes, CNN puede capturar características locales y globales de manera efectiva y, al mismo tiempo, a través de operaciones de convolución y agrupación, puede procesar la invariancia de la transformación, como la traducción, el escalado y la rotación de imágenes.

ViT es un extractor de características basado en el mecanismo de autoatención , que divide la imagen en múltiples bloques pequeños y toma el valor de píxel de cada bloque pequeño como entrada y luego realiza la extracción de características a través de un modelo de Transformador multicapa. En ViT, cada bloque pequeño se considera una secuencia y el modelo utiliza el mecanismo de autoatención para calcular la relación entre cada posición en la secuencia y generar la representación de características correspondiente. ViT puede extraer las características globales de la imagen , por lo que se desempeña mejor en algunas tareas que necesitan procesar las características globales.

En general, CNN es más flexible en el procesamiento de imágenes y puede capturar características locales y globales de manera efectiva. ViT es más adecuado para tareas de procesamiento que requieren funciones globales, como la clasificación de imágenes y la detección de objetivos. Sin embargo, debe tenerse en cuenta que ViT es sensible al tamaño de la imagen de entrada y al tamaño del bloque , y los parámetros deben ajustarse en las aplicaciones prácticas.

Función de pérdida de dados

La función de pérdida de dados es una función de pérdida de uso común para tareas de segmentación de imágenes, que puede medir la similitud entre los resultados de predicción del modelo y las etiquetas reales. La función de pérdida de dados se calcula de la siguiente manera:

D ice L oss = 1 − 2 ∗ ∑ i = 1 N ( pi ∗ yi ) ∑ i = 1 N pi + ∑ i = 1 N yi DiceLoss = 1 - \frac{2 * \sum_{i=1}^{ N}(p_i * y_i)}{\sum_{i=1}^{N}p_i + \sum_{i=1}^{N}y_i}Pérdida de dados _ _=1yo = 1nortepagyo+ yo = 1norteyyo2 yo = 1norte( pagyoañoyo)

Entre ellos, pi p_ipagyoIndica el resultado de la predicción del modelo, yi y_iyyorepresenta la etiqueta de verdad básica, NNN representa el número de píxeles.

El rango de valores de la función de pérdida de dados está entre 0 y 1. Cuando el resultado pronosticado es completamente consistente con la etiqueta real, la función de pérdida de dados toma el valor mínimo de 0, cuando el resultado pronosticado es completamente inconsistente con la etiqueta real, el La función de pérdida de dados toma el valor máximo de 1.

En PyTorch, la función de pérdida de dados se puede implementar con el siguiente código:

import torch
import torch.nn as nn

class DiceLoss(nn.Module):
    def __init__(self):
        super(DiceLoss, self).__init__()

    def forward(self, inputs, targets, smooth=1):
        # 将输入和标签转换为浮点数张量
        inputs = inputs.float()
        targets = targets.float()

        # 计算分子和分母
        intersection = (inputs * targets).sum()
        total = inputs.sum() + targets.sum()

        # 计算Dice损失函数
        dice = 1 - (2 * intersection + smooth) / (total + smooth)
        return dice

En el código anterior, definimos una clase llamada DiceLoss que hereda de la clase nn.Module. En el constructor de la clase, no definimos ningún parámetro. En la función directa, primero convertimos la entrada y las etiquetas en tensores de flotantes. Luego calculamos el numerador y el denominador y usamos la fórmula anterior para calcular la función de pérdida de dados. Finalmente, devuelva el resultado del cálculo.

Cabe señalar que debido a la operación de división en el cálculo de la función de pérdida Dice, aparecerán valores de NaN cuando el denominador sea 0. Para evitar esto, generalmente agregamos un término de suavizado al denominador, como el parámetro suavizado en el código anterior.

¿Qué puede usar la columna vertebral de Mask2Former?

Mask2Former es un modelo de segmentación de imágenes basado en Transformer que puede usar varias arquitecturas de Transformer como su columna vertebral. En la práctica, las arquitecturas de transformadores comúnmente utilizadas incluyen:

  1. Vision Transformer (ViT): ViT es un modelo de Transformer basado en el mecanismo de autoatención, que está especialmente diseñado para tareas de clasificación de imágenes. Divide la imagen en pequeños parches y aplica el modelo Transformer en cada parche. Luego, la salida del vector de características de Transformer se ingresa en una capa completamente conectada para su clasificación. En Mask2Former, ViT puede usarse como columna vertebral y aplicarse a tareas de segmentación de imágenes.

  2. Swin Transformer: Swin Transformer es un modelo de Transformer basado en un mecanismo de atención jerárquico multicapa, que está especialmente diseñado para procesar imágenes a gran escala. Divide una imagen en múltiples regiones de diferentes tamaños y aplica un modelo de Transformador en cada región. Luego, las características de diferentes regiones se fusionan a través de un mecanismo de atención jerárquico de múltiples capas. En Mask2Former, Swin Transformer se puede utilizar como columna vertebral para manejar la tarea de segmentación de imágenes de gran tamaño.

  3. Red de atención residual (RAN): RAN es una red neuronal convolucional basada en conexiones residuales y mecanismos de atención. Extrae las características espaciales de las imágenes aplicando un mecanismo de atención en diferentes niveles y conserva la información semántica de las imágenes a través de conexiones residuales. En Mask2Former, RAN se puede utilizar como columna vertebral para extraer las características espaciales de la imagen y realizar la segmentación.

Además de la arquitectura Transformer mencionada anteriormente, también se pueden usar otras arquitecturas Transformer como la columna vertebral de Mask2Former para adaptarse a diferentes conjuntos de datos y tareas de segmentación de imágenes.

Cuando se utiliza Transformer como la columna vertebral de un modelo de segmentación de imágenes, generalmente se deben considerar los siguientes aspectos:

  1. División de la imagen de entrada: a diferencia de las redes neuronales convolucionales tradicionales, el modelo Transformer no puede procesar directamente la imagen completa. Por lo tanto, la imagen de entrada debe dividirse en múltiples áreas pequeñas, como el parche en ViT, la ventana en Swin Transformer, etc. Estas pequeñas regiones se pueden dividir en formas superpuestas o no superpuestas para aplicar el modelo de Transformador en diferentes regiones.

  2. Fusión de características: a diferencia de la red neuronal convolucional, los vectores de características extraídos por el modelo Transformer en diferentes regiones son independientes y se requiere la fusión de características para obtener la representación de características de la imagen completa. En Swin Transformer, se utiliza un mecanismo de atención jerárquico de múltiples capas para fusionar características de diferentes regiones. En ViT, la agrupación promedio global se utiliza para fusionar las funciones de diferentes parches.

  3. Extracción de características multiescala: cuando se trata de imágenes a gran escala, es necesario considerar el problema de la extracción de características multiescala. Un enfoque común es usar parches o ventanas de diferentes tamaños para extraer características de diferentes escalas. En Swin Transformer, las imágenes multiescala se procesan a través de la división jerárquica de ventanas. En ViT, se pueden usar parches de diferentes tamaños para extraer características de diferentes escalas.

  4. Codificación de posición: para introducir información de posición en el modelo de Transformer, es necesario codificar la posición del área de entrada o parche. Los métodos de codificación de posición comúnmente utilizados incluyen la codificación de posición absoluta y la codificación de posición relativa.

En resumen, el uso de Transformer como la columna vertebral del modelo de segmentación de imágenes puede utilizar eficazmente el mecanismo de autoatención para extraer la información espacial de la imagen, a fin de obtener un mejor rendimiento de segmentación. Al mismo tiempo, se deben considerar cuestiones como la división de imágenes de entrada, la fusión de características, la extracción de características a escala múltiple y la codificación de posición para adaptarse mejor a diferentes conjuntos de datos y tareas de segmentación de imágenes.

Visualización de mapas de características de CNN y Transformer

Supongo que te gusta

Origin blog.csdn.net/qq_44089890/article/details/130384311
Recomendado
Clasificación