Convolutional Neural Network (ConvNet/CNN) — 2

Henrique Peixoto Machado
4 min readMay 28, 2020

Como comentado no post anterior visão computacional foi revolucionário pelo os avanços das Convolutional Neural Network, mas o que seria isso?

Uma rede neural convolacinal (Convolutional Neural Network (ConvNet/CNN)) é um algoritimo de deep learning que analisa uma imagem, e aprende vários aspéctos sobre os objetos nela, sendo assim capaz de aprender de maneira autonoma caracteristicas que compõe um objeto.

Exemplo de uma estrutura de CNN

A CNN primeiramente vai aplicar um filtro convolucional na imagem (matrizes RGB), o filtro convulacional é uma matriz que possui valores que quando multiplicados com as matrizes da imagem ressaltam features (caracteristicas) que o algorítimo está procurando.

Para deixar mais claro, acho mais fácil explicar em um exemplo:

filtro convolacional:
1 0 1
1 0 1
1 0 1

Como pode perceber, após o filtro as linhas verticais da imagem ficam mais fortes, este filtro serve para ajudar o modelo a aprender quais linhas verticais fazem parte do objeto.

Antes de prosseguirmos vale a pena comentar sobre dois conceitos importantes numa CNN, que são stride e padding.

Stride nos diz quantas casa iremos andar para o lado e para baixo quando multiplicarmos as matrizes RGB pelo o filtro convulacional, por exemplo na imagem a seguir está usando um stride=1:

Stride=1 aplicando o filtro convulacional=101, 010, 101

padding é uma técnica usada para evitar a rápida diminuição das matrizes RGB quando multiplicadas pelo o filtro. Padding consiste em adicionarmos uma “borda” vazia as matrizes originais fazendo elas aumentarem de tamanho, como representado na imagem a seguir:

Nesta imagem podemos ver que o stride e padding são iguais a 1.

Padding é uma técnica que possibilitou o uso de ConvNets mais profundas, pois quando multiplicamos matrizes com matrizes menores tendemos a diminuir muito rápido o tamanho da matriz original, padding veio exatamente para resolver esse problema.

Vale a pena ressaltar que essas duas técnicas interferem diretamente no tamanho e capacidade computacional que será exigida pela sua CNN.

Agora voltando para a CNN, a primeira operação convulacional visa extrair o que chamamos de low-level features (características gerais), como linhas, cor, orientação do objeto da imagem. Após identificar as linhas gerais, ela passa a tentar identificar o que chamamos de high-level features, que são conjuntos mais complexos do objeto, e a cada camada vai aumentando a complexidade. Usando o rosto humano como exemplo, ficaria assim:

Como pode ver na figura A o modelo vai aprendendo as linhas gerais, na B já aparece caracteristicas como nariz, olhos e na terceira imagem já começa a identificar rostos.

Então apenas para deixar mais claro, aplicamos o filtro covulacional várias vezes a mesma imagem numa rede convulacional. Fazendo o link com o primeiro fluxo, como pode ser observado temos um filtro covulacional A, pegando as low-level features, depois vamos para o B aonde já vamos obter algumas high-level features e assim por diante.

Após aplicarmos vários filtros covulacionais e tivermos aprendido tanto high-level e low-level features da imagem que desejamos aprender, o modelo transforma todas essas matrizes em um vetor de apenas uma coluna:

Nesta coluna que iremos aplicar o foward e back propagation da rede neural, pegando todas as infomações que aprendemos com as camadas covulacionais e usando um classificador como por exemplo softmax para identificar o que estamos vendo.

Existe alguns detalhes sobre convnets, entretanto acredito que o mais importante neste post é criar uma intuição sobre como uma rede convulacional funciona, para maiores detalhes recomendo ler os artigos ou fazer alguns cursos sobre o assunto, a deeplearning.ai tem uns módulos incríveis sobre o assunto no corsera.

Agora na parte 3 vamos focar em código, chegou a hora de transformar toda essa teoria em python magic: https://medium.com/@h.peixoto.m/convnets-3-8706732ac8ad?sk=a89fa4a13ca4032ea37bd181ba30f073

--

--