Residual Networks (ResNet)
Uma rede residual (ResNet) adiciona a entrada de cada bloco à sua saída através de uma ligação de salto, permitindo treinar redes muito profundas. Abrange blocos, variantes e código.
Uma rede residual (ResNet) é uma rede neural convolucional (CNN) profunda construída com blocos residuais, nos quais uma ligação de atalho adiciona a entrada de cada bloco à sua saída. Assim, cada bloco aprende apenas uma correção à entrada, o que permite treinar de forma fiável redes com 50, 152 ou mais de 1 000 camadas. Kaiming He, Xiangyu Zhang, Shaoqing Ren e Jian Sun, da Microsoft Research, apresentaram a ResNet no artigo de 2015 Aprendizagem residual profunda para reconhecimento de imagens, e um ensemble de redes residuais venceu a tarefa de classificação do ILSVRC 2015 com um erro top-5 de 3.57% no ImageNet. Desde então, as ligações residuais tornaram-se padrão na maioria das arquiteturas profundas, incluindo transformers e detetores de objetos em tempo real.
O problema da degradação#
Antes da ResNet, adicionar camadas a uma sequência simples de convoluções acabava por piorar os resultados. Os autores da ResNet mostraram que uma rede simples de 56 camadas tinha um erro de treino superior ao de uma rede de 20 camadas, pelo que o sobreajuste não podia explicar a queda de desempenho. A rede mais profunda podia igualar a mais superficial definindo as camadas adicionais como identidade, mas o gradiente descendente não encontrava essa solução. Os autores chamaram a isto o problema da degradação. O problema do gradiente evanescente já tinha sido resolvido em grande parte através da inicialização normalizada dos pesos e da normalização em lote; assim, as redes simples profundas convergiam, mas para soluções piores.
Como funcionam os blocos residuais#
Um bloco residual calcula y = F(x) + x, em que x é a entrada do bloco e F é uma pequena sequência de camadas, normalmente duas ou três convoluções com normalização em lote e ReLU. Se o melhor mapeamento para o bloco estiver próximo de um mapeamento identidade, as camadas só têm de aproximar F de zero, o que é muito mais fácil do que aprender a identidade a partir do zero. O atalho também proporciona aos gradientes um caminho direto de retropropagação através de cada bloco. Os atalhos identidade não adicionam parâmetros e exigem quase nenhum cálculo. Quando um bloco altera o número de canais ou reduz a resolução com um stride de 2, x deixa de ter a mesma forma que F(x), e uma convolução 1×1 projeta o atalho para a nova forma.
ResNet-18 e ResNet-34 usam uma sequência do bloco básico de duas convoluções. ResNet-50, ResNet-101 e ResNet-152 usam um bloco gargalo com três convoluções: uma convolução 1×1 reduz os canais, uma convolução 3×3 processa-os e uma segunda convolução 1×1 repõe-nos, mantendo os modelos profundos a um custo acessível. A ResNet-50 tem cerca de 25.6 milhões de parâmetros. O artigo original também treinou uma rede de 1 202 camadas no CIFAR-10 até obter um erro de treino inferior a 0.1%, embora o erro de teste de 7.93% fosse superior aos 6.43% de uma rede de 110 camadas; os autores atribuíram essa diferença ao sobreajuste no conjunto de dados pequeno.
Variantes da ResNet#
- ResNet com pré-ativação: Num artigo de 2016, os mesmos autores moveram a normalização em lote e a ReLU para antes de cada convolução, deixando o caminho do atalho como uma identidade pura, e treinaram uma rede de 1 001 camadas no CIFAR-10.
- ResNeXt: Divide cada bloco gargalo em muitos caminhos paralelos de baixa largura, chamados cardinalidade, o que aumenta a precisão sem elevar o custo computacional.
- Wide ResNet: Usa menos blocos, mas mais largos, mostrando que a largura pode substituir parte da profundidade.
- ResNets modernizadas: A ConvNeXt (2022) atualizou o design da ResNet com kernels maiores, normalização por camada e ativações GELU para competir com transformers de visão.
Utilizar uma ResNet pré-treinada#
As ResNets pré-treinadas continuam a ser referências comuns e backbones para aprendizagem por transferência. Os modelos ResNet do torchvision incluem pesos do ImageNet e o pré-processamento correspondente, pelo que classificar uma imagem requer apenas algumas linhas:
import urllib.request
import torch
from torchvision.io import decode_image
from torchvision.models import ResNet50_Weights, resnet50
# Load ResNet-50 with ImageNet weights and its matching preprocessing
weights = ResNet50_Weights.DEFAULT
model = resnet50(weights=weights).eval()
preprocess = weights.transforms()
# Download and decode a sample image
data = urllib.request.urlopen("https://ultralytics.com/images/bus.jpg").read()
image = decode_image(torch.frombuffer(bytearray(data), dtype=torch.uint8))
# Classify the image and report the most likely ImageNet class
with torch.no_grad():
probs = model(preprocess(image).unsqueeze(0)).softmax(dim=1)
score, index = probs.max(dim=1)
print(f"{weights.meta['categories'][index.item()]}: {score.item():.2f}")O código apresenta minibus: 0.25, a classe mais próxima, entre as 1 000 classes do ImageNet, do autocarro urbano na fotografia. Para uma tarefa personalizada, substituir a última camada totalmente ligada e ajustar o modelo com novos rótulos permite reutilizar as características aprendidas pelas etapas residuais com o ImageNet.
ResNet vs. arquiteturas relacionadas#
- Redes simples, como VGG: A VGG encadeia convoluções 3×3 sem atalhos e chega a um máximo de 19 camadas de pesos. A ResNet-152 é oito vezes mais profunda e tem menor complexidade do que a VGG-19.
- Redes Highway: Desenvolvidas ao mesmo tempo que a ResNet, adicionam portas aprendidas que podem fechar o atalho. Os atalhos identidade da ResNet nunca se fecham e não adicionam parâmetros.
- DenseNet: Concatena as saídas de todas as camadas anteriores de um bloco, em vez de adicionar um único atalho, reutilizando características à custa do aumento do número de canais.
- U-Net: As suas ligações de salto transportam mapas de características do codificador para o descodificador e concatenam-nos aí, ligando etapas distantes em vez de envolver blocos individuais.
- Transformers de visão (ViT): Substituem as convoluções por autoatenção, mas mantêm ligações residuais em torno de cada subcamada de atenção e de alimentação direta, como acontece em todos os transformers.
Ligações residuais em modelos modernos#
A ideia residual sobreviveu às arquiteturas ResNet específicas. Cada camada de um modelo de linguagem de grande escala (LLM) adiciona as suas saídas de atenção e de alimentação direta a um fluxo residual contínuo, e a maioria dos detetores CNN constrói os seus backbones com blocos residuais. No YOLO26, os blocos C3k2 são construídos com módulos gargalo que devolvem x + F(x) sempre que os canais de entrada e de saída coincidem; o pacote Ultralytics também inclui configurações do RT-DETR da Baidu com backbones ResNet-50 e ResNet-101. O artigo sobre a ResNet ganhou o prémio de Melhor Artigo da CVPR 2016, e uma análise publicada na Nature em 2025 classificou-o como o artigo mais citado do século XXI.










