Conhecendo a visão do computador: Redes Neurais Convolucionais

Source: Deep Learning on Medium


Entenda um pouco de um dos principais algoritmos para se trabalhar com dados de imagens e até vídeos.

Introdução

Em um mundo em que se fala muito sobre Deep Learning e Inteligência Artificial, uma das áreas que pode chamar a atenção é a aplicação desses algoritmos em imagens e vídeos.

Um dos algoritmos utilizados para trabalho com imagens é a Rede Neural Convolucional.

O que são?

Redes Neurais Convolucionais (CNNs — Convolutional Neural Networks) são tipos de Redes Neurais estruturadas para receber imagens como entrada. As imagens, quando interpretadas por um computador, nada mais são do que valores armazenados em uma matriz.

Isso dá uma vantagem às CNNs de manter as características espaciais de uma imagem, como a altura, largura e até mesmo as cores.

A arquitetura de uma CNN difere um pouco de uma Rede Neural tradicional (um Multi-Layer Perceptron). Caso você não esteja muito familiarizado com uma Rede Neural tradicional, recomendo familiarizar-se um pouco com ela primeiro.

Arquitetura de uma CNN

Como dito anteriormente, a arquitetura de uma CNN difere um pouco de uma rede tradicional.

Além da estrutura já conhecida de uma MLP para realizar uma classificação de uma imagem, como por exemplo classificar uma imagem em relação à presença de cachorros ou gatos, uma CNN ter um processo de extração de características da imagem, um feature extractor.

Essa etapa de extração de características tem como principal funcionamento a aplicação de filtros na imagem de entrada. A operação realizada por esses filtros é uma convolução, que dá nome à rede.

Arquitetura de uma CNN.

Tentarei explicar melhor o que está acontecendo na imagem acima.

Camada Convolucional

A camada convolucional é o resultado da aplicação dos filtros mencionados anteriormente.

Um filtro, também chamado de kernel, também é uma matriz com valores. Seus valores dependem do objetivo desse filtro. Os filtros mais conhecidos são filtros para detecção de bordas (edge detection), desfoque (blur), nitidez (sharpen), etc.

Fonte: https://en.wikipedia.org/wiki/Kernel_(image_processing)

Os exemplos acima mostram diferentes filtros 3×3. Isso pode ser considerado seu campo de recepção.

Esses filtros se comportam como uma pequena janela ou região que realiza operações ao longo da imagem. Uma analogia comum é a luz de uma lanterna passando ao longo da imagem, região à região.

Em cada passo, cada elemento do filtro é multiplicado pelo elemento de mesma posição na região em que o filtro está sendo aplicado naquele instante. No fim, soma-se os resultados dessas multiplicações para ter um único valor como saída. Esse valor será o pixel correspondente na imagem filtrada.

Uma figura pode demonstrar melhor esses processo:

Operação de convolução do filtro na imagem.

O filtro vai “caminhando” ao longo da imagem realizando essa mesma operação. O resultado é uma imagem filtrada.

Como dito anteriormente, o objetivo da aplicação desses filtros é extrair características importantes na imagem. Porém, quando uma CNN é inicializada, os valores dos filtros são inicializados aleatoriamente, ou seja, eles não extraem nada de útil primeiramente. O objetivo de aplicar isso em uma rede neural é justamente que o computador aprenda por si só os valores ideais dos filtros. Isso significa que a rede aprende sozinha quais características da imagem são importantes para realizar a tarefa que lhe foi designada.

Uma única camada convolucional é constituída de diversos filtros. Ao adicionar mais camadas (tornar a rede mais profunda), a ideia é que a rede realize a combinação de características extraídas por camadas anteriores. Por exemplo, se a primeira camada aprendeu a extrair bordas em diferentes orientações, a camada seguinte combina essas bordas para aprender a detectar formas mais complexas, como curvas e cantos.

Quanto mais profundo, maior é a capacidade da rede extrair características complexas.

Fonte: http://web.eecs.umich.edu/~honglak/icml09-ConvolutionalDeepBeliefNetworks.pdf

Volumes

Um conceito importante no entendimento de uma CNN é o trabalho com volumes. Na imagem da arquitetura de uma CNN, é possível notar que as camadas foram representadas por volumes.

Uma imagem colorida pode ser considerada um volume, em que sua altura e largura correspondem à altura e à largura da imagem e sua profundidade corresponde ao número de canais de cor dessa imagem. Por ser colorida, normalmente refere-se aos canais de cor RGB (Red, Green, Blue), ou seja, essa imagem teria 3 canais e consequentemente o volume tem profundidade 3.

Uma imagem preto e branco tem profundidade 1, já que seu único canal de cor tem valores na escala de cinza.

Ao aplicar os filtros, os mesmos devem ter profundidade igual ao que recebem como entrada. Filtros aplicados em imagens coloridas devem ter profundidade 3. Porém, em uma CNN, soma-se os resultados de cada canal, resultando em um canal só.

O resultado da aplicação de todos os filtros são diversos canais, que quando organizados em uma camada, se tornam um novo volume com profundidade igual ao número de filtros aplicados (um canal resultante de cada filtro). Agora esse volume será a entrada da próxima camada, o que significa que os filtros da próxima camada devem ter essa mesma profundidade.

Por isso as camadas foram representadas como volumes.

Stride e Padding

Na imagem de demonstração da operação de convolução, percebe-se que a imagem filtrada (a saída 5×5) é menor do que a imagem de entrada (7×7). Isso se dá pelo fato de que o campo de recepção do filtro (3×3) só pode tomar 5 posições dentro da janela 7×7 da imagem em cada direção sem que o filtro acabe saindo para fora da imagem. Neste caso, o passo do filtro foi de 1 pixel por vez. Ele teve stride 1.

Caso tivesse sido utilizado um stride 2, o filtro realizaria a operação a cada 2 pixels. Esse seria seu passo, o que tornaria o tamanho da imagem filtrada ainda menor, pois o filtro cairia em 3 posições em cada direção dentro da imagem 7×7.

Uma das maneiras de ter a saída do mesmo tamanho da imagem de entrada é o uso de padding. O método mais comum é o Zero-padding, que adiciona pixels de valor 0 (preto) ao redor da imagem. Isso aumenta o tamanho da imagem de entrada, o que possibilita mais posições possíveis do filtro e aumenta o tamanho da saída.

Zero-padding.

Pooling — Sub-amostragem

A camada pooling é utilizada após camadas convolucionais. Ela reduz as dimensões das imagens, mantendo a profundidade do volume (número de canais).

A forma mais comum é Max-pooling. Os conceitos de stride e campo de recepção também são aplicados aqui. O processo consiste em carregar à frente o maior valor dentro do campo de recepção.

Esse processo tende a tornar a CNN invariante a transformações geométricas, fazendo com que a rede seja capaz de dizer se há um objeto naquela imagem independentemente de onde ele esteja posicionado. Além disso, reduz consideravelmente o custo computacional da rede.

Flatten

Após diversas camadas convolucionais e camadas pooling, as imagens de saída da última camada são transformadas de um volume para uma camada flat 1D, ou seja um vetor de características. A partir daqui, a CNN se comporta como uma rede neural tradicional ou MLP.

As camadas densas (totalmente conectadas) são conectados por pesos. Por fim, a camada de saída da rede será a previsão ou classificação. Se for uma classificação binária, poderá ser um número indicando a probabilidade de presença do objeto em questão (ex.: probabilidade de na imagem conter um pedestre). Se o objetivo for classificar entre diversas classes, a saída será um vetor com a distribuição de probabilidades para cada classe. O processo funciona como um MLP.

Conclusão

Neste post foi feita uma introdução aos conceitos e processos envolvidos em um dos algoritmos mais utilizados para proporcionar visão às máquinas, as Redes Neurais Convolucionais.

O objetivo é que a partir daqui você possa entender melhor os funcionamentos caso queira buscar implementações em código ou estudar mais a fundo o assunto.

Caminhamos para um futuro em que cada vez mais esse tipo de tecnologia será utilizada e espero que, conhecendo bem do assunto ou não, tenha tido uma boa leitura.

Obrigado!