Convolutional Neural Network (CNN)
Uma rede neural convolucional (CNN) aprende características de imagens com filtros deslizantes compartilhados. Veja suas camadas, propriedades e principais modelos, além das diferenças entre CNNs e ViTs.
Uma rede neural convolucional (CNN) é uma arquitetura de aprendizagem profunda que processa dados em grelha, geralmente imagens, com pequenos filtros aprendíveis que deslizam sobre a entrada. Cada filtro reutiliza os mesmos pesos em todas as posições, por isso uma CNN deteta um padrão, como uma borda ou uma roda, onde quer que apareça, usando muito menos parâmetros do que uma rede totalmente conectada. As camadas empilhadas constroem uma hierarquia de características, desde bordas e texturas nas primeiras camadas até partes e objetos inteiros nas camadas mais profundas. As CNNs impulsionaram a maior parte do progresso da visão computacional desde que o AlexNet venceu o desafio ImageNet em 2012, e continuam a ser a opção mais comum para a visão em tempo real em hardware de borda.
Como funciona uma CNN#
Uma CNN repete alguns tipos de camadas em etapas, e cada etapa trabalha com uma resolução inferior à da anterior:
- Camadas de convolução: Cada camada desliza um conjunto de filtros aprendíveis, normalmente 3×3, sobre a altura e a largura da entrada. Cada filtro produz um canal do mapa de características de saída; por isso, uma camada com 64 filtros produz 64 canais.
- Normalização e ativação: A normalização em lotes mantém as saídas de cada camada num intervalo estável durante o treino, e uma função de ativação não linear, como ReLU ou SiLU, permite que as camadas empilhadas representem mais do que uma única transformação linear.
- Redução da resolução: O max pooling ou uma convolução com passo 2 reduz para metade a altura e a largura, aumentando o campo recetivo das camadas posteriores e reduzindo o cálculo. Muitos designs modernos reduzem a resolução sobretudo com convoluções com passo.
- Cabeça: Para a classificação de imagens, o pooling médio global reduz cada canal final a um número, e uma camada totalmente conectada mapeia esses números para pontuações de classe. Os modelos de deteção e segmentação substituem esta cabeça por camadas que preveem caixas ou máscaras por píxel.
Propriedades principais das CNNs#
Três propriedades explicam por que as convoluções são adequadas para imagens. A conectividade local significa que cada saída depende apenas de uma pequena vizinhança da entrada, refletindo a forte correlação entre pixels próximos. O compartilhamento de pesos significa que um único filtro é aplicado à imagem inteira, então o número de parâmetros permanece igual para qualquer tamanho de entrada. A equivariância à translação significa que, ao deslocar a entrada, o mapa de características se desloca na mesma medida, de modo que um padrão aprendido em um canto é reconhecido em qualquer lugar, e as camadas de pooling ainda acrescentam alguma tolerância a pequenos deslocamentos. Juntas, essas propriedades formam o viés indutivo da CNN: os pressupostos incorporados que permitem que ela aprenda com menos imagens do que um transformer precisa.
O trecho de código PyTorch abaixo compara uma camada convolucional com uma camada totalmente conectada aplicadas à mesma imagem RGB de 224×224.
import torch
from torch import nn
image = torch.randn(1, 3, 224, 224)
# 64 learnable 3x3 filters, each reused at every position of the RGB image
conv = nn.Conv2d(in_channels=3, out_channels=64, kernel_size=3, padding=1)
# A fully connected layer mapping the same flattened image to only 64 numbers
dense = nn.Linear(3 * 224 * 224, 64)
conv_params = sum(p.numel() for p in conv.parameters())
dense_params = sum(p.numel() for p in dense.parameters())
print(f"Conv2d: output {tuple(conv(image).shape)}, {conv_params:,} parameters")
print(f"Linear: output {tuple(dense(image.flatten(1)).shape)}, {dense_params:,} parameters")Imprime Conv2d: output (1, 64, 224, 224), 1,792 parameters e Linear: output (1, 64), 9,633,856 parameters. A partilha de pesos permite que a convolução produza 64 mapas de características na resolução total com 1.792 parâmetros; a camada totalmente conectada precisa de 5.376 vezes mais para produzir apenas 64 números.
Arquiteturas CNN de referência#
- LeNet-5 (1998): A rede de Yann LeCun para ler dígitos manuscritos definiu o padrão de alternar camadas convolucionais e de pooling, seguidas por camadas totalmente conectadas, e foi implementada comercialmente para ler cheques bancários.
- AlexNet (2012): Treinada em duas GPUs com ativações ReLU e dropout, venceu o desafio ILSVRC 2012 com um erro de teste top-5 de 15,3%, contra 26,2% da segunda melhor submissão.
- VGG (2014): Demonstrou que empilhar pequenas convoluções 3×3 até atingir 16 a 19 camadas com pesos melhora substancialmente a precisão no ImageNet.
- ResNet (2015): As conexões residuais permitiram treinar redes com até 152 camadas, e um conjunto de ResNets venceu o ILSVRC 2015.
- U-Net (2015): Uma CNN de codificador-decodificador com conexões de atalho que se tornou a arquitetura padrão para segmentação de imagens biomédicas.
- ConvNeXt (2022): Uma ResNet modernizada com escolhas de design da era dos transformers, que alcança 87,8% de precisão top-1 no ImageNet e supera o Swin Transformer na deteção no COCO.
Onde se usam as CNNs#
- Deteção de objetos: Os detetores CNN de estágio único encontram e classificam objetos numa única passagem direta, com rapidez suficiente para vídeo em câmaras, telemóveis e placas incorporadas.
- Análise de imagens médicas: As CNNs do tipo U-Net segmentam órgãos, tumores e lesões em exames CT e MRI, onde o rótulo de cada píxel importa.
- Estimativa de pose: As CNNs preveem pontos-chave do corpo para análise desportiva, ergonomia e aplicações de fitness.
- Sinais para além das imagens: As convoluções unidimensionais processam formas de onda de áudio e séries temporais de sensores, e as CNNs bidimensionais classificam espectrogramas no reconhecimento de fala.
CNNs em comparação com Vision Transformers#
Um vision transformer (ViT) divide uma imagem em patches e relaciona cada patch com todos os outros através da autoatenção, obtendo assim contexto global desde a primeira camada. O seu viés indutivo mais fraco tem um custo: o ViT original ficou atrás de ResNets de tamanho semelhante quando treinado apenas com ImageNet e só os igualou ou superou depois de pré-treino com 14 milhões a 300 milhões de imagens. O custo da atenção também cresce com o quadrado do número de patches, o que torna dispendiosas as entradas de alta resolução; o custo de uma convolução cresce apenas linearmente com a quantidade de píxeis. Por isso, muitos modelos atuais combinam as duas abordagens, mantendo etapas convolucionais em alta resolução e adicionando atenção quando o mapa de características é pequeno. O YOLO26 segue este padrão: os blocos Conv (convolução, normalização em lotes e SiLU) e os blocos C3k2 fazem a maior parte do trabalho, e a autoatenção multi-cabeça é executada apenas no mapa de características com passo 32, uma grelha de 20×20 para uma imagem de 640×640.










