¿Cómo funciona la operación DepthConcat en 'Profundizando con convoluciones'?

Respuestas:

9

No creo que la salida del módulo de inicio sea ​​de diferentes tamaños.

ingrese la descripción de la imagen aquí

Para las capas convolucionales, las personas a menudo usan relleno para retener la resolución espacial.

La capa de agrupación inferior derecha (marco azul) entre otras capas convolucionales puede parecer incómoda. Sin embargo, a diferencia de las capas convencionales de submuestreo de agrupación (marco rojo, zancada> 1), utilizaron una zancada de 1 en esa capa de agrupación . Las capas de agrupación Stride-1 realmente funcionan de la misma manera que las capas convolucionales, pero con la operación de convolución reemplazada por la operación máxima.

Entonces, la resolución después de la capa de agrupación también permanece sin cambios, y podemos concatenar las capas de agrupación y convolucionales juntas en la dimensión de "profundidad".

ingrese la descripción de la imagen aquí

Como se muestra en la figura anterior del documento, el módulo de inicio en realidad mantiene la resolución espacial.

dontloo
fuente
6

Tenía la misma pregunta en mente mientras leía el libro blanco y los recursos a los que ha hecho referencia me han ayudado a encontrar una implementación.

En el código de la antorcha al que hace referencia , dice:

--[[ DepthConcat ]]--
-- Concatenates the output of Convolutions along the depth dimension
-- (nOutputFrame). This is used to implement the DepthConcat layer
-- of the Going deeper with convolutions paper :

La palabra "profundidad" en el aprendizaje profundo es un poco ambigua. Afortunadamente, esta respuesta SO proporciona cierta claridad:

En Deep Neural Networks, la profundidad se refiere a la profundidad de la red, pero en este contexto, la profundidad se utiliza para el reconocimiento visual y se traduce en la tercera dimensión de una imagen.

En este caso tiene una imagen, y el tamaño de esta entrada es 32x32x3, que es (ancho, alto, profundidad). La red neuronal debería poder aprender basándose en estos parámetros, ya que la profundidad se traduce en los diferentes canales de las imágenes de entrenamiento.

Entonces DepthConcat concatena tensores a lo largo de la dimensión de profundidad, que es la última dimensión del tensor y, en este caso, la tercera dimensión de un tensor 3D.

DepthConcat necesita hacer que los tensores sean iguales en todas las dimensiones excepto en la dimensión de profundidad, como dice el código de la antorcha :

-- The normal Concat Module can't be used since the spatial dimensions
-- of tensors to be concatenated may have different values. To deal with
-- this, we select the largest spatial dimensions and add zero-padding
-- around the smaller dimensions.

p.ej

A = tensor of size (14, 14, 2)
B = tensor of size (16, 16, 3)
result = DepthConcat([A, B])
where result with have a height of 16, a width of 16 and a depth of 5 (2 + 3). 

ingrese la descripción de la imagen aquí

En el diagrama anterior, vemos una imagen del tensor de resultados de DepthConcat, donde el área blanca es el relleno de cero, el rojo es el tensor A y el verde es el tensor B.

Aquí está el pseudocódigo para DepthConcat en este ejemplo:

  1. Mire el tensor A y el tensor B y encuentre las dimensiones espaciales más grandes, que en este caso serían los tamaños de 16 de ancho y 16 de altura del tensor B. Dado que el tensor A es demasiado pequeño y no coincide con las dimensiones espaciales del Tensor B, deberá rellenarse.
  2. Rellene las dimensiones espaciales del tensor A con ceros agregando ceros a la primera y segunda dimensiones haciendo el tamaño del tensor A (16, 16, 2).
  3. Concatenar el tensor A acolchado con el tensor B a lo largo de la dimensión de profundidad (tercera).

Espero que esto ayude a alguien que piense la misma pregunta leyendo ese libro blanco.

AshleyS
fuente
sí, introducción perfecta. Esto se concatena en dirección de profundidad. No en las direcciones espaciales.
Shamane Siriwardhana