Camadas Convolucionais: Almofar ou não?

19

A arquitetura AlexNet usa zero paddings, como mostrado na figura: insira a descrição da imagem aqui No entanto, não há explicação no artigo por que esse padding é introduzido.

O curso Standford CS 231n ensina que usamos estofamento para preservar o tamanho espacial: insira a descrição da imagem aqui

Gostaria de saber se é a única razão pela qual precisamos de preenchimento? Quero dizer, se eu não precisar preservar o tamanho espacial, posso remover os revestimentos? Eu sei que isso resultará em uma diminuição muito rápida no tamanho espacial à medida que avançamos em níveis mais profundos. No entanto, posso compensar isso removendo as camadas de pool. Eu ficaria muito feliz se alguém pudesse me dar alguma lógica por trás do preenchimento zero. Obrigado!

Jumabek Alihanov
fonte

Respostas:

20

Existem algumas razões pelas quais o preenchimento é importante:

  1. É mais fácil projetar redes se preservarmos heighte widthnão precisarmos nos preocupar muito com as dimensões do tensor ao passar de uma camada para outra, porque as dimensões simplesmente "funcionarão" .

  2. Isso nos permite projetar redes mais profundas . Sem preenchimento, a redução no tamanho do volume reduziria muito rapidamente.

  3. O preenchimento realmente melhora o desempenho, mantendo as informações nas fronteiras .

Citação das palestras de Stanford: "Além do benefício acima mencionado de manter os tamanhos espaciais constantes após o CONV, isso realmente melhora o desempenho. Se as camadas do CONV não zerassem as entradas e executassem apenas convoluções válidas, então o tamanho do os volumes seriam reduzidos em uma pequena quantidade após cada CONV, e as informações nas fronteiras seriam "lavadas" muito rapidamente ". - fonte

  1. Como o @dontloo já disse, as novas arquiteturas de rede precisam concatenar as camadas convolucionais com os filtros 1x1, 3x3 e 5x5 e não seria possível se eles não usassem preenchimento porque as dimensões não correspondiam. Verifique esta imagem do módulo inicial para entender melhor por que o preenchimento é útil aqui.

insira a descrição da imagem aqui

Drag0
fonte
4
Por que o preenchimento zero é tão onipresente? No processamento de imagens, existem muitos modos de borda diferentes usados, como vários tipos de espelhamento ou continuação do valor na borda. Os zeros puros têm uma estrutura muito diferente em comparação com as imagens / recursos reais.
Isarandi
3

Parece-me que o motivo mais importante é preservar o tamanho espacial. Como você disse, podemos compensar a diminuição no tamanho espacial removendo as camadas de pool. No entanto, muitas estruturas de rede recentes (como redes residuais , redes de começo , redes fractal ) operam sobre as saídas das diferentes camadas, o que requer um tamanho consistente espacial entre eles.

Outra coisa é, se não houver preenchimento, os pixels no canto da entrada afetam apenas os pixels no canto correspondente da saída, enquanto os pixels no centro contribuem para uma vizinhança na saída. Quando várias camadas sem preenchimento são empilhadas, a rede meio que ignora os pixels da borda da imagem.

Apenas alguns dos meus entendimentos, acredito que há outras boas razões.

dontloo
fonte
2

Ótima pergunta. Drag0 explicou bem, mas eu concordo, algo está errado.

É como olhar para uma fotografia e ter que lidar com a fronteira. Na vida real, você pode mover seus olhos para olhar mais longe; Não existem fronteiras reais. Portanto, é uma limitação do meio.

Além de preservar o tamanho, isso importa? Não estou ciente de uma resposta satisfatória, mas conjecturo (não comprovado) que, com experimentos sobre atenção e oclusão (objetos parciais), não precisamos da informação perdida nas fronteiras. Se você fizesse algo mais inteligente (por exemplo, copie o pixel ao lado), isso não mudaria a resposta, embora eu ainda não tenha experimentado. O preenchimento com zeros é rápido e preserva o tamanho, por isso é que o fazemos.

ignorante
fonte
1

este é o meu pensamento. o preenchimento zero é importante no momento inicial para manter o tamanho do vetor de recurso de saída. e alguém acima disse que o preenchimento zero tem mais desempenho.

mas e da última vez? a resolução do vetor de recursos de imagem é muito pequena e o valor de pixel significa um tipo de vetor de algum tamanho global.

Acho que, no último caso, algum tipo de espelhamento é melhor do que o preenchimento zero.

user225549
fonte
1

Ao elaborar a manutenção das informações na borda, basicamente, o pixel no canto (sombreado a verde) quando feito a convolução seria usado apenas uma vez, enquanto o do meio, como o vermelho sombreado, contribuiria para o mapa de recursos resultante várias vezes. , acolchoamos a imagem Veja a figura: 2 .

Jatin
fonte
1

Vou tentar dizer, a partir da informação, que quando é bom acolchoar e quando não é.

Vamos, para o caso base, dar o exemplo da funcionalidade de preenchimento do tensorflow. Ele fornece dois cenários, "Válido" ou "igual". Same preservará o tamanho da saída e o manterá igual ao da entrada, adicionando preenchimento adequado, enquanto válido não fará isso e algumas pessoas afirmam que isso levará à perda de informações, mas aqui está o problema .

Essa perda de informações depende do tamanho do kernel ou do filtro que você está usando. Por exemplo, digamos que você tenha uma imagem 28x28 e o tamanho do filtro seja 15x15 (digamos). A saída deve ter dimensão 16x16, mas se você usar "igual" no fluxo tensor, será 28x28. Agora, as 12 linhas e 12 colunas em si não carregam nenhuma informação significativa, mas ainda estão lá como uma forma de ruído. E todos sabemos o quanto os modelos de aprendizado profundo suscetíveis são em relação ao barulho. Isso pode degradar muito o treinamento. Portanto, se você estiver usando filtros grandes, é melhor não usar estofamento.

Saurabh Kumar
fonte