Qual è la differenza tra Convoluzione dilatata e Deconvoluzione?


11

Queste due operazioni di convoluzione sono molto comuni nell'apprendimento profondo in questo momento.

Ho letto dello strato convoluzionale dilatato in questo documento: WAVENET: UN MODELLO GENERATIVO PER AUDIO RAW

e De-convoluzione è in questo documento: reti completamente convoluzionali per la segmentazione semantica

Entrambi sembrano sottoporre a campionamento l'immagine, ma qual è la differenza?

Risposte:


9

In una sorta di termini meccanicistici / pittorici / basati sull'immagine:

Dilatazione: ### VEDI COMMENTI, LAVORANDO SULLA CORREZIONE DI QUESTA SEZIONE

La dilatazione è in gran parte la stessa della convoluzione run-of-the-mill (francamente lo è anche la deconvoluzione), tranne per il fatto che introduce lacune nei suoi kernel, vale a dire che un kernel standard scivolerebbe in genere su sezioni contigue dell'input, la sua controparte dilatata può, ad esempio, "circonda" una sezione più ampia dell'immagine, mentre ha ancora tanti pesi / input quanti sono i moduli standard.

(Nota bene, mentre la dilatazione inietta zeri nel suo kernel per ridurre più rapidamente le dimensioni / risoluzione del viso del suo output, trasporre la convoluzione inietta zeri nel suo input per aumentare la risoluzione del suo output.)

Per rendere questo più concreto, facciamo un esempio molto semplice: supponiamo di
avere un'immagine 9x9, x senza imbottitura. Se prendi un kernel 3x3 standard, con il passo 2, il primo sottoinsieme di problemi dall'input sarà x [0: 2, 0: 2], e tutti i nove punti all'interno di questi limiti saranno considerati dal kernel. Dovresti quindi passare su x [0: 2, 2: 4] e così via.

Chiaramente, l'output avrà dimensioni facciali più piccole, in particolare 4x4. Pertanto, i neuroni del livello successivo hanno campi ricettivi nella dimensione esatta di questi passaggi di kernel. Ma se hai bisogno o desideri neuroni con una maggiore conoscenza dello spazio globale (ad es. Se una caratteristica importante è definibile solo in regioni più grandi di questa) allora dovrai contorcere questo strato una seconda volta per creare un terzo livello in cui il campo ricettivo effettivo è qualche unione degli strati precedenti rf.

Ma se non vuoi aggiungere più livelli e / o ritieni che le informazioni trasmesse siano eccessivamente ridondanti (i tuoi campi ricettivi 3x3 nel secondo strato trasportano solo "2x2" informazioni distinte), puoi usare un filtro dilatato. Siamo estremi su questo per chiarezza e diciamo che useremo un filtro a 3 quadranti 9x9. Ora, il nostro filtro "cercherà" l'intero input, quindi non dovremo farlo scorrere affatto. Tuttavia, prenderemo solo 3x3 = 9 punti dati dall'input, x , in genere:

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]

Ora, il neurone nel nostro prossimo livello (ne avremo solo uno) avrà dati "che rappresentano" una porzione molto più grande della nostra immagine, e di nuovo, se i dati dell'immagine sono altamente ridondanti per i dati adiacenti, potremmo aver preservato il stesse informazioni e appreso una trasformazione equivalente, ma con meno livelli e meno parametri. Penso che entro i limiti di questa descrizione sia chiaro che, sebbene definibile come ricampionamento, qui stiamo effettuando il downsampling per ciascun kernel.


Frazionalmente o trasporre o "deconvoluzione":

Questo tipo è ancora convoluzione a cuore. La differenza è, ancora una volta, che ci sposteremo da un volume di input più piccolo a un volume di output più grande. OP non ha posto domande su cosa sia l'upsampling, quindi risparmierò un po 'di ampiezza, questa volta e andrò direttamente all'esempio pertinente.

Nel nostro caso 9x9 di prima, supponiamo di voler ora passare a 11x11. In questo caso, abbiamo due opzioni comuni: possiamo prendere un kernel 3x3 e con il passo 1 e spostarlo sul nostro input 3x3 con 2-padding in modo che il nostro primo passaggio sarà sulla regione [left-pad-2: 1, above-pad-2: 1] quindi [left-pad-1: 2, above-pad-2: 1] e così via e così via.

In alternativa, possiamo anche inserire un riempimento tra i dati di input e passare il kernel su di esso senza tanto riempimento. Chiaramente a volte ci occuperemo degli stessi stessi punti di input più di una volta per un singolo kernel; è qui che il termine "frazionato" sembra più ragionato. Penso che la seguente animazione (presa in prestito da qui e basata (credo) su questo lavoro aiuterà a chiarire le cose nonostante abbia dimensioni diverse. L'input è blu, gli zeri e il riempimento bianchi iniettati e l'output verde:

trasposto conv, input blu, output verde

Naturalmente, ci stiamo occupando di tutti i dati di input in contrapposizione alla dilatazione che può o meno ignorare del tutto alcune regioni. E dal momento che stiamo chiaramente finendo con più dati di quelli che abbiamo iniziato, "upsampling".

Vi incoraggio a leggere l'ottimo documento a cui mi sono collegato per una definizione e una spiegazione astratte e più solide della convoluzione del recepimento, nonché per sapere perché gli esempi condivisi sono forme illustrative ma in gran parte inadeguate per calcolare effettivamente la trasformazione rappresentata.


1
Per favore, tieni presente che non sono un esperto, solo qualcuno che recentemente ha dovuto distinguere questi concetti da solo. Per favore fatemi sapere se ci sono errori evidenti o semplificazioni eccessive che potrebbero compromettere la correttezza generale delle risposte. Grazie!
Doug Brummell,

Doug Brummel Wow spiega bene. Ho avuto la stessa idea. Mi piacerebbe conoscere la tua opinione sull'applicazione della convoluzione dilatata, come dovremmo iniziare ad applicarla nella CNN. Dovremmo prima seguire una normale convoluzione, quindi applicare una soluzione diluita? Un'altra cosa convoluzione dilatata può perdere informazioni se non azzeriamo il pad. Quindi penso che dovremmo applicare una convoluzione dilatata dopo pochi normali strati di convezione?
Shamane Siriwardhana,

Credo che l'idea standard sia quella di aumentare la quantità di dilatazione andando avanti, iniziando con filtri regolari non dilatati per l = 1, spostandosi verso i filtri 2 e poi 3 dilatati e così via man mano che avanzi nella profondità della tua rete. Ciò consente di garantire che tutti i dati in un livello vengano passati al successivo (incluso, soprattutto, nella rete stessa) consentendo comunque un downsampling esponenzialmente più veloce con ogni livello ma senza parametri di aumento. L'obiettivo è l'ampio campo ricettivo senza sacrificare l'inclusione dei dati. E sì, l'attenzione sull'imbottitura dovrebbe essere importante all'inizio.
Doug Brummell,

Vedi [questo documento] ( arxiv.org/pdf/1511.07122.pdf ), è menzionato sopra e ha fornito un bel po 'di ciò che ho letto sull'argomento.
Doug Brummell,

Un'altra cosa, quel documento afferma che non c'è perdita di risoluzione in uno schema di dilatazione così crescente ... Immagino di essere solo diffidente nei confronti di altre perdite che potrei coprire sotto "risoluzione". Naturalmente, se è possibile sostituire un gruppo di strati conv con un numero inferiore di strati dilatati e mantenere la precisione, eccezionale, si dovrebbe assolutamente. Ma per me (e dovrò tornare ai libri su questo), penso alle potenziali perdite nel caso in cui tu architetti fin dall'inizio con dilatazione ...
Doug Brummell,

5

Sebbene entrambi sembrino fare la stessa cosa, che sta campionando in alto un livello, c'è un chiaro margine tra di loro.

Per prima cosa parliamo di Convolution dilatato

Ho trovato questo bel blog sull'argomento sopra. Quindi, ho capito, è più come esplorare i punti dei dati di input in modo ampio . O aumentando il campo ricettivo dell'operazione di convoluzione.

Ecco un diagramma di convoluzione dilatato dal documento .

Immagine 3

Questa è una convoluzione più normale, ma aiuta a catturare un contesto sempre più globale dai pixel di input senza aumentare le dimensioni dei parametri. Questo può anche aiutare ad aumentare la dimensione spaziale dell'output. Ma la cosa principale qui è che aumenta esponenzialmente la dimensione del campo ricettivo con il numero di strati. Questo è molto comune nel campo dell'elaborazione del segnale.

Questo blog spiega davvero cosa c'è di nuovo nella convoluzione dilatata e come questo viene confrontato con la convoluzione normale.

Blog: Convoluzioni dilatate e Convoluzioni fattorizzate di Kronecker

Ora spiegherò cos'è la deconvoluzione

Questo si chiama convoluzione trasposta. Questo è uguale alla funzione che abbiamo usato per la convoluzione nella retro-propagazione.

Semplicemente nel backprop distribuiamo i gradienti da un neurone nella mappa delle caratteristiche di output a tutti gli elementi nei campi ricettivi, quindi riassumiamo anche i gradienti per cui coincidevano con gli stessi elementi ricettivi

Ecco una buona risorsa con le immagini .

Quindi l'idea di base è che la deconvoluzione funziona nello spazio di output. Non inserire pixel. Tenterà di creare quote spaziali più ampie nella mappa di output. Viene utilizzato nelle reti neurali completamente convoluzionali per la segmentazione semantica .

Quindi più di Deconvoluzione è un livello di up-sampling apprendibile.

Cerca di imparare come effettuare il campionamento durante la combinazione con la perdita finale

Questa è la migliore spiegazione che ho trovato per la deconvoluzione. Conferenza 13 in cs231, dalle 21.21 in poi .


ti dispiacerebbe approfondire come la convoluzione dilatata aiuta ad aumentare le dimensioni spaziali dell'output? Sembra richiedere ancora più imbottitura rispetto alle convoluzioni tradizionali, quindi peggio per quanto riguarda le dimensioni dell'output.
wlnirvana,
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.