Prática de ML: classificação de imagens

Introdução às redes neurais convolucionais

Uma descoberta na criação de modelos para classificação de imagens veio com a descoberta de que uma rede neural convolucional (CNN, na sigla em inglês) poderia ser usada para extrair progressivamente representações de nível superior e superior do conteúdo de imagem. Em vez de pré-processar os dados para derivar recursos como texturas e formas, uma CNN considera apenas os dados brutos de pixel das imagens como entrada e "aprendeu" como extrair esses recursos e inferir o objeto que eles constituem.

Para começar, a CNN recebe um mapa de recursos de entrada: uma matriz tridimensional em que o tamanho das duas primeiras dimensões corresponde ao comprimento e à largura das imagens em pixels. O tamanho da terceira dimensão é 3 (correspondente aos três canais de uma imagem colorida: vermelho, verde e azul). A CNN consiste em uma pilha de módulos, cada uma executando três operações.

1. Convolução

Uma convolução extrai blocos do mapa de recursos de entrada e aplica filtros a eles para processar novos atributos, produzindo um mapa de recursos de saída ou um recurso Envolvido, que pode ter um tamanho e uma profundidade diferentes do mapa de recursos de entrada. As convoluções são definidas por dois parâmetros:

  • Tamanho dos blocos extraídos (geralmente 3 x 3 ou 5 x 5 pixels).
  • Profundidade do mapa de recursos de saída, que corresponde ao número de filtros aplicados.

Durante uma convolução, os filtros (matrizes do mesmo tamanho do tamanho do bloco) deslizam sobre a grade do mapa de recursos de entrada horizontalmente e verticalmente, um pixel por vez, extraindo cada bloco correspondente (veja a Figura 3).

Uma convolução em 3x3 em um mapa de recursos de 4x4 Figura 3. Uma convolução 3x3 de profundidade 1 realizada em um mapa de recursos de entrada 5x5, também de profundidade 1 Existem nove locais possíveis de 3x3 para extrair blocos do mapa de recursos de 5x5. Portanto, essa convolução produz um mapa de recursos de saída de 3x3.

Para cada par de bloco de filtro, a CNN realiza multiplicação de elementos da matriz de filtro e da matriz de blocos e, em seguida, soma todos os elementos da matriz resultante para receber um único valor. Cada um desses valores resultantes para cada par de bloco de filtro é gerado na matriz de recursos complexos. Consulte as figuras 4a e 4b.

Um mapa de recursos 5 x 5 e uma convolução 3 x 3 Figura 4a. Esquerda: mapa de recursos de entrada 5x5 (profundidade 1). Direita: uma convolução 3x3 (profundidade 1).

Figura 4b. Esquerda: a convolução 3x3 é realizada no mapa de recursos de entrada 5x5. Direita: o recurso evoluído resultante. Clique em um valor no mapa de recursos de saída para ver como ele foi calculado.

Durante o treinamento, a CNN "learn" os valores ideais para as matrizes de filtro que permitem extrair atributos significativos (texturas, bordas, formas) do mapa de atributos de entrada. À medida que o número de filtros (profundidade do mapa de recursos de saída) aplicados à entrada aumenta, o mesmo acontece com o número de recursos que a CNN pode extrair. A desvantagem é que os filtros compõem a maioria dos recursos gastos pela CNN. Portanto, o tempo de treinamento também aumenta à medida que mais filtros são adicionados. Além disso, cada filtro adicionado à rede fornece menos valor incremental que o anterior. Portanto, os engenheiros tentam criar redes que usem o número mínimo de filtros necessários para extrair os recursos necessários para a classificação de imagem precisa.

2. ReLU

Após cada operação de convolução, a CNN aplica uma transformação de unidade linear retificada (ReLU, na sigla em inglês) ao atributo evoluído para introduzir não linearidade no modelo. A função ReLU, \(F(x)=max(0,x)\), retorna x para todos os valores de x > 0 e retorna 0 para todos os valores de x ≤ 0.

3. Pool

Após a ReLU chegar a uma etapa de pooling, em que a CNN diminui o recurso em desenvolvimento para economizar tempo de processamento, reduzindo o número de dimensões do mapa de recursos, preservando as informações mais importantes dos recursos. Um algoritmo comum usado para esse processo é chamado de pool máximo.

O pool máximo funciona de maneira semelhante à convolução. Vamos deslizar sobre o mapa de recursos e extrair blocos de um tamanho específico. Para cada bloco, o valor máximo é gerado em um novo mapa de atributos, e todos os outros valores são descartados. As operações de pool máximo têm dois parâmetros:

  • Tamanho do filtro de pool máximo (geralmente 2 x 2 pixels)
  • Passo: a distância, em pixels, que separa cada bloco extraído. Diferentemente da convolução, em que os filtros deslizam sobre os pixels do mapa de recursos pixel por pixel, o pool máximo determina os locais em que cada bloco é extraído. Para um filtro 2 x 2, um passo de 2 especifica que a operação de pool máxima extrairá todos os blocos 2 x 2 não sobrepostos do mapa de recursos (consulte a Figura 5).

Animação do pool máximo em um mapa de recursos 4x4 com um filtro 2x2 e passada de 2

Figura 5. Esquerda: pool máximo executado em um mapa de recursos 4x4 com um filtro 2x2 e um ritmo de 2 Direita: a saída da operação de pool máximo. O mapa de recursos resultante agora é 2x2, preservando apenas os valores máximos de cada bloco.

Camadas totalmente conectadas

No final de uma rede neural convolucional, há uma ou mais camadas totalmente conectadas, quando duas camadas estão totalmente conectadas, em que cada nó da primeira é conectado a todos os nós da segunda. A função deles é realizar a classificação com base nos atributos extraídos pelas convoluções. Normalmente, a camada totalmente conectada final contém uma função de ativação softmax, que gera um valor de probabilidade de 0 a 1 para cada um dos rótulos de classificação que o modelo está tentando prever.

A Figura 6 ilustra a estrutura de ponta a ponta de uma rede neural convolucional.

Diagrama completo de uma rede neural convolucional, mostrando entrada, dois módulos de convolução e duas camadas totalmente conectadas para classificação

Figura 6. A CNN mostrada aqui contém dois módulos de convolução (convolução + ReLU + pooling) para extração de atributos e duas camadas totalmente conectadas para classificação. Outras CNNs podem conter números maiores ou menores de módulos convolucionais e camadas maiores ou menos conectadas. Os engenheiros costumam fazer experimentos para descobrir a configuração que produz os melhores resultados para o modelo.