Diferença entre "kernel" e "filter" na CNN

37

Qual é a diferença entre os termos "kernel" e "filter" no contexto de redes neurais convolucionais?

ryguy
fonte
5
Eles são os mesmos! Filtro ou kernel é um grupo simples de pesos compartilhados em todo o espaço de entrada.
Yasin.yazici

Respostas:

42

No contexto de redes neurais convolucionais, kernel = filter = feature detector.


Aqui está uma ótima ilustração do tutorial de aprendizado profundo de Stanford (também bem explicado por Denny Britz ).

insira a descrição da imagem aqui

O filtro é a janela deslizante amarela e seu valor é:

[1 10 01 10 01 10 01 10 01 1]
Franck Dernoncourt
fonte
2
Existe um nome específico para o filtro? Como um "Blur" ou "Edge detect"
Pratik Khadloya
2
@PratikKhadloya não, esses nomes são dados subjetivamente pelos pesquisadores, com base no que o filtro parece estar detectando.
shadowtalker
11
@Frank Dernoncourt, de acordo com este link paradatascience.com/… , são diferentes quando temos alguns canais. na verdade, quando há vários canais. Cada filtro passa a ser uma coleção de kernels, com um kernel para cada canal de entrada da camada e cada kernel sendo único. Eu ficaria feliz de ter a sua ideia
sariii
6

Um mapa de recursos é igual a um filtro ou "kernel" neste contexto específico. Os pesos do filtro determinam quais recursos específicos são detectados.

Por exemplo, Franck forneceu um ótimo visual. Observe que o filtro / detector de características tem x1 ao longo dos elementos diagonais e x0 ao longo de todos os outros elementos. Dessa forma, a ponderação do kernel detectaria pixels na imagem com valor 1 ao longo das diagonais da imagem.

Observe que o recurso envolvido resultante mostra valores de 4 onde a imagem tem um "1" ao longo dos valores diagonais do filtro 3x3 (detectando o filtro nessa seção específica 3x3 da imagem) e valores mais baixos de 2 nas áreas de a imagem em que esse filtro não foi tão forte.

JohnnyUtah
fonte
5

k×k×CCCHEun×HEun×C, por exemplo, um 32.×32.Imagem RGB). Faz sentido usar uma palavra diferente para descrever uma matriz de pesos 2D e uma estrutura diferente para os pesos 3D, pois a multiplicação ocorre entre as matrizes 2D e os resultados são somados para calcular a operação 3D.

Atualmente, há um problema com a nomenclatura nesse campo. Existem muitos termos que descrevem a mesma coisa e até termos usados ​​alternadamente para conceitos diferentes! Tomemos como exemplo a terminologia usada para descrever a saída de uma camada de convolução: mapas de características, canais, ativações, tensores, planos, etc.

Baseado na wikipedia, "No processamento de imagens, um kernel, é uma pequena matriz".

Com base na Wikipedia, "Uma matriz é uma matriz retangular organizada em linhas e colunas".

Se um núcleo é uma matriz retangular, não pode ser a estrutura 3D dos pesos, que geralmente é de k1 1×k2×C dimensões.

Bem, não posso argumentar que essa seja a melhor terminologia, mas é melhor do que usar os termos "kernel" e "filter" de forma intercambiável. Além disso, nós precisamos de uma palavra para descrever o conceito das diferentes matrizes 2D que formam um filtro.

Jim
fonte
1

As respostas existentes são excelentes e respondem de maneira abrangente à pergunta. Só quero acrescentar que os filtros nas redes convolucionais são compartilhados por toda a imagem (ou seja, a entrada é convoluída com o filtro, conforme visualizado na resposta de Franck). o campo receptivo de um neurônio em particular são todas as unidades de entrada que afetam o neurônio em questão. O campo receptivo de um neurônio em uma rede convolucional é geralmente menor que o campo receptivo de um neurônio em uma rede densa, cortesia de filtros compartilhados (também chamados de compartilhamento de parâmetros ).

O compartilhamento de parâmetros confere um certo benefício às CNNs, ou seja, uma propriedade denominada equivalência à conversão . Isso significa que se a entrada for perturbada ou traduzida, a saída também será modificada da mesma maneira. Ian Goodfellow fornece um ótimo exemplo no Deep Learning Book sobre como os profissionais podem capitalizar a equivalência nas CNNs:

Ao processar dados de séries temporais, isso significa que a convolução produz um tipo de linha do tempo que mostra quando diferentes recursos aparecem na entrada. Se movermos um evento posteriormente na entrada, a mesma representação exata aparecerá na saída, só mais tarde. Da mesma forma que as imagens, a convolução cria um mapa em 2-D de onde certos recursos aparecem na entrada. Se movermos o objeto na entrada, sua representação moverá a mesma quantidade na saída. Isso é útil quando sabemos que alguma função de um pequeno número de pixels vizinhos é útil quando aplicada a vários locais de entrada. Por exemplo, ao processar imagens, é útil detectar arestas na primeira camada de uma rede convolucional. As mesmas arestas aparecem mais ou menos em toda parte da imagem; portanto, é prático compartilhar parâmetros em toda a imagem.

Pranav Vempati
fonte