As convoluções "achatam imagens"?


8

Estou procurando uma boa explicação de como funcionam as convoluções no aprendizado profundo quando aplicadas a imagens multicanais. Por exemplo, digamos que eu tenha uma imagem de 100 x 100 pixels com três canais, RGB. O tensor de entrada teria dimensões de 100 x 100 x 3.

Se eu aplicar uma convolução com N filtros e um passo de um, a dimensão de saída será:

100 x 100 x 3 x N?

ou

100 x 100 x N?

Em outras palavras, a convolução aplicada "aplaina" a imagem ou a convolução é aplicada canal por canal?

Respostas:


7

Em todas as implementações para CNNs que processam imagens que eu já vi, a saída em qualquer camada é

Width x Height x Channels

ou alguma permutação. Esse é o mesmo número de dimensões que a entrada, nenhuma dimensão adicional é adicionada pelas camadas convolucionais. Cada canal do mapa de recursos na saída de uma camada CNN é uma matriz 2D "achatada" criada pela adição dos resultados de vários núcleos 2D (um para cada canal na camada de entrada).

Geralmente, espera-se que Width x Height x 1até mesmo imagens de entrada em escala de cinza sejam representadas para que elas se ajustem ao mesmo padrão e ao mesmo modelo de camada.

É totalmente viável criar um design de camada que converta uma camada de entrada de canais 2D + padrão em uma camada de canais 3D +. Não é algo que eu já tenha visto antes, mas você nunca pode descartar que isso poderia ser útil em um problema específico.

Você também pode ver convoluções de canais 3D + nas CNNs aplicadas ao vídeo, mas, nesse caso, a estrutura apresentará alguma variação de

Width x Height x Frames x Channels

Ótimo, obrigado. Na verdade, encontrei outra boa explicação que inclui a forma do kernel de convolução aqui: ligação
David Ruiz

2

Depende do número de filtros que você escolher. digamos que você escolheu 64 filtros.

seu tensor de peso terá a forma [3, 3, 3, 64] (3º é o número de canais na camada de entrada e 64 é o número de canais na camada de saída) e o formato do tensor de polarização [64]

a saída será se Pad = "SAME" e o passo 1 para uma imagem de entrada de 224 * 224 * 3 = 224 * 224 * 64

a saída será se Pad = "Válido" e o passo 1 para uma imagem de entrada de 224 * 224 * 3 = 221 * 221 * 64

Agora, com uma entrada de 221 * 221 * 64, se você quiser criar 128 filtros na próxima camada, a sua forma vetorial de peso será [3, 3, 64, 128] e a forma polarizada de vecotr será [128]

e formato de saída - se Pad = "MESMO" [221, 221, 128] - se Pad = "VÁLIDO" [198, 198, 128] considerando o passo = [1,1,1,1]

você pode verificar esses resultados enquanto cria o gráfico usando layername.get_shape ().


1
Tecnicamente, a resposta à pergunta do OP não depende do número de filtros. Portanto, sua primeira frase pode ser alterada / esclarecida. No entanto, os valores de exemplo são úteis, especialmente deixando clara a forma da matriz de pesos.
Neil Slater

1

A dimensão de saída de uma convolução na aprendizagem profunda depende de vários fatores

  1. o tamanho do filtro (também conhecido como kernel)
  2. o preenchimento (se você adiciona zeros ou não à sua imagem e quantos)
  3. os números de filtro que você usa
  4. o passo

A dependência mais simples é a do número de filtros N. Ele fornece o número de mapas de recursos que sua saída possui. Para a entrada que pode ser os canais RGB, ou seja, 3, para a saída, esse número pode ser escolhido livremente.

O próximo fator é o preenchimento zero. Se você usar um tamanho de filtro de (3,3) e um preenchimento "válido", ou seja, adicionar zeros NÃO ao redor da imagem, você terá uma saída de dimensão.

(100, 100, 3) -> (98, 98, N)

Como você usa um passo de 1. Se você mover o filtro pela imagem no final da imagem em cada direção, o filtro atingirá a borda após 98 etapas.

No entanto, se você usar o preenchimento "SAME", compensa o tamanho do filtro - no caso de um tamanho de filtro de (3,3) que corresponda a uma linha de zeros ao redor da imagem - você terá:

(100, 100, 3) -> (100, 100, N)

Com um passo de 2, por exemplo, você altera a posição do filtro em dois pixels. Portanto, você obtém

(100, 100, 3) -> (50, 50, N)

1

Os três canais RGB são convoluídos por diferentes kernels e adicionados em cada mapa de recursos. Portanto, você terá 100 x 100 x N como primeira camada de saída.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.