Atualmente, estou fazendo o Udacity Deep Learning Tutorial. Na lição 3, eles falam sobre uma convolução 1x1. Essa convolução 1x1 é usada no Google Inception Module. Estou tendo problemas para entender o que é uma convolução 1x1.
Eu também vi este post de Yann Lecun.
Alguém poderia gentilmente me explicar isso?
Respostas:
De fato, no artigo do Google Inception, Indo mais fundo com convoluções , eles declaram (negrito é meu, não pelos autores originais):
Portanto, na arquitetura Inception, usamos os filtros convolucionais 1x1 para reduzir a dimensionalidade na dimensão do filtro. Como expliquei acima, essas camadas 1x1 conv podem ser usadas em geral para alterar a dimensionalidade do espaço do filtro (aumentar ou diminuir) e na arquitetura Inception vemos como esses filtros 1x1 podem ser eficazes na redução da dimensionalidade, explicitamente no espaço da dimensão do filtro , não o espaço da dimensão espacial.
Talvez haja outras interpretações dos filtros conv 1x1, mas eu prefiro essa explicação, especialmente no contexto da arquitetura do Google Inception.
fonte
Uma convolução 1x1 simplesmente mapeia um pixel de entrada com todos os seus canais para um pixel de saída, sem observar nada ao seu redor. É frequentemente usado para reduzir o número de canais de profundidade, pois muitas vezes é muito lento para multiplicar volumes com profundidades extremamente grandes.
O inferior é aproximadamente ~ 3.7x mais lento.
Teoricamente, a rede neural pode 'escolher' quais cores de entrada devem ser vistas usando isso, em vez de força bruta multiplicando tudo.
fonte
num_weights = in_depth x out_depth x kernel_size = 256x256x4x4
. No primeiro casonum_weights = 256x64x1x1+64x265x4x4=256x64x17
,. Tome a proporção e isso dá 256/17 ~ 3.7. Verifique a página 9 deste documento para obter uma visualização de como os pesos dos números estão relacionados à profundidade de entrada e profundidade de saída. arxiv.org/pdf/1603.07285.pdfhttps://datascience.stackexchange.com/questions/9175/how-do-subsequent-convolution-layers-work
Em particular, o Tipo 2.2 é a descrição correta de uma convolução lá.
Outra resposta útil:
https://ai.stackexchange.com/questions/5769/in-a-cnn-does-each-new-filter-have-different-weights-for-each-input-channel-or
Esta resposta explica como você tem um filtro separado para cada combinação de canais de entrada / saída . Após o cálculo de cada uma delas, os resultados são somados sobre o eixo do canal de entrada, deixando o número de valores do canal de saída .
Aqui está um vídeo que achei que me ajudou a entender como funciona uma convolução 1x1.
https://www.coursera.org/lecture/convolutional-neural-networks/networks-in-networks-and-1x1-convolutions-ZTb8x
Aqui estão as principais coisas que obtive disso:
fonte
Vou tentar explicar de forma mais intuitiva e resumida com ilustrações!
Um conv 1 * 1 (aka rede na rede )?
digamos que você insira é (n_H, n_W, n_c_prev). Você pode pensar em (1 * 1 * n_c_prev) como um único neurônio (uma rede totalmente conectada - por que N / w em N / w ) que está recebendo números (n_c_prev) na entrada multiplicando-os por (1 * 1 * n_c_prev ) e, em seguida, adicionando e obtendo ReLu e saída (n_H, n_W) e se você tiver vários filtros (n_c), a saída será (n_H, n_W, n_C).
Portanto, você pode usar a camada de pooling para reduzir as dimensões espaciais (n_H, n_W) e pode usar 1 * 1 conv para reduzir o n_c_prev (ou seja, o número de canais), o que economiza muitos cálculos. Por exemplo
Portanto, um take away
Você pode usar uma camada convolucional 1x1 para reduzir n_C, mas não n_H, n_W.
Você pode usar uma camada de pool para reduzir n_H, n_W e n_C.
Em outras palavras,
fonte
Mais uma idéia sobre redução de dimensionalidade no contexto de filtros 1x1:
Tomemos, por exemplo, uma camada 4096x8x8 fc7 da FCN. O que acontece se a próxima camada (chamada fc8) for 2048x8x8 com tamanho de filtro 1? O fc7 é muito profundo na rede, cada um dos seus recursos 4096 é semanticamente rico, mas cada neurônio (por exemplo, a imagem de entrada é 250x250x3) possui um grande campo receptivo. Em outras palavras, se um neurônio é muito ativo, sabemos que em algum lugar do seu campo semântico há uma característica correspondente presente.
Tomemos, por exemplo, um neurônio superior esquerdo em fc8 com um filtro 1x1. Ele se conecta a todos os 4096 neurônios / características apenas no mesmo campo receptivo (canto superior esquerdo da imagem), cada um dos quais é ativado por uma única característica. Alguns (vamos mesmo 500) deles são muito ativos. Se o neurônio resultante também for muito ativo, significa que provavelmente aprendeu a identificar 1 ou mais características nesse campo receptivo. Depois de fazer isso 2048 vezes para os neurônios mais à esquerda no fc8, alguns deles (por exemplo, 250) serão muito ativos, o que significa que eles 'coletaram' recursos do mesmo campo receptivo através do fc7 e muitos provavelmente mais do que 1.
Se você continuar reduzindo a dimensionalidade, um número decrescente de neurônios estará aprendendo um número crescente de características do mesmo campo receptivo. E como os parâmetros espaciais 8x8 permanecem os mesmos, não alteramos a 'visão' de cada neurônio, portanto, não diminuímos a aspereza espacial.
Você pode dar uma olhada em 'Redes totalmente convolucionais' de Long, Shelhamer e Darrel.
fonte
A operação matemática da convolução significa calcular o produto de duas funções (contínuas ou discretas) em todas as posições de mudança possíveis.
As aplicações de processamento de imagens de redes neurais - incluindo redes neurais convolucionais - foram revisadas em: [M. Egmont-Petersen, D. de Ridder, H. Handels. Processamento de imagem com redes neurais - uma revisão , Pattern Recognition , vol. 35, n ° 10, pp. 2279-2301, 2002].
fonte