Como funciona a operação DepthConcat em 'Aprofundando as convoluções'?

12

Lendo Aproximando- me das convoluções , deparei-me com uma camada DepthConcat , um componente dos módulos de criação propostos , que combina a saída de vários tensores de tamanhos variados. Os autores chamam isso de "concatenação de filtro". Parece haver uma implementação para o Torch , mas eu realmente não entendo o que ele faz. Alguém pode explicar em palavras simples?

moi
fonte

Respostas:

9

Não acho que a saída do módulo inicial seja de tamanhos diferentes.

insira a descrição da imagem aqui

Para camadas convolucionais, as pessoas costumam usar preenchimento para manter a resolução espacial.

A camada de agrupamento no canto inferior direito (moldura azul), entre outras camadas convolucionais, pode parecer estranha. No entanto, diferentemente das camadas de agrupamento e subamostragem convencionais (moldura vermelha, passada> 1), elas usaram uma passada de 1 nessa camada de associação . As camadas de pool do Stride-1 realmente funcionam da mesma maneira que as camadas convolucionais, mas com a operação de convolução substituída pela operação máxima.

Portanto, a resolução após a camada de pool também permanece inalterada, e podemos concatenar as camadas de pool e convolucional juntas na dimensão "profundidade".

insira a descrição da imagem aqui

Como mostrado na figura acima do documento, o módulo inicial realmente mantém a resolução espacial.

dontloo
fonte
6

Eu tinha a mesma pergunta em mente ao ler esse white paper e os recursos que você mencionou me ajudaram a criar uma implementação.

No código da tocha que você referenciou , ele diz:

--[[ 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 :

A palavra "profundidade" no aprendizado profundo é um pouco ambígua. Felizmente, esta resposta SO fornece alguma clareza:

Nas redes neurais profundas, a profundidade refere-se à profundidade da rede, mas, neste contexto, a profundidade é usada para reconhecimento visual e se traduz na terceira dimensão de uma imagem.

Nesse caso, você tem uma imagem e o tamanho dessa entrada é 32x32x3, que é (largura, altura, profundidade). A rede neural deve ser capaz de aprender com base nesses parâmetros, à medida que a profundidade se traduz nos diferentes canais das imagens de treinamento.

Portanto, o DepthConcat concatena os tensores ao longo da dimensão de profundidade, que é a última dimensão do tensor e, neste caso, a 3ª dimensão de um tensor 3D.

O DepthConcat precisa tornar os tensores iguais em todas as dimensões, exceto na dimensão de profundidade, como diz o código da tocha :

-- 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.

por exemplo

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). 

insira a descrição da imagem aqui

No diagrama acima, vemos uma imagem do tensor de resultado DepthConcat, onde a área branca é o preenchimento zero, o vermelho é o tensor A e o verde é o tensor B.

Aqui está o pseudo-código para DepthConcat neste exemplo:

  1. Observe o tensor A e o tensor B e encontre as maiores dimensões espaciais, que neste caso seriam as 16 larguras e 16 alturas do tensor B. Como o tensor A é muito pequeno e não corresponde às dimensões espaciais do tensor B, ele precisará ser preenchido.
  2. Preencher as dimensões espaciais do tensor A com zeros adicionando zeros às primeira e segunda dimensões, tornando o tamanho do tensor A (16, 16, 2).
  3. Concatene o tensor acolchoado A com o tensor B ao longo da dimensão de profundidade (3ª).

Espero que isso ajude alguém que pensa a mesma pergunta a ler esse white paper.

AshleyS
fonte
Sim. introdução perfeita. Isso é concatenado na direção da profundidade. Não nas direções espaciais.
Shamane Siriwardhana