Nella CNN, l'upsampling e la trasposizione della convoluzione sono uguali?


12

Entrambi i termini "ricampionamento" e "trasposizione della convoluzione" sono usati quando si sta facendo "deconvoluzione" (<- non un buon termine, ma permettetemi di usarlo qui). Inizialmente, pensavo che significassero la stessa cosa, ma mi sembra che siano diversi dopo aver letto questi articoli. qualcuno può chiarire per favore?

  1. Trasposizione della convoluzione : sembra che possiamo usarla quando proponiamo la perdita attraverso la rete neurale convolutonale.

    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 , sezione 4 "Per il livello convoluzionale ..."

  2. Upsampling : sembra che lo usiamo quando vogliamo sottocampionare da input più piccoli a input più grandi nella struttura convnet-decovnet.

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


1
Pubblicazione incrociata su datascience.stackexchange.com/questions/15863/… . Si prega di non effettuare il cross-post, ma decidere su quale sito si desidera porre la domanda.
Scortchi - Ripristina Monica

@Scortchi Oh, sono collegati !? Mi dispiace, rimuovo quello nella scienza dei dati.
RockTheStar,

Un post interessante sulle cosiddette deconvoluzioni
hans

Risposte:


9

Poiché non esiste una risposta dettagliata e marcata, farò del mio meglio.

Per prima cosa capiamo da dove viene la motivazione per tali strati: ad esempio un autoencoder convoluzionale. È possibile utilizzare un codificatore automatico convoluzionale per estrarre elementi grafici delle immagini durante la formazione del codificatore automatico per ricostruire l'immagine originale. (È un metodo non supervisionato.)

Un tale codificatore automatico ha due parti: il codificatore che estrae le caratteristiche dall'immagine e il decodificatore che ricostruisce l'immagine originale da queste caratteristiche. L'architettura dell'encoder e del decoder è generalmente speculare.

In un autoencoder convoluzionale, l'encoder funziona con livelli di convoluzione e pool. Presumo che tu sappia come funzionano. Il decodificatore tenta di rispecchiare l'encoder ma invece di "rendere tutto più piccolo" ha l'obiettivo di "rendere tutto più grande" in modo che corrisponda alla dimensione originale dell'immagine.

L'opposto degli strati convoluzionali sono gli strati di convoluzione trasposti (noto anche come deconvoluzione , ma correttamente matematicamente parlando questo è qualcosa di diverso). Funzionano con filtri, kernel, passi come i livelli di convoluzione ma invece di mappare ad esempio da 3x3 pixel di input a 1 output mappano da 1 pixel di input a 3x3 pixel. Naturalmente, anche la backpropagation funziona in modo leggermente diverso.

L'opposto dei livelli di raggruppamento sono i livelli di ricampionamento che nella loro forma più pura ridimensionano solo l'immagine (o copiano il pixel tutte le volte che è necessario). Una tecnica più avanzata sono i passaggi non convertibili che ripristinano i passaggi massimi ricordando la posizione dei massimi nei livelli di passaggi massimi e nei livelli di smistamento copiano il valore esattamente in questa posizione. Per citare da questo documento ( https://arxiv.org/pdf/1311.2901v3.pdf ):

Nella convnet, l'operazione di pooling massimo non è invertibile, tuttavia è possibile ottenere un inverso approssimativo registrando le posizioni dei massimi all'interno di ciascuna regione di pool in un insieme di variabili switch. Nel deconvnet, l'operazione di smistamento utilizza questi interruttori per posizionare le ricostruzioni dallo strato superiore in posizioni appropriate, preservando la struttura dello stimolo.

Per ulteriori input e contesti tecnici, dai un'occhiata a questa spiegazione davvero valida, dimostrativa e approfondita: http://deeplearning.net/software/theano/tutorial/conv_arithmetic.html

E dai un'occhiata a https://www.quora.com/What-is-the-difference-between-Deconvolution-Upsampling-Unpooling-and-Convolutional-Sparse-Coding


F. Chollet (creatore di Keras) sosterrebbe che questa è una tecnica autogestita .
Hans

6

Potrebbe dipendere dal pacchetto che si sta utilizzando.

In keras sono diversi. Il Upsampling è definito qui https://github.com/fchollet/keras/blob/master/keras/layers/convolutional.py A condizione che tu usi il backend tensorflow, ciò che effettivamente accade è keras chiama la funzione tensorflow resize_images , che essenzialmente è un'interpolazione e non addestrabile.

La convoluzione trasposta è più coinvolta. È definito nello stesso script Python sopra elencato. Chiama la funzione tensorflow conv2d_transpose e ha il kernel ed è trainabile.

Spero che questo ti aiuti.


1

La deconvoluzione nel contesto delle reti neurali convoluzionali è sinonimo di trasposizione della convoluzione. La deconvoluzione può avere un altro significato in altri campi.

Trasporre la convoluzione è una strategia tra le altre per eseguire il ricampionamento.


si, sono d'accordo. ma sembra che il modo in cui i riferimenti li spiegano sia diverso. Guarda il video in No.2 e poi i riferimenti in No.1 (Personalmente, vado per la spiegazione No.1)
RockTheStar

@RockTheStar Quale concetto è spiegato in modo diverso? Trasporre la convoluzione o il ricampionamento?
Franck Dernoncourt,

1
il concetto di upsampling / deconvoluzione spiegato nel video in No.2. Sono circa pochi minuti.
RockTheStar il

0

ecco una buona illustrazione della differenza tra 1) trasposizione convoluzione e 2) upsampling + convoluzione. https://distill.pub/2016/deconv-checkerboard/

Mentre la convoluzione di trasposizione è più efficiente, l'articolo promuove l'upsampling + la convoluzione poiché non risente del manufatto a scacchiera.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.