L'operazione di convoluzione, per dirla in parole povere, è una combinazione del prodotto saggio di due matrici. Finché queste due matrici concordano nelle dimensioni, non dovrebbe esserci un problema e quindi posso capire la motivazione alla base della tua domanda.
A.1. Tuttavia, l'intento della convoluzione è codificare la matrice di dati di origine (intera immagine) in termini di filtro o kernel. Più specificamente, stiamo cercando di codificare i pixel nelle vicinanze dei pixel di ancoraggio / sorgente. Dai un'occhiata alla figura seguente:
In genere, consideriamo ogni pixel dell'immagine sorgente come pixel di ancoraggio / sorgente, ma non siamo obbligati a farlo. In effetti, non è raro includere un passo, dove in noi i pixel di ancoraggio / sorgente sono separati da un numero specifico di pixel.
Okay, quindi qual è il pixel sorgente? È il punto di ancoraggio in cui è centrato il kernel e stiamo codificando tutti i pixel adiacenti, incluso il pixel di ancoraggio / sorgente. Poiché il kernel ha una forma simmetrica (non simmetrica nei valori del kernel), esiste un numero uguale (n) di pixel su tutti i lati (4- connettività) del pixel di ancoraggio. Pertanto, qualunque sia questo numero di pixel, la lunghezza di ciascun lato del nostro kernel di forma simmetrica è 2 * n + 1 (ogni lato dell'ancora + il pixel di ancoraggio), e quindi i filtri / kernel hanno sempre dimensioni dispari.
E se decidessimo di rompere con la "tradizione" e di usare kernel asimmetrici? Subiresti errori di aliasing e quindi non lo facciamo. Consideriamo il pixel come l'entità più piccola, ovvero qui non esiste un concetto di sub-pixel.
A.2 Il problema al contorno viene affrontato usando approcci diversi: alcuni lo ignorano, altri zero lo bloccano, altri lo rispecchiano. Se non hai intenzione di calcolare un'operazione inversa, vale a dire la deconvoluzione, e non sei interessato alla ricostruzione perfetta dell'immagine originale, allora non ti interessa né la perdita di informazioni né l'iniezione di rumore a causa del problema di confine. In genere, l'operazione di pooling (pool medio o pool massimo) rimuoverà comunque i tuoi artefatti di confine. Quindi, sentiti libero di ignorare parte del tuo "campo di input", l'operazione di pooling lo farà per te.
-
Zen di convoluzione:
Nel dominio di elaborazione del segnale della vecchia scuola, quando un segnale di ingresso era contorto o passato attraverso un filtro, non c'era modo di giudicare in precedenza quali componenti della risposta convoluta / filtrata fossero rilevanti / informativi e quali no. Di conseguenza, l'obiettivo era preservare i componenti del segnale (tutti) in queste trasformazioni.
Questi componenti del segnale sono informazioni. Alcuni componenti sono più informativi di altri. L'unica ragione di ciò è che siamo interessati ad estrarre informazioni di livello superiore; Informazioni pertinenti ad alcune classi semantiche. Di conseguenza, i componenti del segnale che non forniscono le informazioni a cui siamo specificamente interessati possono essere eliminati. Pertanto, a differenza dei dogmi della vecchia scuola sulla convoluzione / filtro, siamo liberi di raggruppare / potare la risposta di convoluzione come ci sentiamo. Il modo in cui abbiamo voglia di farlo è quello di rimuovere rigorosamente tutti i componenti di dati che non stanno contribuendo a migliorare il nostro modello statistico.