Mejora de grupo espacial: mejora del aprendizaje de características semánticas en redes convolucionales

Enlace en papel: https://arxiv.org/pdf/1905.09646.pdf

Enlace de código https://github.com/implus/PytorchInsight

Las redes neuronales convolucionales (CNN) generan representaciones de características de objetos complejos mediante la recopilación de subcaracterísticas semánticas en diferentes niveles y partes. Estas subcaracterísticas generalmente se pueden distribuir en el vector de características de cada capa en forma agrupada, representando varias entidades semánticas. Sin embargo, las activaciones de estas subcaracterísticas a menudo se ven afectadas espacialmente por patrones similares y fondos ruidosos, lo que lleva a una localización e identificación erróneas. Este documento propone un módulo de Aumento de grupos espaciales (SGE) que puede ajustar la importancia de cada subcaracterística generando un factor de atención para cada ubicación espacial en cada grupo semántico, de modo que cada grupo individual pueda aumentarse de forma autónoma. Aprende la expresión y suprime posible ruido. El factor de atención solo se guía por la similitud entre los descriptores de funciones globales y locales dentro de cada grupo, por lo que el diseño del módulo SGE es muy liviano con pocos parámetros y cálculos adicionales.

1. Introducción a este artículo:

inserte la descripción de la imagen aquí
Para hacer que cada conjunto de características sea espacialmente robusto y uniformemente distribuido, modelamos un mecanismo de mejora espacial dentro de cada conjunto de características al escalar el vector de características en todas las ubicaciones mediante el uso de una máscara de atención. Esta máscara de atención está diseñada para suprimir el posible ruido y resaltar las regiones de características semánticas correctas. A diferencia de otros métodos de atención populares, los autores utilizan la similitud entre las características estadísticas globales y locales en cada ubicación como fuente de generación de la máscara de atención. El mecanismo simple y efectivo anterior es el módulo de mejora de agrupación espacial (SGE) de este documento, que es muy liviano y casi no requiere parámetros ni cálculos adicionales en la naturaleza. Después de presentar el módulo SGE, examinamos los cambios en la distribución de mapas de características y las estadísticas de variación de los valores de activación entre grupos. Los resultados muestran que SGE mejora significativamente la distribución espacial de diferentes subcaracterísticas semánticas dentro de sus grupos y genera una variación estadísticamente mayor, lo que mejora el aprendizaje de características en regiones semánticas y comprime el ruido y la interferencia.
Los autores consideran los mapas de características convolucionales H×W del canal C y los dividen en grupos G a lo largo de la dimensión del canal. Sin pérdida de generalidad, primero se examina un grupo individualmente (ver el recuadro negro inferior en la Figura 1). Entonces, cada posición del grupo en el espacio tiene una representación vectorial, es decir, x = { x 1 … m x_1 … m X1m },xi ∈ rc / g x_i∈ r^{c/g}Xyorc / g , m=alto×ancho. Conceptualmente, los autores plantean además la hipótesis de que esta agrupación captura gradualmente respuestas semánticas específicas (como los ojos de un perro) a medida que la red aprende. En este espacio de grupo, idealmente, se pueden obtener características con fuertes respuestas en las ubicaciones de los ojos (características con longitudes de vectores más grandes y orientaciones de vectores similares en múltiples regiones de los ojos), mientras que otras ubicaciones tienen poca activación y se convierten en vectores cero. Sin embargo, debido a la existencia de ruido inevitable y patrones similares, a menudo es difícil para las CNN obtener respuestas de características distribuidas uniformemente. Para abordar este problema, los autores proponen mejorar aún más el aprendizaje de características semánticas en regiones clave aprovechando la información general de todo el espacio del grupo, ya que las características de todo el espacio no están dominadas por el ruido (de lo contrario, el modelo no aprendería nada de el grupo). Por lo tanto, se puede obtener mediante la función promedio espacialF gp ( ⋅ ) F_{gp}( )Fg p) usa la característica estadística global para aproximar el vector semántico del conjunto de representaciones aprendidas:
inserte la descripción de la imagen aquí
Segundo, usando la característica global, los coeficientes importantes correspondientes de cada característica se pueden obtener mediante un simple producto escalar, que mide la característica semántica global a un cierto extensión G y características localesxi x_iXyosimilitud entre. Entonces, para cada posición, es posible definir:
inserte la descripción de la imagen aquí
C i C_iCyoTambién se puede expandir como ∥ g ∥ ∥ xi ∥ cos ( θ i ) \lVert g \lVert \lVert x_i \lVert cos(θ_i)gramo xyodo s ( θ _yo) ,entre ellos θ i θ_iθyoXi x_iXyoy el ángulo entre g. Esto muestra que la longitud del vector ( ∥ xi ∥ \lVert x_i \lVert∥x _yo ) y dirección (es decir,θ i θ_iθyo) está más cerca de las características de g, y es más probable que obtenga coeficientes iniciales más grandes. Para evitar sesgos en la magnitud de los coeficientes entre diferentes muestras, estandarice c en el espacio:
inserte la descripción de la imagen aquí
ϵ \epsilonϵ (generalmente 1e-5) es una constante para la estabilidad numérica. Para asegurar que la normalización insertada en la red pueda representar la transformación de identidad, para cada coeficientexi ^ \hat{x_i}Xyo^Se introduce un par de parámetros γ, β para escalar y mover el valor normalizado:
inserte la descripción de la imagen aquí
γ, β son los únicos parámetros introducidos en este módulo. En una sola unidad SGE, el número de γ, β es el mismo que el número de grupos (G), generalmente del orden de 32 o 64, que es básicamente insignificante en comparación con los millones de parámetros de toda la red.
inserte la descripción de la imagen aquí
El proceso anterior se resume de la siguiente manera:

En primer lugar, las características se agrupan y cada grupo de características es espacialmente un producto de puntos (similar) con la característica después de la agrupación global para obtener la máscara de atención inicial, y el valor promedio se resta de la máscara de atención. La desviación estándar se normaliza, y cada grupo aprende al mismo tiempo.Los dos parámetros de compensación de escala permiten restaurar la operación de normalización y luego pasar por el sigmoide para obtener la máscara de atención final y escalar la característica en cada posición en el grupo de características original.
Los resultados experimentales son los siguientes:
inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí

  1. El parámetro de grupo es moderado y el rendimiento Top-1 puede ser el más alto;

  2. Inicialización Se recomienda inicializar los parámetros de escalado a 0. El propósito es permitir que la red aprenda de la atención por un tiempo antes de que la atención surta efecto. Primero, aprenda una representación semántica básica y luego aprenda a escalar los parámetros. a través del descenso de gradiente Después de que no sea 0, gradualmente haga que la atención funcione;

  3. La normalización es muy necesaria y no se puede eliminar;
    implementación del código:

class SpatialGroupEnhance(nn.Module):
    def __init__(self, groups = 64):
        super(SpatialGroupEnhance, self).__init__()
        self.groups   = groups
        self.avg_pool = nn.AdaptiveAvgPool2d(1)
        self.weight   = Parameter(torch.zeros(1, groups, 1, 1))
        self.bias     = Parameter(torch.ones(1, groups, 1, 1))
        self.sig      = nn.Sigmoid()

    def forward(self, x): # (b, c, h, w)
        b, c, h, w = x.size()
        # 将通道分组 (b*g , c/g, h, w)
        x = x.view(b * self.groups, -1, h, w) 
        # 将分组后的特征图进行平均池化后进行点积
        xn = x * self.avg_pool(x)
        xn = xn.sum(dim=1, keepdim=True)
        t = xn.view(b * self.groups, -1)
        # 进行标准化
        t = t - t.mean(dim=1, keepdim=True)
        std = t.std(dim=1, keepdim=True) + 1e-5
        t = t / std
        t = t.view(b, self.groups, h, w)
        # 进行权重加权
        t = t * self.weight + self.bias
        t = t.view(b * self.groups, 1, h, w)
        x = x * self.sig(t)
        x = x.view(b, c, h, w)
        return 

Supongo que te gusta

Origin blog.csdn.net/qq_52302919/article/details/123704711
Recomendado
Clasificación