Na CNN, o upsampling e a transposição da convolução são iguais?

12

Os termos "upsampling" e "transpose convolution" são usados ​​quando você está executando "deconvolution" (<- não é um bom termo, mas deixe-me usá-lo aqui). Originalmente, eu pensava que eles significam a mesma coisa, mas parece-me que eles são diferentes depois de ler esses artigos. alguém pode esclarecer?

  1. Convolução de transposição : parece que podemos usá-la quando propomos a perda via rede neural convolutonal.

    http://andrew.gibiansky.com/blog/machine-learning/convolutional-neural-networks/#Backward-Propagation

    https://github.com/vdumoulin/conv_arithmetic

    https://arxiv.org/pdf/1312.6034v2.pdf , seção 4 "Para a camada convolucional ..."

  2. Upsampling : parece que o usamos quando queremos fazer um upsample de entrada menor para entrada maior na estrutura convnet-decovnet.

    https://www.youtube.com/watch?v=ByjaPdWXKJ4&feature=youtu.be&t=22m

RockTheStar
fonte
1
Publicado em datascience.stackexchange.com/questions/15863/… . Não faça postagens cruzadas, mas decida em qual site você deseja fazer sua pergunta.
Scortchi - Restabelece Monica
@ Scortchi Oh, eles estão ligados !? Desculpe, eu removi o da ciência de dados.
RockTheStar
Um post interessante sobre as chamadas desconvoluções
hans

Respostas:

9

Como não há resposta detalhada e marcada, tentarei o meu melhor.

Vamos primeiro entender de onde vem a motivação para essas camadas: por exemplo, um autoencoder convolucional. Você pode usar um auto-codificador convolucional para extrair usuários de imagens enquanto treina o auto-codificador para reconstruir a imagem original. (É um método não supervisionado.)

Esse codificador automático possui duas partes: o codificador que extrai os recursos da imagem e o decodificador que reconstrói a imagem original desses recursos. A arquitetura do codificador e decodificador é geralmente espelhada.

Em um autoencoder convolucional, o codificador trabalha com camadas de convolução e pool. Presumo que você saiba como isso funciona. O decodificador tenta espelhar o codificador, mas em vez de "tornar tudo menor", ele tem o objetivo de "tornar tudo maior" para corresponder ao tamanho original da imagem.

O oposto das camadas convolucionais são as camadas de convolução transpostas (também conhecidas como deconvolução , mas falando matematicamente corretamente isso é algo diferente). Eles trabalham com filtros, núcleos, passos exatamente como as camadas de convolução, mas em vez de mapearem, por exemplo, 3x3 pixels de entrada para 1 saída, eles mapeiam de 1 pixel de entrada para 3x3 pixels. Claro, também a retropropagação funciona um pouco diferente.

O oposto das camadas de pooling são as camadas de upsampling que, na sua forma mais pura, redimensionam a imagem (ou copiam o pixel quantas vezes for necessário). Uma técnica mais avançada é o desassociação, que reverte o máximo, lembrando a localização dos máximos nas camadas de máximo e copie o valor exatamente para esse local. Para citar este documento ( https://arxiv.org/pdf/1311.2901v3.pdf ):

No convnet, a operação de pool máximo não é invertível, no entanto, podemos obter um inverso aproximado registrando os locais dos máximos dentro de cada região de pool em um conjunto de variáveis ​​de chave. No deconvnet, a operação de desconexão usa esses comutadores para colocar as reconstruções da camada acima em locais apropriados, preservando a estrutura do estímulo.

Para informações e contexto mais técnicos, dê uma olhada nesta explicação realmente boa, demonstrativa e aprofundada: http://deeplearning.net/software/theano/tutorial/conv_arithmetic.html

E dê uma olhada em https://www.quora.com/What-is-the-difference-between-Deconvolution-Upsampling-Unpool-and-Convolutional-Sparse-Coding

Maikefer
fonte
F. Chollet (criador de Keras) argumentaria que essa é uma técnica auto-supervisionada .
hans
6

Pode depender do pacote que você está usando.

Em keras eles são diferentes. Upsampling é definido aqui https://github.com/fchollet/keras/blob/master/keras/layers/convolutional.py Desde que você use o back-end do tensorflow, o que realmente acontece é que keras chama a função tensorflow resize_images , que é essencialmente uma interpolação e não treinável.

A convolução transposta está mais envolvida. É definido no mesmo script python listado acima. Ele chama a função tensorflow conv2d_transpose e possui o kernel e é treinável.

Espero que isto ajude.

Jian
fonte
1

Deconvolução no contexto de redes neurais convolucionais é sinônimo de transpor convolução. A desconvolução pode ter outros significados em outros campos.

A convolução de transposição é uma estratégia entre outras para realizar upsampling.

Franck Dernoncourt
fonte
sim eu concordo. mas parece que a maneira como as referências os explicam é diferente. Dê uma olhada no vídeo no No.2 e, em seguida, veja as referências no No.1 (Pessoalmente, eu
explico a
@RockTheStar Qual conceito é explicado de maneira diferente? Transpor convolução ou upsampling?
Franck Dernoncourt
1
o conceito de upsampling / deconvolution explicado no vídeo no 2. É cerca de alguns minutos.
RockTheStar 22/12/16
0

Aqui está uma ilustração muito boa da diferença entre 1) convolução de transposição e 2) upsampling + convolução. https://distill.pub/2016/deconv-checkerboard/

Embora a convolução de transposição seja mais eficiente, o artigo defende a upsampling + convolução, pois ela não sofre com o artefato quadriculado.

Shaobo Guan
fonte