Residual Networks (ResNet)
Un réseau résiduel (ResNet) ajoute l’entrée de chaque bloc à sa sortie par une connexion de saut afin de permettre l’entraînement de réseaux très profonds. Découvre les blocs, les variantes et des exemples de code.
Un réseau résiduel (ResNet) est un réseau neuronal convolutif (CNN) profond composé de blocs résiduels, dans lesquels une connexion de raccourci ajoute l’entrée de chaque bloc à sa sortie. Chaque bloc n’apprend donc qu’une correction de son entrée, ce qui permet d’entraîner de manière fiable des réseaux de 50, 152 ou plus de 1 000 couches. Kaiming He, Xiangyu Zhang, Shaoqing Ren et Jian Sun, de Microsoft Research, ont présenté ResNet dans leur article de 2015, Deep Residual Learning for Image Recognition, et un ensemble de réseaux résiduels a remporté la tâche de classification ILSVRC 2015, avec un taux d’erreur top-5 de 3,57 % sur ImageNet. Depuis, les connexions résiduelles sont devenues un élément standard de la plupart des architectures profondes, notamment des transformeurs et des détecteurs d’objets en temps réel.
Le problème de dégradation#
Avant ResNet, l’ajout de couches à une simple pile de convolutions finissait par dégrader les résultats. Les auteurs de ResNet ont montré qu’un réseau classique de 56 couches avait une erreur d’entraînement supérieure à celle d’un réseau de 20 couches ; le surapprentissage ne pouvait donc pas expliquer cette dégradation. Le réseau plus profond pouvait égaler le réseau peu profond en définissant ses couches supplémentaires comme l’identité, mais la descente de gradient ne trouvait pas cette solution. Les auteurs ont appelé ce phénomène le problème de dégradation. Le problème du gradient évanescent avait déjà été largement résolu grâce à l’initialisation normalisée des poids et à la normalisation par lots ; les réseaux classiques profonds convergeaient donc, mais vers des solutions moins bonnes.
Fonctionnement des blocs résiduels#
Un bloc résiduel calcule y = F(x) + x, où x est l’entrée du bloc et F une petite pile de couches, généralement deux ou trois convolutions avec normalisation par lots et ReLU. Si la meilleure transformation pour le bloc est proche d’une transformation identité, les couches doivent seulement pousser F vers zéro, ce qui est bien plus facile que d’apprendre l’identité à partir de zéro. Le raccourci offre aussi aux gradients un chemin direct vers l’arrière à travers chaque bloc. Les raccourcis identité n’ajoutent aucun paramètre et pratiquement aucun calcul. Lorsqu’un bloc change le nombre de canaux ou réduit la résolution avec un pas de 2, x ne correspond plus à la forme de F(x) ; une convolution 1×1 projette alors le raccourci vers la nouvelle forme.
ResNet-18 et ResNet-34 empilent ce bloc de base à deux convolutions. ResNet-50, ResNet-101 et ResNet-152 utilisent un bloc goulot d’étranglement à trois convolutions : une convolution 1×1 réduit le nombre de canaux, une convolution 3×3 les traite, puis une seconde convolution 1×1 les rétablit, ce qui permet de limiter le coût des modèles profonds. ResNet-50 compte environ 25,6 millions de paramètres. L’article original a aussi entraîné un réseau de 1 202 couches sur CIFAR-10 jusqu’à obtenir une erreur d’entraînement inférieure à 0,1 %, mais son erreur de test de 7,93 % était supérieure aux 6,43 % d’un réseau de 110 couches, un écart que les auteurs ont attribué au surapprentissage sur le petit jeu de données.
Variantes de ResNet#
- ResNet à préactivation : Dans un article de suivi publié en 2016, les mêmes auteurs ont déplacé la normalisation par lots et ReLU avant chaque convolution, laissant le chemin de raccourci en identité pure, et ont entraîné un réseau de 1 001 couches sur CIFAR-10.
- ResNeXt : Divise chaque bloc goulot d’étranglement en de nombreux chemins parallèles de faible largeur, appelés cardinalité, ce qui améliore la précision à coût de calcul égal.
- Wide ResNet : Utilise moins de blocs, mais plus larges, montrant que la largeur peut remplacer une partie de la profondeur.
- ResNet modernisés : ConvNeXt (2022) a actualisé la conception de ResNet avec des noyaux plus grands, une normalisation par couche et des activations GELU pour rivaliser avec les transformeurs de vision.
Utiliser un ResNet préentraîné#
Les ResNet préentraînés restent des références courantes et des backbones pour l’apprentissage par transfert. Les modèles ResNet de torchvision sont fournis avec des poids ImageNet et le prétraitement correspondant ; classifier une image ne demande donc que quelques lignes :
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}")Le résultat affiché est minibus: 0.25, la classe d’ImageNet la plus proche du bus urbain sur la photo, parmi les 1 000 classes. Pour une tâche personnalisée, remplacer la dernière couche entièrement connectée et affiner le modèle sur de nouvelles étiquettes permet de réutiliser les caractéristiques apprises sur ImageNet par les étapes résiduelles.
ResNet et architectures associées#
- Réseaux classiques comme VGG : VGG empile des convolutions 3×3 sans raccourcis et comporte au maximum 19 couches de poids. ResNet-152 est huit fois plus profond et moins complexe que VGG-19.
- Réseaux Highway : Développés en parallèle de ResNet, ils ajoutent des portes apprises capables de fermer le raccourci. Les raccourcis identité de ResNet ne se ferment jamais et n’ajoutent aucun paramètre.
- DenseNet : Concatène les sorties de toutes les couches précédentes d’un bloc au lieu d’ajouter un seul raccourci, ce qui réutilise les caractéristiques au prix d’un nombre croissant de canaux.
- U-Net : Ses connexions de saut transmettent les cartes de caractéristiques de l’encodeur au décodeur, où elles sont concaténées ; elles relient ainsi des étapes éloignées au lieu d’englober des blocs individuels.
- Transformeurs de vision (ViT) : Remplacent les convolutions par l’auto-attention, mais conservent des connexions résiduelles autour de chaque sous-couche d’attention et à propagation avant, comme tous les transformeurs.
Connexions résiduelles dans les modèles modernes#
L’idée résiduelle a survécu aux architectures ResNet elles-mêmes. Chaque couche d’un grand modèle de langage (LLM) ajoute ses sorties d’attention et de propagation avant à un flux résiduel continu, et la plupart des détecteurs CNN construisent leurs backbones à partir de blocs résiduels. Dans YOLO26, les blocs C3k2 sont constitués de modules goulot d’étranglement qui renvoient x + F(x) lorsque le nombre de canaux d’entrée et de sortie correspond, et le package Ultralytics comprend également des configurations du RT-DETR de Baidu avec des backbones ResNet-50 et ResNet-101. L’article sur ResNet a remporté le prix du meilleur article à CVPR 2016, et une analyse publiée dans Nature en 2025 l’a classé comme l’article le plus cité du XXIe siècle.










