Feature Pyramid Network (FPN)
Una rete piramidale di feature (FPN) combina feature semantiche profonde con feature dettagliate ad alta risoluzione, consentendo ai rilevatori di individuare oggetti grandi e piccoli.
Una rete piramidale di caratteristiche (FPN) è un'architettura neck che trasforma le mappe delle caratteristiche a più risoluzioni del backbone in una piramide in cui ogni livello contiene solide informazioni semantiche ed è abbinato a una gamma di dimensioni degli oggetti. Introdotta da Facebook AI Research in Feature Pyramid Networks for Object Detection (CVPR 2017), aggiunge un percorso dall'alto verso il basso e connessioni laterali a una rete neurale convoluzionale (CNN) standard, così da poter rilevare gli oggetti piccoli ai livelli ad alta risoluzione, che conservano comunque le conoscenze dei livelli profondi sull'aspetto degli oggetti. Le FPN e le loro evoluzioni si collocano tra il backbone e la testa di rilevamento nella maggior parte delle moderne architetture di rilevamento degli oggetti e dei modelli di segmentazione di istanze.
Perché i rilevatori hanno bisogno di caratteristiche a più scale#
Un backbone CNN esegue il downsampling man mano che procede in profondità, quindi la sua ultima mappa delle caratteristiche ha semantica forte e risoluzione grossolana: con stride 32, un oggetto di 20 pixel copre meno di una cella della griglia. Le mappe delle caratteristiche iniziali conservano i dettagli spaziali fini e rispondono soprattutto a bordi e texture. Prima dell'FPN, i rilevatori avevano tre opzioni, ognuna con un costo. Eseguire la rete su una piramide di immagini a più scale è accurato, ma rallenta l'esecuzione di diverse volte. Prevedere solo dall'ultima mappa, come faceva l'originale Faster R-CNN, è veloce ma poco efficace sugli oggetti piccoli. Prevedere da più stadi del backbone, come fa SSD, significa iniziare da un livello alto della rete per evitare le caratteristiche deboli di basso livello e, di conseguenza, perdere le mappe ad alta risoluzione necessarie per gli oggetti piccoli. L'FPN offre la copertura multi-scala di una piramide di immagini con un singolo passaggio forward; Faster R-CNN con FPN ha stabilito un nuovo stato dell'arte per un singolo modello nel rilevamento su COCO, raggiungendo 5 fotogrammi al secondo su una GPU.
Come funziona un'FPN#
Un'FPN costruisce la propria piramide in tre passaggi:
- Percorso dal basso verso l'alto: il normale passaggio forward del backbone. L'FPN prende l'ultima mappa delle caratteristiche di ciascuno stadio, etichettate da C2 a C5 con stride 4, 8, 16 e 32 in una ResNet.
- Percorso dall'alto verso il basso: a partire dal livello più grossolano, ogni mappa viene sovracampionata di un fattore 2 con interpolazione nearest-neighbor, trasferendo la semantica di alto livello verso i livelli più fini.
- Connessioni laterali: una convoluzione 1×1 porta ogni mappa del backbone a un'ampiezza comune di 256 canali; il risultato viene sommato elemento per elemento alla mappa sovracampionata del livello superiore e una convoluzione 3×3 rende più uniforme la somma, riducendo gli artefatti del sovracampionamento. Le uscite, da P2 a P5, hanno tutte 256 canali, quindi una testa di previsione con pesi condivisi viene eseguita su ogni livello.
Torchvision include un modulo FeaturePyramidNetwork già pronto che prende le mappe del backbone come dizionario ordinato.
from collections import OrderedDict
import torch
from torchvision.ops import FeaturePyramidNetwork
# Uscite del backbone per un'immagine 640x640 con stride 8, 16 e 32 (numero di canali di 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),
)
# Le convoluzioni laterali 1x1 e il percorso dall'alto verso il basso assegnano a ogni livello gli stessi 256 canali
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))Stampa c3 (1, 256, 80, 80), c4 (1, 256, 40, 40) e c5 (1, 256, 20, 20): ogni livello mantiene le proprie dimensioni spaziali e tutti e tre ora condividono la stessa ampiezza di canale, il che consente a un'unica testa di operare a ogni scala.
Applicazioni#
- Immagini aeree e satellitari: Veicoli, persone ed edifici nell'analisi di immagini satellitari e nelle riprese effettuate con droni spesso occupano solo pochi pixel, perciò i rilevatori si affidano ai livelli della piramide con stride 4 e 8.
- Segmentazione di istanze: Mask R-CNN, disponibile in Detectron2, assegna ogni regione a un livello della piramide in base alle sue dimensioni prima di prevederne il riquadro e la maschera.
- Segmentazione panottica: Panoptic FPN aggiunge alla stessa piramide un ramo di segmentazione semantica, etichettando elementi come strade e cielo insieme agli oggetti conteggiabili.
- Veicoli autonomi: Un singolo fotogramma della telecamera contiene camion vicini che occupano metà dell'immagine e pedoni e semafori lontani alti pochi pixel.
FPN a confronto con PANet, BiFPN e altri neck#
Il percorso dall'alto verso il basso dell'FPN ha dato origine a una famiglia di neck che modificano il flusso delle informazioni tra i livelli:
- PANet: aggiunge un percorso dal basso verso l'alto dopo quello dall'alto verso il basso dell'FPN, accorciando il percorso dalle caratteristiche fini e ben localizzate ai livelli superiori. PANet si è classificata al primo posto nella sfida di segmentazione di istanze COCO 2017.
- BiFPN: il neck di EfficientDet ripete più volte la fusione dall'alto verso il basso e dal basso verso l'alto, rimuove i nodi che hanno un solo input e apprende un peso per ogni input che fonde.
- NAS-FPN: una disposizione piramidale individuata tramite ricerca di architetture neurali e impilata più volte.
- U-Net: fonde anch'essa caratteristiche grossolane e fini tramite connessioni skip, quindi esegue una sola previsione alla risoluzione completa; questo la rende più adatta alla segmentazione pixel per pixel che al rilevamento multi-scala.
YOLO26 usa un neck FPN-plus-PAN che fonde i livelli tramite concatenazione: due passaggi di sovracampionamento trasferiscono il contesto con stride 32 al livello con stride 8, due convoluzioni con stride riportano i dettagli verso l'alto e la testa esegue previsioni da P3, P4 e P5 con stride 8, 16 e 32. La sua variante yolo26-p2.yaml estende la piramide con un livello P2 con stride 4 per gli oggetti molto piccoli, aumentando il costo computazionale non fuso di YOLO26n da 6.1 a 9.5 GFLOPs.










