Feature Pyramid Network (FPN)
Un réseau pyramidal de caractéristiques (FPN) fusionne des caractéristiques sémantiques profondes avec des caractéristiques fines à haute résolution afin que les détecteurs repèrent les objets petits comme grands.
Un réseau pyramidal de caractéristiques (FPN) est une architecture de neck qui transforme les cartes de caractéristiques multirésolution d’un backbone en une pyramide où chaque niveau porte une forte information sémantique et correspond à une plage de tailles d’objets. Présenté par Facebook AI Research dans Feature Pyramid Networks for Object Detection (CVPR 2017), il ajoute un chemin descendant et des connexions latérales à un réseau neuronal convolutif (CNN) standard, afin que les petits objets puissent être détectés sur des niveaux à haute résolution qui conservent les connaissances des couches profondes sur l’apparence des objets. Les FPN et leurs successeurs se placent entre le backbone et la tête de détection dans la plupart des architectures modernes de détection d’objets et des modèles de segmentation d’instances.
Pourquoi les détecteurs ont besoin de caractéristiques multi-échelles#
Un backbone CNN réduit la résolution à mesure qu’il s’approfondit ; sa dernière carte de caractéristiques a donc une forte sémantique et une résolution grossière : avec un pas de 32, un objet de 20 pixels couvre moins d’une cellule de la grille. Ses premières cartes de caractéristiques conservent les détails spatiaux fins et réagissent principalement aux contours et aux textures. Avant FPN, les détecteurs avaient trois options, chacune avec un coût. Exécuter le réseau sur une pyramide d’images à plusieurs échelles est précis, mais plusieurs fois plus lent. Prédire uniquement à partir de la dernière carte, comme le faisait le Faster R-CNN original, est rapide, mais peu performant sur les petits objets. Prédire à partir de plusieurs étapes du backbone, comme le fait SSD, commence haut dans le réseau pour éviter les caractéristiques de bas niveau peu fiables et passe donc à côté des cartes haute résolution nécessaires aux petits objets. FPN offre la couverture multi-échelle d’une pyramide d’images en une seule passe avant ; Faster R-CNN avec FPN a établi un nouvel état de l’art pour un modèle unique en détection sur COCO, tout en atteignant 5 images par seconde sur un GPU.
Fonctionnement d’un FPN#
Un FPN construit sa pyramide en trois étapes :
- Chemin ascendant : la passe avant habituelle du backbone. FPN récupère la dernière carte de caractéristiques de chaque étape, désignées de C2 à C5 aux pas de 4, 8, 16 et 32 dans un ResNet.
- Chemin descendant : en partant du niveau le plus grossier, chaque carte est suréchantillonnée d’un facteur 2 par interpolation au plus proche voisin, ce qui propage la sémantique de haut niveau vers les niveaux plus fins.
- Connexions latérales : une convolution 1×1 ramène chaque carte du backbone à une largeur commune de 256 canaux ; le résultat est ajouté élément par élément à la carte suréchantillonnée du niveau supérieur, puis une convolution 3×3 lisse la somme pour réduire les artefacts de suréchantillonnage. Les sorties, de P2 à P5, ont toutes 256 canaux, ce qui permet à une seule tête de prédiction aux poids partagés de s’exécuter à chaque niveau.
Torchvision fournit un module FeaturePyramidNetwork prêt à l’emploi, qui prend les cartes du backbone sous forme de dictionnaire ordonné.
from collections import OrderedDict
import torch
from torchvision.ops import FeaturePyramidNetwork
# Sorties du backbone pour une image de 640x640 aux pas de 8, 16 et 32 (nombres de canaux de ResNet-50)
features = OrderedDict(
c3=torch.randn(1, 512, 80, 80),
c4=torch.randn(1, 1024, 40, 40),
c5=torch.randn(1, 2048, 20, 20),
)
# Les convolutions latérales 1x1 et le chemin descendant donnent 256 canaux à chaque niveau
fpn = FeaturePyramidNetwork(in_channels_list=[512, 1024, 2048], out_channels=256)
pyramid = fpn(features)
for name, level in pyramid.items():
print(name, tuple(level.shape))Le code affiche c3 (1, 256, 80, 80), c4 (1, 256, 40, 40) et c5 (1, 256, 20, 20) : chaque niveau conserve sa taille spatiale et les trois partagent désormais la même largeur de canaux, ce qui permet à une seule tête de traiter toutes les échelles.
Applications#
- Imagerie aérienne et satellite : les véhicules, les personnes et les bâtiments dans l’analyse d’images satellite et les séquences de drones ne couvrent souvent que quelques pixels ; les détecteurs s’appuient donc sur les niveaux de pas 4 et 8 de la pyramide.
- Segmentation d’instances : Mask R-CNN, disponible dans Detectron2, attribue chaque région à un niveau de la pyramide en fonction de sa taille avant de prédire sa boîte et son masque.
- Segmentation panoptique : Panoptic FPN ajoute à la même pyramide une branche de segmentation sémantique, qui étiquette des éléments non dénombrables comme la route et le ciel, en plus des objets dénombrables.
- Véhicules autonomes : une seule image de caméra peut contenir des camions proches qui occupent la moitié de l’image, ainsi que des piétons et des feux de circulation éloignés, hauts de quelques pixels.
FPN face à PANet, BiFPN et aux autres necks#
Le chemin descendant de FPN a donné naissance à une famille de necks qui modifient la circulation de l’information entre les niveaux :
- PANet : ajoute un chemin ascendant après le chemin descendant de FPN, ce qui raccourcit le parcours entre les caractéristiques fines et bien localisées et les niveaux supérieurs. PANet a remporté la première place du défi de segmentation d’instances COCO 2017.
- BiFPN : le neck d’EfficientDet répète plusieurs fois la fusion descendante et ascendante, supprime les nœuds qui n’ont qu’une seule entrée et apprend un poids pour chaque entrée fusionnée.
- NAS-FPN : une disposition de pyramide trouvée par recherche d’architecture neuronale et empilée plusieurs fois.
- U-Net : fusionne également les caractéristiques grossières et fines au moyen de connexions de saut, puis effectue une seule prédiction à pleine résolution, ce qui convient davantage à la segmentation par pixel qu’à la détection multi-échelle.
YOLO26 utilise un neck FPN-plus-PAN qui fusionne les niveaux par concaténation : deux étapes de suréchantillonnage transmettent le contexte du pas 32 au niveau de pas 8, deux convolutions à pas ramènent les détails vers le haut, et la tête prédit à partir de P3, P4 et P5 aux pas de 8, 16 et 32. Sa variante yolo26-p2.yaml étend la pyramide avec un niveau P2 de pas 4 pour les très petits objets, ce qui fait passer le calcul non fusionné de YOLO26n de 6.1 à 9.5 GFLOPs.










