Camada convolucional
Em deep learning, uma rede neural convolucional (CNN ou ConvNet) é uma classe de redes neurais profundas, normalmente usadas para reconhecer padrões presentes em imagens, mas também para análise de dados espaciais, visão computacional, processamento de linguagem natural, processamento de sinais e várias outras finalidades. A arquitetura de uma rede convolucional se assemelha ao padrão de conectividade dos neurônios no cérebro humano e foi inspirada pela organização do córtex visual. Esse tipo específico de rede neural artificial recebe o nome de uma das operações mais importantes da rede: convolução.
O que é uma convolução?
Convolução é um procedimento ordenado em que duas fontes de informação estão interligadas; é uma operação que transforma uma função em outra. As convoluções são usadas há muito tempo, normalmente no processamento de imagens para desfocar e tornar as imagens mais nítidas, mas também para realizar outras operações (por exemplo, melhorar bordas e fazer relevo). As CNNs impõem um padrão de conectividade local entre neurônios de camadas adjacentes. As CNNs usam filtros (também conhecidos como kernels) para detectar quais características, como bordas, estão presentes em uma imagem. Há quatro operações principais em uma CNN:
- Convolução
- Não linearidade (ReLU)
- Agrupamento ou subamostragem
- Classificação (camada totalmente conectada)
A primeira camada de uma rede neural convolucional é sempre uma camada convolucional. As camadas convolucionais aplicam uma operação de convolução na entrada, passando o resultado para a próxima camada. Uma convolução converte todos os pixels em seu campo receptivo em um único valor. Por exemplo, ao aplicar uma convolução a uma imagem, você reduz o tamanho da imagem e também reúne todas as informações no campo em um único pixel. A saída final da camada convolucional é um vetor. Com base no tipo de problema que precisamos resolver e no tipo de recursos que queremos aprender, podemos usar diferentes tipos de convolução.
Camada convolucional 2D
O tipo mais comum de convolução usado é a camada de convolução 2D, geralmente abreviada como conv2d. Um filtro ou kernel em uma camada conv2d “desliza” sobre os dados de entrada 2D, realizando uma multiplicação elemento a elemento. Como resultado, ele resume os resultados em um único pixel de saída. O kernel executa a mesma operação para cada local sobre o qual deslizar, transformando uma matriz 2D de recursos em uma diferente matriz 2D de recursos.
Convolução dilatada ou atrous
Esta operação expande o tamanho da janela sem aumentar o número de pesos inserindo valores zero em kernels de convolução. As convoluções dilatadas ou atrous podem ser usadas em aplicações em tempo real e em aplicações em que a potência de processamento é menor, pois os requisitos de RAM são menos intensos.
Convoluções separáveis
Há dois tipos principais de convolução separável: convoluções separáveis espaciais e convoluções separáveis em profundidade. A convolução separável espacial lida principalmente com as dimensões espaciais de uma imagem e do kernel: largura e altura. Em comparação com as convoluções separáveis espaciais, as convoluções separáveis em profundidade funcionam com kernels que não podem ser "fatorados" em dois kernels menores. Como resultado, elas são usadas com mais frequência.
Convoluções transpostas
Esse tipo de convolução também é conhecido como deconvoluções ou convoluções fracionadas. Uma camada convolucional transposta carrega uma convolução regular, mas reverte sua transformação espacial.