Feature Pyramid Network (FPN)
Ein Feature-Pyramiden-Netzwerk (FPN) verbindet tiefe, semantische Merkmale mit feinen Merkmalen hoher Auflösung, damit Detektoren sowohl große als auch kleine Objekte finden.
Ein Feature Pyramid Network (FPN) ist eine Neck-Architektur, die die mehrskaligen Merkmalskarten eines Backbones in eine Pyramide umwandelt. Jede Ebene enthält dabei aussagekräftige semantische Informationen und ist einem bestimmten Bereich von Objektgrößen zugeordnet. Das von Facebook AI Research in Feature Pyramid Networks for Object Detection (CVPR 2017) vorgestellte Verfahren ergänzt ein gewöhnliches faltendes neuronales Netz (CNN) um einen Pfad von oben nach unten und seitliche Verbindungen. So lassen sich kleine Objekte auf hochauflösenden Ebenen erkennen, die zugleich das Wissen tiefer Schichten darüber enthalten, wie Objekte aussehen. FPNs und ihre Weiterentwicklungen liegen in den meisten modernen Objektdetektionsarchitekturen und Instanzsegmentierungsmodellen zwischen Backbone und Detektionskopf.
Warum Detektoren mehrskalige Merkmale benötigen#
Ein CNN-Backbone verkleinert die Merkmalskarten mit zunehmender Tiefe. Seine letzte Merkmalskarte enthält daher starke semantische Informationen, hat aber eine grobe Auflösung: Bei einem Stride von 32 belegt ein 20 Pixel großes Objekt weniger als eine Rasterzelle. Die frühen Merkmalskarten bewahren feine räumliche Details und reagieren vor allem auf Kanten und Texturen. Vor FPN hatten Detektoren drei Möglichkeiten, jede mit eigenen Nachteilen. Das Netz bei mehreren Skalierungen auf einer Bildpyramide auszuführen, ist genau, aber um ein Mehrfaches langsamer. Nur aus der letzten Karte Vorhersagen abzuleiten, wie es das ursprüngliche Faster R-CNN tat, ist schnell, aber bei kleinen Objekten wenig leistungsfähig. Vorhersagen aus mehreren Backbone-Stufen abzuleiten, wie es SSD tut, beginnt weiter oben im Netz, um schwache Merkmale niedriger Ebenen zu vermeiden, und lässt dadurch die hochauflösenden Karten aus, die kleine Objekte benötigen. FPN bietet mit einem einzigen Forward-Pass die mehrskalige Abdeckung einer Bildpyramide. Faster R-CNN mit FPN setzte bei der COCO-Detektion einen neuen Bestwert für ein einzelnes Modell und erreichte auf einer GPU 5 Bilder pro Sekunde.
So funktioniert ein FPN#
Ein FPN erstellt seine Pyramide in drei Schritten:
- Pfad von unten nach oben: Der reguläre Forward-Pass des Backbones. FPN verwendet die letzte Merkmalskarte jeder Stufe, bezeichnet als C2 bis C5 mit Strides von 4, 8, 16 und 32 bei einem ResNet.
- Pfad von oben nach unten: Ausgehend von der gröbsten Ebene wird jede Karte mit Nächste-Nachbarn-Interpolation um den Faktor 2 hochskaliert. So gelangen semantische Informationen höherer Ebenen zu den feineren Ebenen.
- Seitliche Verbindungen: Eine 1×1-Faltung bringt jede Backbone-Karte auf eine einheitliche Breite von 256 Kanälen. Das Ergebnis wird elementweise zur hochskalierten Karte der darüberliegenden Ebene addiert. Eine 3×3-Faltung glättet die Summe, um Artefakte durch das Hochskalieren zu reduzieren. Die Ausgaben P2 bis P5 haben alle 256 Kanäle, sodass ein Vorhersagekopf mit gemeinsamen Gewichten auf jeder Ebene ausgeführt wird.
Torchvision enthält ein einsatzbereites Modul FeaturePyramidNetwork, das die Backbone-Karten als geordnetes Wörterbuch entgegennimmt.
from collections import OrderedDict
import torch
from torchvision.ops import FeaturePyramidNetwork
# Backbone-Ausgaben für ein 640x640-Bild bei Strides von 8, 16 und 32 (Kanalanzahlen von 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),
)
# Seitliche 1x1-Faltungen und der Pfad von oben nach unten geben jeder Ebene dieselben 256 Kanäle
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))Die Ausgabe enthält c3 (1, 256, 80, 80), c4 (1, 256, 40, 40) und c5 (1, 256, 20, 20): Jede Ebene behält ihre räumliche Größe, und alle drei haben nun dieselbe Kanalbreite. Dadurch kann ein einzelner Kopf auf jeder Skala eingesetzt werden.
Anwendungen#
- Luft- und Satellitenbilder: Fahrzeuge, Menschen und Gebäude in der Analyse von Satellitenbildern und Drohnenaufnahmen erstrecken sich oft nur über wenige Pixel. Detektoren sind daher auf die Ebenen der Pyramide mit Strides von 4 und 8 angewiesen.
- Instanzsegmentierung: Mask R-CNN, verfügbar in Detectron2, ordnet jeden Bereich anhand seiner Größe einer Pyramidenebene zu, bevor es dessen Box und Maske vorhersagt.
- Panoptische Segmentierung: Panoptic FPN ergänzt dieselbe Pyramide um einen semantischen Segmentierungszweig, der neben zählbaren Objekten auch Dinge wie Straßen und Himmel kennzeichnet.
- Autonome Fahrzeuge: Ein einzelnes Kamerabild kann nahe Lastwagen enthalten, die die Hälfte des Bildes ausfüllen, sowie weit entfernte Fußgänger und Ampeln, die nur wenige Pixel hoch sind.
FPN im Vergleich zu PANet, BiFPN und anderen Neck-Architekturen#
Der Pfad von oben nach unten in FPN war der Ausgangspunkt für eine Familie von Neck-Architekturen, die den Informationsfluss zwischen den Ebenen verändern:
- PANet: Ergänzt den Pfad von oben nach unten in FPN um einen Pfad von unten nach oben. Dadurch wird der Weg von feinen, präzise lokalisierten Merkmalen zu den oberen Ebenen verkürzt. PANet belegte beim COCO-Wettbewerb zur Instanzsegmentierung 2017 den ersten Platz.
- BiFPN: Der Neck von EfficientDet wiederholt die Fusion von oben nach unten und von unten nach oben mehrere Male, entfernt Knoten mit nur einer Eingabe und lernt für jede fusionierte Eingabe ein Gewicht.
- NAS-FPN: Ein mit Suche nach neuronalen Architekturen ermittelter Pyramidenaufbau, der mehrmals hintereinander angeordnet wird.
- U-Net: Führt ebenfalls grobe und feine Merkmale über Skip-Verbindungen zusammen und erstellt anschließend eine einzige Vorhersage in voller Auflösung. Das eignet sich besser für die Segmentierung einzelner Pixel als für die mehrskalige Detektion.
YOLO26 verwendet einen FPN-plus-PAN-Neck, der Ebenen durch Konkatenation zusammenführt: Zwei Schritte zum Hochskalieren übertragen den Kontext von Stride 32 zur Ebene mit Stride 8, zwei Faltungen mit Stride übertragen Details wieder nach oben, und der Kopf erstellt Vorhersagen aus P3, P4 und P5 mit Strides von 8, 16 und 32. Die yolo26-p2.yaml-Variante erweitert die Pyramide um eine P2-Ebene mit Stride 4 für sehr kleine Objekte. Dadurch steigt der nicht fusionierte Rechenaufwand von YOLO26n von 6.1 auf 9.5 GFLOPs.










