Problema resolvido na íntegra
-
Tamanho do mapa de saída para um mapa de entrada 28×28 e kernel sobel-x 3×3 6 passos
A camada: um mapa de entrada de 28×28, um núcleo sobel-x de 3×3, passo 1, preenchimento mesmo. Calcule o tamanho do mapa de saída e o custo de uma passagem em multiplicações-adições — depois determine quantas camadas destas têm de ser empilhadas antes que um único píxel de saída dependa de todos os píxeis da imagem.
-
O preenchimento fixa o tamanho, por isso resolva-o primeiro. O preenchimento mesmo coloca uma borda de zeros de um píxel em redor do mapa, o que é exatamente o suficiente para uma janela de 3×3 ficar centrada num píxel do canto em vez de ficar pendurada fora da extremidade. A borda de que um núcleo precisa é metade da sua dimensão, sem contar com o centro.
-
Deslize a janela ao longo de uma linha. A sua extremidade esquerda começa em 0 e avança segundo o passo até que a sua extremidade direita alcance o fim da linha com preenchimento, pelo que contar os píxeis de saída é uma contagem de postes de vedação: o número de avanços, mais 1 para a posição inicial. Ao passo 1, a borda devolve exatamente as 2 colunas que o núcleo retira, razão pela qual recebe o nome de mesmo.
-
Cada um dos 784 píxeis de saída é uma soma ponderada de 9 valores de entrada. Some os pesos de sobel-x e eles anulam-se para 0, de modo que qualquer janela cujas 9 entradas sejam todas iguais devolve exatamente 0 — independentemente do brilho dessa região. O mapa fica escuro onde quer que a imagem seja uniforme e responde apenas onde a coluna esquerda da janela difere da direita.
-
A conta aritmética resulta daqui: 9 multiplicações-acumulações por píxel de saída, um píxel de saída por posição da janela. O painel apresenta essa contagem.
-
A profundidade é a parte interessante. Após uma camada, um píxel de saída vê 3 píxeis de entrada de largura. Adicione uma segunda e cada um desses 3 era ele próprio uma janela de 3 — mas as janelas vizinhas sobrepõem-se em 2, pelo que o alcance atinge 5, não 9. Cada camada adicional 3×3 de passo 1 alarga-o em exatamente 2.
-
Defina o alcance para cobrir todas as 28 colunas e determine a profundidade. 13 camadas atingem 27 e ficam a faltar uma coluna; a 14.ª é a primeira cujos píxeis de saída podem ser influenciados pela imagem inteira.
Resposta
Saída de 28×28, 7056 multiplicações-adições por camada, e 14 camadas antes que um píxel veja a imagem inteira. Agora calcule o custo desse alcance. As 14 camadas empilhadas gastam 14 × 9 = 126 multiplicações-acumulações por píxel de saída. Uma única camada que alcance a mesma distância necessita de um núcleo de 29×29, a 841 por píxel de saída — 6,7 vezes mais aritmética para exatamente o mesmo campo de visão. A profundidade compra alcance de forma muito mais barata do que a largura, razão pela qual as redes de visão são pilhas longas de núcleos de 3×3 em vez de pilhas curtas de núcleos grandes.
-
Referências (1)
- Insight block 3 — the operation called convolution is cross-correlation: I. Goodfellow, Y. Bengio and A. Courville, Deep Learning, ch. 9. MIT Press, 2016. ISBN 978-0-262-03561-3 — "many machine learning libraries implement cross-correlation but call it convolution".