论文 笔记 -Strip Pooling: repensar la agrupación espacial para el análisis de escenas

paper: Strip Pooling: Rethinking Spatial Pooling for Scene Parsing

código: https://github.com/Andrew-Qibin/SPNet

Resumen

  1. Un artículo en CVPR2020 optimiza la tarea de segmentación de escena al mejorar la capa de agrupación espacial. El punto de partida es que la agrupación estándar tradicional es principalmente cuadrada, y habrá algunos objetos en la escena real que son largos, y el modelo necesita capturar una dependencia de largo alcance tanto como sea posible. Por lo tanto, el autor introdujo un núcleo largo pero estrecho .
  2. Las principales preocupaciones de este artículo son:
    • Introducir la agrupación de bandas , el núcleo largo pero estrecho mencionado anteriormente
    • En base a lo anterior, el módulo de agrupación de bandas (SPM) está construido para hacer que la estructura se conecte y use en la estructura de red existente
    • Además de combinar la agrupación de bandas y la agrupación espacial estándar, se propone un módulo de agrupación mixta , es decir, un estándar integral de agrupación espacial y agrupación de bandas para tener en cuenta la segmentación de objetos de diversas formas.
    • En base a todas las mejoras anteriores, se propone SPNet para verificar la efectividad de los puntos anteriores

Detalles

  1. ¿Cómo implementar la agrupación de bandas?

    • Muchos de los objetos reales dependen de dependencias de largo alcance, por lo que la forma más directa de resolver este problema desde la perspectiva de la agrupación debería ser cambiar la operación de agrupación a una forma larga pero estrecha , es decir, agrupación de bandas en este artículo
    • La implementación es muy simple, lo que equivale a establecer el ancho o la altura del núcleo de agrupación espacial estándar en 1, y luego tomar todos los elementos horizontales o verticales para agregar cada vez al promedio (agrupación promedio, de acuerdo con la fórmula en el texto, cada vez El número de todos los elementos horizontales o verticales de la entrada es w y h del tensor de entrada respectivamente, es decir, solo se cambia el método de muestreo en la agrupación espacial, correspondiente a las ecuaciones 2 y 3 en el documento
    • En el código fuente PyTorch publicado por el autor, el autor se dio cuenta a través de AdaptiveAvgPooling
      • La operación AdaptiveAvgPooling de PyTorch es para especificar el tamaño de entrada y salida por el usuario. La operación calculará el paso correspondiente y el tamaño del núcleo internamente. Puede consultar aquí
    • La comparación del efecto de la agrupación de bandas y la agrupación espacial se puede ver en la figura a continuación
  2. módulo de agrupación de bandas

    • Para permitir que la agrupación de bandas sea plug-and-play en diferentes estructuras de red existentes, el autor diseñó el módulo de agrupación de bandas, que encapsula la agrupación de bandas dentro del módulo para garantizar que el mapa de características de entrada se haya ejecutado después de pasar por el módulo SPM Mapa de características de la operación de agrupación de bandas
    • Como se muestra a continuación:
      • Para un tensor de entrada, use dos rutas para manejar la agrupación de bandas horizontal y vertical, y luego expanda al tamaño original del tensor de entrada (vea el código a continuación, esta expansión debe interprolarse mediante la interpolación de muestreo ascendente )
      • Luego agregue los resultados de las dos vías para la fusión; luego agregue uno 1x1 conv(cambie el número de canales) y luego agregue la función de activación sigmoidea
      • Al mismo tiempo, hay una operación de mapa de identidad similar en SPM. El resultado del sigmoide después de las dos rutas anteriores se fusionan directamente a través de la multiplicación por elementos. Aquí es equivalente al sigmoide obtenido en el paso anterior, es una matriz de peso para obtener la importancia de las características de cada posición en el tensor de entrada. Por lo tanto, la vía de 2 vías anterior puede ser readaptada, un poco como el mecanismo de atención
  3. módulo de agrupación mixta

    • Si toda la agrupación en la red se reemplaza por operaciones de agrupación de bandas debido a las consideraciones anteriores, inevitablemente afectará el efecto de los objetos originales que no son de banda, y no vale la pena perder. Por lo tanto, el autor agregó tanto la agrupación de bandas como la agrupación piramidal para construir un módulo de agrupación mixta
    • Entre ellos, la agrupación de bandas se utiliza para resolver dependencias de largo alcance, mientras que la agrupación piramidal ligera se utiliza para resolver dependencias de corto alcance
  4. Código de implementación

    • Parte SPNet , su columna vertebral es la serie Resnet
    • Fuente de referencia StripPooling part
      ### 通过AdaptiveAvgPool2d实现strip pooling
      self.pool1 = nn.AdaptiveAvgPool2d(pool_size[0])
      self.pool2 = nn.AdaptiveAvgPool2d(pool_size[1])
      self.pool3 = nn.AdaptiveAvgPool2d((1, None))
      self.pool4 = nn.AdaptiveAvgPool2d((None, 1))
      
      ## SPM模块
      def forward(self, x):
          _, _, h, w = x.size()
          x1 = self.conv1_1(x)
          x2 = self.conv1_2(x)
          x2_1 = self.conv2_0(x1)
          x2_2 = F.interpolate(self.conv2_1(self.pool1(x1)), (h, w), **self._up_kwargs)
          x2_3 = F.interpolate(self.conv2_2(self.pool2(x1)), (h, w), **self._up_kwargs)
          x2_4 = F.interpolate(self.conv2_3(self.pool3(x2)), (h, w), **self._up_kwargs)
          x2_5 = F.interpolate(self.conv2_4(self.pool4(x2)), (h, w), **self._up_kwargs)
          x1 = self.conv2_5(F.relu_(x2_1 + x2_2 + x2_3))
          x2 = self.conv2_6(F.relu_(x2_5 + x2_4))
          out = self.conv3(torch.cat([x1, x2], dim=1))
          return F.relu_(x + out)
      

Conclusiones

  1. Personalmente, creo que la idea de la agrupación de franjas es aún más razonable, y la implementación es relativamente simple.
  2. Además, si la idea de agrupamiento de bandas se combina con una convolución asimétrica, ¿es posible mejorar aún más el efecto de los objetos que requieren dependencias de largo alcance descritas en este artículo?

Supongo que te gusta

Origin www.cnblogs.com/xiangs/p/12747816.html
Recomendado
Clasificación