Qual é a diferença entre Convolução dilatada e Deconvolução?

11

Essas duas operações de convolução são muito comuns no aprendizado profundo no momento.

Eu li sobre a camada convolucional dilatada neste artigo: WAVENET: UM MODELO GERATIVO PARA ÁUDIO CRU

e desconvolução está neste artigo: Redes totalmente convolucionais para segmentação semântica

Ambos parecem fazer uma amostra da imagem, mas qual é a diferença?

Shamane Siriwardhana
fonte

Respostas:

9

Em termos de termos mecanísticos / pictóricos / baseados em imagens:

Dilatação: ### VER COMENTÁRIOS, TRABALHANDO PARA CORRIGIR ESTA SEÇÃO

A dilatação é basicamente a mesma que a convolução comum (francamente também é a deconvolução), exceto que introduz brechas em seus kernels, ou seja, enquanto um kernel padrão normalmente desliza sobre seções contíguas da entrada, sua contraparte dilatada pode, por exemplo, "envolva" uma seção maior da imagem - embora ainda tenha apenas tantos pesos / entradas quanto o formulário padrão.

(Observe bem, enquanto a dilatação injeta zeros em seu núcleo para diminuir mais rapidamente as dimensões / resolução faciais de sua saída, a convolução de transposição injeta zeros em sua entrada para aumentar a resolução de sua saída.)

Para tornar isso mais concreto, vamos dar um exemplo muito simples: digamos que
você tenha uma imagem 9x9, x sem preenchimento. Se você usar um kernel 3x3 padrão, com o passo 2, o primeiro subconjunto de preocupações da entrada será x [0: 2, 0: 2], e todos os nove pontos dentro desses limites serão considerados pelo kernel. Você então varria x [0: 2, 2: 4] e assim por diante.

Claramente, a saída terá dimensões faciais menores, especificamente 4x4. Assim, os neurônios da próxima camada têm campos receptivos no tamanho exato desses passes de núcleos. Mas se você precisar ou desejar neurônios com mais conhecimento espacial global (por exemplo, se um recurso importante for apenas definível em regiões maiores que isso), será necessário convolver essa camada uma segunda vez para criar uma terceira camada na qual o campo receptivo efetivo é alguma união das camadas anteriores rf.

Mas se você não quiser adicionar mais camadas e / ou achar que as informações transmitidas são excessivamente redundantes (ou seja, seus campos receptivos 3x3 na segunda camada carregam apenas uma quantidade "2x2" de informações distintas), você pode usar um filtro dilatado. Sejamos extremos quanto a isso, para maior clareza e digamos que usaremos um filtro de 9x9 com 3 discagens. Agora, nosso filtro "circundará" toda a entrada, portanto não precisaremos deslizá-la. No entanto, continuaremos usando apenas 3x3 = 9 pontos de dados da entrada, x , normalmente:

x [0,0] U x [0,4] U x [0,8] U x [4,0] U x [4,4] U x [4,8] U x [8,0] U x [8,4] U x [8,8]

Agora, o neurônio em nossa próxima camada (teremos apenas um) terá dados "representando" uma porção muito maior de nossa imagem e, novamente, se os dados da imagem forem altamente redundantes para dados adjacentes, é possível que tenhamos preservado o mesma informação e aprendeu uma transformação equivalente, mas com menos camadas e menos parâmetros. Eu acho que, dentro dos limites desta descrição, fica claro que, embora definível como reamostragem, estamos aqui fazendo downsampling para cada kernel.


Fracionado-strided ou transposição ou "deconvolução":

Esse tipo ainda é de convolução no coração. A diferença é, novamente, que passaremos de um volume de entrada menor para um volume de saída maior. O OP não fez perguntas sobre o que é upsampling, por isso vou economizar um pouco de amplitude, desta vez e seguir direto para o exemplo relevante.

No nosso caso 9x9 de antes, digamos que queremos agora aumentar a amostra para 11x11. Nesse caso, temos duas opções comuns: podemos pegar um kernel 3x3 e com passo 1 e varrê-lo sobre nossa entrada 3x3 com 2 padding, para que nosso primeiro passe seja sobre a região [pad esquerdo 2: 1, above-pad-2: 1] then [pad-left-1: 2, above-pad-2: 1] e assim por diante.

Como alternativa, podemos inserir adicionalmente o preenchimento entre os dados de entrada e varrer o kernel sobre ele sem o mesmo preenchimento. Claramente, às vezes nos preocuparemos com exatamente os mesmos pontos de entrada mais de uma vez para um único kernel; é aqui que o termo "fracionado" parece mais bem fundamentado. Eu acho que a seguinte animação (emprestada daqui e baseada (acredito)) deste trabalho ajudará a esclarecer as coisas, apesar de serem de diferentes dimensões: a entrada é azul, os zeros e o preenchimento brancos injetados e a saída verde:

conv transposta, a entrada é azul, a saída é verde

Obviamente, estamos preocupados com todos os dados de entrada em oposição à dilatação, que pode ou não ignorar completamente algumas regiões. E como estamos claramente terminando com mais dados do que começamos, "upsampling".

Convido você a ler o excelente documento ao qual vinculei para obter uma definição e explicação mais sólida e abstrata da convolução de transposição, bem como para aprender por que os exemplos compartilhados são formas ilustrativas, mas amplamente inapropriadas, para calcular a transformação representada.

Doug Brummell
fonte
1
Por favor, lembre-se, eu não sou especialista, apenas alguém que recentemente teve que distinguir esses conceitos. Informe-me se houver algum erro ou simplificação excessiva que possa prejudicar a correção geral das respostas. Obrigado!
Doug Brummell
Doug Brummel Wow explica bem. Eu tive a mesma ideia . Gostaria de saber sua opinião sobre a aplicação da convolução dilatada. Como devemos começar a aplicar isso na CNN? Devemos primeiro a alguma convolução normal e depois aplicar a conolução dilatada? Outra coisa que a convolução dilatada pode perder informações é o zero. Então, acho que devemos aplicar convolução dilatada após algumas camadas normais de convecção?
Shamane Siriwardhana
Acredito que a idéia padrão é aumentar a quantidade de dilatação avançando, começando com filtros regulares não dilatados para l = 1, passando para filtros 2 e 3 dilatados e assim por diante, à medida que avança na profundidade da sua rede. Isso permite que você garanta que todos os dados de uma camada sejam passados ​​para a próxima (incluindo, principalmente, a própria rede) e, ao mesmo tempo, permita uma redução de amostragem exponencialmente mais rápida em cada camada, mas sem parâmetros de aumento. O objetivo é ter amplos campos receptivos sem sacrificar a inclusão de dados. E sim, a atenção ao preenchimento deve ser importante desde o início.
Doug Brummell
Veja [este artigo] ( arxiv.org/pdf/1511.07122.pdf ), ele é mencionado acima e forneceu um pouco sobre o que li sobre o tópico.
Doug Brummell
Outra coisa, esse documento afirma que não há perda de resolução em um esquema de dilatação tão crescente ... Acho que desconfio de outras perdas que eu possa cobrir na "resolução". Obviamente, se você pode substituir várias camadas de conv com menos camadas dilatadas e manter a precisão, ótimo, você deveria. Mas para mim (e eu vou ter que voltar para os livros sobre este), eu penso sobre as perdas potenciais no caso onde você arquiteto desde o início, com dilatação ...
Doug Brummell
5

Embora ambos pareçam estar fazendo a mesma coisa, que está amostrando uma camada, há uma margem clara entre eles.

Primeiro, falamos sobre convolução dilatada

Encontrei este bom blog no tópico acima. Então, como eu entendi, isso é mais como explorar os pontos de dados de entrada de uma maneira ampla . Ou aumentando o campo receptivo da operação de convolução.

Aqui está um diagrama de convolução dilatado do artigo .

Imagem 3

Isso é mais convolução normal, mas ajuda a capturar cada vez mais o contexto global dos pixels de entrada sem aumentar o tamanho dos parâmetros. Isso também pode ajudar a aumentar o tamanho espacial da produção. Mas o principal aqui é que isso aumenta o tamanho do campo receptivo exponencialmente com o número de camadas. Isso é muito comum no campo de processamento de sinal.

Este blog realmente explica o que há de novo na convolução dilatada e como isso é comparado à convolução normal.

Blog: Convoluções dilatadas e convoluções fatoradas pela Kronecker

Agora vou explicar o que é Deconvolution

Isso é chamado de convolução transposta. Isso é igual à função que usamos para convolução na propagação traseira.

Simplesmente no backprop, distribuímos gradientes de um neurônio no mapa de recursos de saída para todos os elementos nos campos receptivos, e também somamos gradientes para onde eles coincidiram com os mesmos elementos receptivos

Aqui está um bom recurso com fotos .

Portanto, a idéia básica é que a deconvolução funcione no espaço de saída. Não insira pixels. Ele tentará criar dimensões espaciais mais amplas no mapa de saída. Isso é usado em redes neurais totalmente convolucionais para segmentação semântica .

Portanto, mais do Deconvolution é uma camada de amostragem aprimorável.

Ele tenta aprender como fazer uma amostragem combinada com a perda final

Esta é a melhor explicação que encontrei para a deconvolução. Aula 13 na cs231, de 21.21 em diante .

Shamane Siriwardhana
fonte
você se importaria de elaborar como a convolução dilatada ajuda a aumentar o tamanho espacial da produção? Parece exigir ainda mais preenchimento do que as convoluções tradicionais, portanto pior em relação ao tamanho da saída.
precisa saber é o seguinte