Differenza tra "kernel" e "filtro" nella CNN


Risposte:


42

Nel contesto delle reti neurali convoluzionali, kernel = filter = feature detector.


Ecco una grande illustrazione del tutorial di deep learning di Stanford (anche ben spiegato da Denny Britz ).

enter image description here

Il filtro è la finestra scorrevole gialla e il suo valore è:

[101010101]

2
Esiste un nome specifico per il filtro? Come una "sfocatura" o un "rilevamento bordi"
Pratik Khadloya,

2
@PratikKhadloya no, quei nomi vengono dati soggettivamente dai ricercatori in base a ciò che il filtro sembra rilevare.
Shadowtalker,

1
@Frank Dernoncourt secondo questo link versodatascience.com/… sono diversi quando abbiamo un paio di canali. in realtà quando ci sono più canali Ogni filtro in realtà è una raccolta di kernel, con un kernel per ogni singolo canale di input al layer e ogni kernel è unico. Sarei felice di avere la tua idea
sariii

6

Una mappa caratteristica è la stessa di un filtro o "kernel" in questo particolare contesto. I pesi del filtro determinano quali caratteristiche specifiche vengono rilevate.

Quindi, ad esempio, Franck ha fornito un ottimo aspetto visivo. Si noti che il suo filtro / rilevatore di funzioni ha x1 lungo gli elementi diagonali e x0 lungo tutti gli altri elementi. Questa ponderazione del kernel rileverebbe quindi pixel nell'immagine che hanno un valore di 1 lungo le diagonali dell'immagine.

Si noti che la risultante funzione convoluta mostra valori di 4 ovunque l'immagine abbia un "1" lungo i valori diagonali del filtro 3x3 (rilevando così il filtro in quella specifica sezione 3x3 dell'immagine) e valori inferiori di 2 nelle aree di l'immagine in cui quel filtro non corrispondeva così fortemente.


5

Che ne dici di usare il termine "kernel" per una matrice 2D di pesi e il termine "filtro" per la struttura 3D di più kernel accatastati insieme? La dimensione di un filtro èK×K×C(assumendo kernel quadrati). Ognuno deiC i kernel che compongono un filtro saranno contorti con uno dei C canali dell'ingresso (dimensioni dell'ingresso Hin×Hin×C, for example a 32×32 RGB image). It makes sense to use a different word to describe a 2D array of weights and a different for the 3D structure of the weights, since the multiplication happens between 2D arrays and then the results are summed to calculate the 3D operation.

Currently there is a problem with the nomenclature in this field. There are many terms describing the same thing and even terms used interchangeably for different concepts! Take as an example the terminology used to describe the output of a convolution layer: feature maps, channels, activations, tensors, planes, etc...

Based on wikipedia, "In image processing, a kernel, is a small matrix".

Based on wikipedia, "A matrix is a rectangular array arranged in rows and columns".

If a kernel is a rectangular array, then it cannot be the 3D structure of the weights, which in general is of k1×k2×C dimensions.

Well, I cant argue that this is the best terminology, but it is better than just use the terms "kernel" and "filter" interchangeably. Moreover, we do need a word to describe the concept of the distinct 2D arrays that form a filter.


1

The existing answers are excellent and comprehensively answer the question. Just want to add that filters in Convolutional networks are shared across the entire image (i.e., the input is convolved with the filter, as visualized in Franck's answer). The receptive field of a particular neuron are all input units that affect the neuron in question. The receptive field of a neuron in a Convolutional network is generally smaller than the receptive field of a neuron in a Dense network courtesy of shared filters(also called parameter sharing).

Parameter sharing confers a certain benefit on CNNs, namely a property termed equivariance to translation. This is to say that if the input is perturbed or translated, the output is also modified in the same manner. Ian Goodfellow provides a great example in the Deep Learning Book regarding how practitioners can capitalize on equivariance in CNNs:

When processing time-series data, this means that convolution produces a sort of timeline that shows when different features appear in the input.If we move an event later in time in the input, the exact same representation of it will appear in the output, just later. Similarly with images, convolution creates a 2-D map of where certain features appear in the input. If we move the object in the input, its representation will move the same amount in the output. This is useful for when we know that some function of a small number of neighboring pixels is useful when applied to multiple input locations. For example, when processing images, it is useful to detect edges in the first layer of a convolutional network. The same edges appear more or less everywhere in the image, so it is practical to share parameters across the entire image.

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.