A arquitetura AlexNet usa zero paddings, como mostrado na figura: 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:
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!
fonte
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.
fonte
Ó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.
fonte
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.
fonte
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 .
fonte
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.
fonte