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?
Convolução de transposição : parece que podemos usá-la quando propomos a perda via rede neural convolutonal.
https://github.com/vdumoulin/conv_arithmetic
https://arxiv.org/pdf/1312.6034v2.pdf , seção 4 "Para a camada convolucional ..."
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
Respostas:
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 ):
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
fonte
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.
fonte
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.
fonte
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.
fonte