CNNs: Uncovering Visual Patterns with Convolutions
- Published on
- Published on
- /6 mins read/---
CNNs: Uncovering Visual Patterns with Convolutions
As Redes Neurais Convolucionais (Convolutional Neural Networks - CNNs) são uma classe de redes neurais profundas, inspiradas no córtex visual humano, que se tornaram a ferramenta dominante em Visão Computacional. Elas são particularmente eficazes no processamento de dados que possuem uma topologia de grade, como imagens (grades 2D de pixels) e vídeos (grades 3D - altura, largura, tempo).
A ideia central por trás das CNNs é que elas aprendem hierarquias de características (features). Camadas iniciais detectam características simples como bordas e cantos, camadas intermediárias combinam essas características para detectar formas e texturas, e camadas mais profundas reconhecem objetos complexos.
Why CNNs for Images? The Problem with Dense Networks
Se usássemos uma rede neural totalmente conectada (densa) padrão para uma imagem, teríamos problemas:
Número Massivo de Parâmetros: Uma imagem pequena de 100x100 pixels colorida (3 canais) tem 30.000 pixels. Conectar isso a uma camada oculta com 1000 neurônios já exigiria 30 milhões de pesos só na primeira camada.
Perda da Estrutura Espacial: Redes densas achatam a imagem em um vetor longo, perdendo a informação crucial sobre a disposição espacial dos pixels.
CNNs resolvem isso com duas ideias principais: localidade (filtros pequenos) e compartilhamento de parâmetros (o mesmo filtro é aplicado em toda a imagem).
Key Components of a CNN
1. Convolutional Layer
Este é o bloco de construção fundamental. Em vez de conectar cada pixel a cada neurônio, usamos filtros (ou kernels), que são pequenas matrizes de pesos.
- Filtro/Kernel: Uma pequena janela (ex: 3x3 ou 5x5 pixels) que desliza sobre a imagem de entrada.
- Operação de Convolução: Em cada posição, o filtro realiza uma multiplicação elemento a elemento com a porção da imagem, e os resultados são somados (mais um bias) para produzir um único valor na saída.
- Mapa de Características (Feature Map): A saída da aplicação de um filtro sobre toda a imagem. Cada filtro detecta um padrão específico (bordas, curvas, texturas).
- Stride (Passo): O número de pixels que o filtro se move a cada passo. Stride > 1 reduz o tamanho do mapa de características.
- Padding (Preenchimento): Adicionar pixels (geralmente zeros) ao redor da borda da imagem para controlar o tamanho da saída.
graph TD
subgraph Convolution Operation (Single Filter)
direction LR
Input(Input Image Patch<br/>3x3) -- Element-wise Multiply --> Kernel(Filter/Kernel<br/>3x3);
Kernel --> Sum(Sum Products + Bias);
Sum --> OutputPixel(Single Pixel in<br/>Feature Map);
end
InputImage(Input Image) --> SlidingWindow;
Filter(Filter) --> SlidingWindow{Filter Slides Over Image};
SlidingWindow --> FeatureMap(Output Feature Map);
style InputImage fill:#f9f
style Filter fill:#9cf
style FeatureMap fill:#9fc2. Activation Function
Após cada operação de convolução, uma função de ativação não-linear é aplicada, geralmente a ReLU (Rectified Linear Unit): f(x) = max(0, x).
- Introduz não-linearidade na rede, permitindo aprender funções mais complexas.
- ReLU é computacionalmente eficiente e ajuda a mitigar o problema do desaparecimento do gradiente.
3. Pooling Layer
- Propósito: Reduzir progressivamente a dimensionalidade espacial dos mapas de características, diminuindo a quantidade de parâmetros e tornando as representações mais robustas a translações.
- Max Pooling: Seleciona o valor máximo dentro de uma janela (ex: 2x2). É o mais comum.
- Average Pooling: Calcula a média dos valores dentro da janela.
graph TD
subgraph Max Pooling (2x2 Window, Stride 2)
InputMap("Input Feature Map\n[1 2]\n[8 4]") --> MaxPoolOp{Select Max};
MaxPoolOp --> OutputVal(Output Value: 8);
InputMap2("[5 3]\n[1 7]") --> MaxPoolOp2{Select Max};
MaxPoolOp2 --> OutputVal2(Output Value: 7);
InputMap3("[0 6]\n[2 9]") --> MaxPoolOp3{Select Max};
MaxPoolOp3 --> OutputVal3(Output Value: 9);
InputMap4("[3 1]\n[5 2]") --> MaxPoolOp4{Select Max};
MaxPoolOp4 --> OutputVal4(Output Value: 5);
end
FeatureMapIn(Input Feature Map<br/>4x4) --> PoolingWindow{Pooling Window Slides};
PoolingWindow --> PooledMap(Pooled Feature Map<br/>2x2);
style FeatureMapIn fill:#9fc
style PooledMap fill:#ccf4. Fully Connected Layer
Após várias camadas convolucionais e de pooling, os mapas de características são achatados (flattened) em um vetor longo. Esse vetor é alimentado em uma ou mais camadas totalmente conectadas que realizam a classificação final, geralmente com Softmax para produzir probabilidades de classe.
Typical CNN Architecture
Uma CNN típica consiste em empilhar essas camadas:
INPUT -> [[CONV -> RELU] * N -> POOL?] * M -> [FC -> RELU] * K -> FC (Softmax)
graph TD
Input(Image Input) --> C1(Conv + ReLU);
C1 --> P1(Max Pooling);
P1 --> C2(Conv + ReLU);
C2 --> P2(Max Pooling);
P2 --> Flatten(Flatten);
Flatten --> FC1(Fully Connected + ReLU);
FC1 --> FC2(Fully Connected - Output Layer<br/>Softmax);
FC2 --> Output(Class Probabilities<br/>Ex: Gato, Cachorro);
style Input fill:#f9f
style C1 fill:#9cf; style C2 fill:#9cf
style P1 fill:#facc; style P2 fill:#facc
style FC1 fill:#9fc; style FC2 fill:#9fc
style Output fill:#ccfExample: Image Classification (Cat vs. Dog)
- Entrada: Uma imagem de um gato ou cachorro.
- Camadas Convolucionais Iniciais: Filtros detectam características de baixo nível como bordas, texturas (pelos), cantos.
- Camadas de Pooling: Reduzem o tamanho, mantendo as informações mais salientes.
- Camadas Convolucionais Profundas: Combinam características simples para detectar partes mais complexas: olhos, focinhos, orelhas pontudas (gato?), orelhas caídas (cachorro?).
- Camada Totalmente Conectada: Aprende a mapear o vetor de características para as classes.
- Saída: Uma probabilidade para cada classe (ex: Gato: 0.95, Cachorro: 0.05).
Advantages
- Compartilhamento de Parâmetros: Reduz drasticamente o número de parâmetros em comparação com redes densas.
- Invariância a Translações: As CNNs são robustas a pequenas mudanças na posição do objeto na imagem.
- Aprendizado de Hierarquia de Características: Capturam automaticamente características relevantes em diferentes níveis de abstração.
- Desempenho State-of-the-Art: Dominam tarefas de visão computacional (classificação, detecção de objetos, segmentação).
Disadvantages
- Requerem Muitos Dados: Especialmente para tarefas complexas, precisam de grandes datasets rotulados.
- Sensibilidade a Rotação e Escala: A invariância não é perfeita; podem ter dificuldades com orientações ou tamanhos muito diferentes dos vistos no treinamento.
- Não Ideais para Dados Sequenciais: Não são projetadas nativamente para capturar dependências temporais como as RNNs.
- Interpretabilidade: Entender exatamente o que uma CNN aprendeu pode ser desafiador.
Beyond 2D Images
- CNNs 1D: Usadas para dados sequenciais como sinais de áudio, texto, séries temporais.
- CNNs 3D: Usadas para dados volumétricos como vídeos ou imagens médicas.
Conclusion
As CNNs revolucionaram a visão computacional ao introduzir uma arquitetura que processa eficientemente dados em grade e aprende automaticamente hierarquias de características espaciais. Sua estrutura com camadas convolucionais, de ativação e de pooling, seguida por camadas totalmente conectadas, provou ser extremamente poderosa para extrair padrões significativos de dados visuais e outros tipos de dados estruturados.
