Receptive Field
Le champ réceptif est la zone de l’image d’entrée susceptible d’influencer une unité d’un réseau neuronal. Découvre comment il s’élargit avec la profondeur, le pas et la dilatation, avec des exemples de code.
Le champ réceptif d’une unité dans un réseau neuronal convolutif (CNN) est la région de l’image d’entrée qui peut influencer la valeur de cette unité. Une unité de la première couche de convolution 3 × 3 du réseau voit une zone de 3 × 3 pixels, et les unités des couches plus profondes voient des régions de plus en plus grandes, car chaque couche combine les sorties voisines de la précédente. Le champ réceptif détermine la quantité de contexte qu’une caractéristique peut exploiter : une unité qui reconnaît un bus entier doit voir le bus en entier. Le terme vient des neurosciences, où il désigne la zone du champ visuel qui stimule un neurone donné.
Croissance du champ réceptif#
Chaque couche ajoute (k − 1) × j pixels au champ réceptif, où k est la taille du noyau et j, le pas entre unités, est la distance en pixels d’entrée entre deux unités voisines de cette couche, égale au produit de tous les pas précédents. Trois conséquences en découlent :
- Empilement de petits noyaux : trois couches 3 × 3 avec un pas de 1 voient une zone de 7 × 7, comme une couche 7 × 7, mais avec 27C² poids au lieu de 49C² pour C canaux ; c’est l’argument qu’ont utilisé les réseaux VGG pour construire de profondes piles de convolutions 3 × 3.
- Pas et pooling : chaque couche avec un pas de 2 ou chaque opération de pooling double le pas entre unités ; les couches suivantes agrandissent donc le champ réceptif deux fois plus vite. C’est ainsi que les CNN atteignent des champs réceptifs de plusieurs centaines de pixels tout en réduisant la taille de leurs cartes de caractéristiques.
- Dilatation : une convolution 3 × 3 dilatée (atrous) de facteur d espace ses points d’application de d pixels et couvre 2d + 1 pixels, ce qui élargit le champ réceptif sans sous-échantillonnage. Elle convient aux tâches denses au niveau du pixel, comme la segmentation sémantique.
Mesurer directement le champ réceptif confirme ces règles : rétropropager à partir d’une valeur de sortie et observer quels pixels d’entrée reçoivent un gradient non nul.
import torch
from torch import nn
# Three stacked 3x3 convolutions in three configurations: (stride, dilation)
for name, stride, dilation in (("plain", 1, 1), ("strided", 2, 1), ("dilated", 1, 2)):
convs = [nn.Conv2d(1, 1, 3, stride, padding=dilation, dilation=dilation, bias=False) for _ in range(3)]
for conv in convs:
nn.init.ones_(conv.weight) # positive weights, so no input pixel's gradient cancels out
layers = nn.Sequential(*convs)
# Backpropagate from the central output value; input pixels with nonzero gradient form its receptive field
image = torch.zeros(1, 1, 64, 64, requires_grad=True)
output = layers(image)
output[0, 0, output.shape[2] // 2, output.shape[3] // 2].backward()
rows = image.grad[0, 0].sum(dim=1).nonzero()
size = rows.max().item() - rows.min().item() + 1
print(f"{name}: {size}x{size} pixels")Le résultat affiche 7 × 7 pour la pile classique, 15 × 15 pour la pile avec pas, où le pas entre unités passe de 1 à 2 puis à 4, et 13 × 13 pour la pile dilatée, où chaque couche ajoute 4 pixels.
Champ réceptif théorique et effectif#
La formule donne le champ réceptif théorique, c’est-à-dire tous les pixels qui peuvent influencer une unité. Le champ réceptif effectif mesure l’influence réelle de chaque pixel : elle suit une forme à peu près gaussienne, concentrée au centre, et ne couvre qu’une fraction de la zone théorique. Les noyaux plus grands l’élargissent ; RepLKNet a utilisé des noyaux convolutifs en profondeur allant jusqu’à 31 × 31 et a rapporté des champs réceptifs effectifs bien plus grands que ceux des CNN à petits noyaux. Dans les Transformers de vision, l’auto-attention permet à chaque patch de l’image de prendre en compte tous les autres dès la première couche ; le champ réceptif théorique couvre donc toute l’image à chaque profondeur.
Champ réceptif et termes associés#
- Taille du noyau : la fenêtre lue par une convolution dans sa propre entrée, par exemple 3 × 3. Le champ réceptif est la zone cumulée dans l’image d’origine, et trois noyaux 3 × 3 empilés donnent déjà un champ de 7 × 7.
- Carte de caractéristiques : la grille de sortie d’une couche. Le champ réceptif décrit la région d’entrée correspondant à une position donnée de cette grille.
- Fenêtre de contexte : le nombre de jetons qu’un modèle de langage lit à la fois, l’équivalent séquentiel d’un champ réceptif sur une grille d’image.
Champs réceptifs en détection d’objets#
Les détecteurs prédisent les petits objets à partir de cartes de caractéristiques fines et les grands objets à partir de cartes grossières et profondes dont les champs réceptifs sont étendus ; un réseau pyramidal de caractéristiques (FPN) réinjecte le contexte profond dans les cartes fines. Un champ réceptif plus petit qu’un objet n’en voit qu’une partie, et les objets minuscules ont toujours besoin d’un niveau fin, car sur une carte de pas 32, un objet de 20 pixels couvre moins d’une cellule de la grille. YOLO26 effectue ses prédictions sur des cartes de pas 8, 16 et 32, puis applique un bloc SPPF à la fin de son backbone. Ce bloc effectue un max-pooling de la carte de pas 32 avec des fenêtres équivalentes à 5 × 5, 9 × 9 et 13 × 13 cellules, suivi d’un bloc d’auto-attention dont la portée couvre toute la carte de pas 32.










