Como funcionam as camadas de convolução subsequentes?

29

Esta questão se resume a "como as camadas de convolução funcionam exatamente .

Suponha que eu tenha uma imagem escala de cinza. Então a imagem tem um canal. Na primeira camada, aplico uma convolução com filtros e preenchimento . Então eu tenho outra camada de convolução com convolutions e filtros . Quantos mapas de recursos eu tenho?3 × 3 k 1 5 × 5 k 2n×m3×3k15×5k2

Convolução tipo 1

A primeira camada é executada. Depois disso, tenho k1 mapas de recursos (um para cada filtro). Cada um deles tem o tamanho n×m . Cada pixel foi criado retirando 33=9 pixels da imagem de entrada preenchida.

Em seguida, a segunda camada é aplicada. Cada filtro é aplicado separadamente a cada um dos mapas de recursos . Isso resulta em mapas de recursos k2 para cada um dos mapas de recursos k1 . Portanto, existem mapas de recursos k1×k2 após a segunda camada. Cada pixel único de cada um dos novos mapas de recursos foi criado usando "pixels" do mapa de recursos preenchido de antes.55=25

O sistema precisa aprender os parâmetros .k133+k255

Convolução do tipo 2.1

Como antes: a primeira camada é executada. Depois disso, tenho os mapas de recursos (um para cada filtro). Cada um deles tem o tamanho n \ vezes m . Cada pixel foi criado retirando 3 \ cdot 3 = 9 pixels da imagem de entrada preenchida. n × m 3 3 = 9k1n×m33=9

Diferente de antes: a segunda camada é aplicada. Cada filtro é aplicado à mesma região, mas todos apresentam mapas de antes. Isso resulta em mapas de recursos k2 no total após a execução da segunda camada. Cada pixel único de cada um dos novos mapas de recursos foi criado usando k255=25k2 "pixels" dos mapas de recursos preenchidos anteriormente.

O sistema precisa aprender os parâmetros k133+k255 .

Convolução do tipo 2.2

Como acima, mas em vez de ter 55=25 parâmetros por filtro que precisam ser aprendidos e simplesmente copiados para os outros mapas de recursos de entrada, você tem k133+k2k155 parâmetros que precisam ser aprendidos.

Questão

  1. O tipo 1 ou tipo 2 é normalmente usado?
  2. Qual tipo é usado no Alexnet ?
  3. Que tipo é usado no GoogLeNet ?
    • Se você diz o tipo 1: Por que convoluções 1×1 fazem algum sentido? Eles não apenas multiplicam os dados com uma constante?
    • Se você diz o tipo 2: explique o custo quadrático ("Por exemplo, em uma rede de visão profunda, se duas camadas convolucionais estão encadeadas, qualquer aumento uniforme no número de seus filtros resulta em um aumento quadrático da computação")

Para todas as respostas, forneça algumas evidências (documentos, livros didáticos, documentação de estruturas) de que sua resposta está correta.

Pergunta bônus 1

O pool é aplicado sempre apenas por mapa de recursos ou também é feito em vários mapas de recursos?

Pergunta bônus 2

Estou relativamente certo de que o tipo 1 está correto e entendi algo errado com o artigo do GoogLe. Mas há uma convoluções em 3D também. Digamos que você possua 1337 mapas de recursos de tamanho e aplique um filtro . Como você desliza o filtro sobre os mapas de recursos? (Da esquerda para a direita, de cima para baixo, do primeiro mapa ao último mapa?) Isso importa desde que você faça isso de forma consistente?3 × 4 × 542.×3143×4×5

Minha pesquisa

Martin Thoma
fonte
Um tempo depois: Análise e otimização de arquiteturas de redes neurais convolucionais , especialmente o capítulo 2 e a Figura 2.2 e a Figura 2.3.
Martin Thoma

Respostas:

5

Não tenho certeza sobre as alternativas descritas acima, mas a metodologia comumente usada é:

k23˙3˙k1+k1˙5˙5˙k2

Bônus 1: O pool é feito por mapa de recursos, separadamente.

Bônus 2: A ordem do "deslizamento" não importa. De fato, cada saída é calculada com base na camada anterior, portanto, as respostas do filtro de saída não dependem uma da outra. Eles podem ser calculados em paralelo.

ChristianSzegedy
fonte
1
Eu esqueci totalmente dessa pergunta. Enquanto isso, escrevi minha tese de mestrado sobre CNNs. O capítulo 3 explica como eles funcionam.
Martin Thoma
1
Para esclarecer: Tipo 2.2 é a correta (descrito nesta resposta)
Martin Thoma
1
Caso alguém realmente queira ver isso em ação, implementei uma profunda rede neural convolucional nas folhas do Google. Você pode ver os filtros e a imagem de entrada, pixel por pixel, enquanto funciona na CNN, até que a CNN preveja a resposta: docs.google.com/spreadsheets/d/…
bwest87
5

Eu apenas lutei com essa mesma pergunta por algumas horas. Pensei em compartilhar o interior que me ajudou a entendê-lo.

A resposta é que os filtros para a segunda camada convolucional não têm a mesma dimensionalidade que os filtros para a primeira camada. Em geral, o filtro deve ter o mesmo número de dimensões que suas entradas . Portanto, na primeira camada de conv, a entrada possui 2 dimensões (porque é uma imagem). Assim, os filtros também têm duas dimensões. Se houver 20 filtros na primeira camada de conv, a saída da primeira camada de conv será uma pilha de 20 mapas de recursos 2D. Portanto, a saída da primeira camada de conv é tridimensional, onde o tamanho da terceira dimensão é igual ao número de filtros na primeira camada.

Agora essa pilha 3D forma a entrada para a segunda camada de conv. Como a entrada para a 2ª camada é 3D, os filtros também precisam ser 3D. Torne o tamanho dos filtros da segunda camada na terceira dimensão igual ao número de mapas de recursos que foram as saídas da primeira camada.

Agora você apenas se envolve nas 2 primeiras dimensões; Linhas e colunas. Assim, a convolução de cada filtro da 2ª camada com a pilha de mapas de características (saída da primeira camada) produz um único mapa de características.

O tamanho da terceira dimensão da saída da segunda camada é, portanto, igual ao número de filtros na segunda camada.

Alex Blenkinsop
fonte
2

Confira esta palestra e esta visualização

Geralmente é utilizado o tipo 2.1 de convolução. Na entrada, você tem uma imagem NxMx1; depois da primeira convolução, você obtém N_1xM_1xk_1; portanto, sua imagem após a primeira convolução terá k_1 canais. A nova dimensão N_1 e M_1 dependerá do passo S e do preenchimento P: N_1 = (N - 3 + 2P) / S + 1, você calcula M_1 por analogia. Para a primeira camada de conv, você terá pesos 3x3xk_1 + k_1. Foi adicionado k_1 para preconceitos na função não linear.

Na segunda camada, você tem como imagem de entrada o tamanho N_1xM_1xk_1, em que k_1 é o novo número de canais. E após a segunda convolução, você obtém a imagem N_2xM_2xk_2 (matriz). Você possui os parâmetros 5x5xk_2xk_1 + k_2 na segunda camada.

Para convolução 1x1 com filtros k_3 e entrada NxMxC (C é o número de canais de entrada), você obterá uma nova imagem (matriz) NxMxk_3, portanto 1x1 faz sentido. Eles foram introduzidos neste artigo

Bônus 1: o pool é aplicado por mapa de recursos.

Para detalhes, consulte os slides do curso da CNN em Stanford - você tem uma boa visualização de como a convolução é resumida em vários canais de entrada.

pplonski
fonte
2
As respostas somente para links são desencorajadas - os links podem parar de funcionar. Você pode incorporar informações relevantes?
Sean Owen
1
a visualização foi realmente útil. Meu momento de epifania foi quando percebi que os filtros são 3D, e não 2D.
kmace
1
Ótimos links, resolvem coisas para mim. Mas sua resposta parece inconsistente com o que é dito nos links, especificamente na camada 2 de conv. Cada campo receptivo é 3D com dimensões 5x5xk_1, portanto o número de parâmetros deve ser 5 * 5 * k_1 * k_2 (mais o viés).
precisa saber é o seguinte
@DanielSchlaug você está certo, eu corrigi a resposta.
pplonski
1

k1331k1

k255k1k2

Ou seja, os núcleos em uma camada convolucional abrangem a profundidade da saída da camada anterior.

1×1kn11kn-1

Especulação:

A questão bônus 2 não é algo que eu conheça, mas acho que o parâmetro de profundidade na convolução se torna uma dimensão extra.

mnknmnkn+1kn

geometrikal
fonte