Feature Pyramid Network (FPN)
Una red piramidal de características (FPN) combina características semánticas profundas con otras más detalladas y de alta resolución, para que los detectores encuentren objetos grandes y pequeños.
Una red piramidal de características (FPN) es una arquitectura de neck que convierte los mapas de características de varias resoluciones de un backbone en una pirámide en la que cada nivel contiene información semántica sólida y se adapta a un intervalo de tamaños de objeto. Presentada por Facebook AI Research en Feature Pyramid Networks for Object Detection (CVPR 2017), añade una ruta de arriba abajo y conexiones laterales a una red neuronal convolucional (CNN) estándar, de modo que los objetos pequeños puedan detectarse en niveles de alta resolución que aún conservan el conocimiento de las capas profundas sobre el aspecto de los objetos. Las FPN y sus sucesoras se sitúan entre el backbone y la cabeza de detección en la mayoría de las arquitecturas modernas de detección de objetos y los modelos de segmentación de instancias.
Por qué los detectores necesitan características multiescala#
Un backbone CNN reduce la resolución a medida que se profundiza, así que su último mapa de características tiene una semántica sólida y una resolución baja: con un stride de 32, un objeto de 20 píxeles ocupa menos de una celda de la cuadrícula. Los primeros mapas de características conservan el detalle espacial fino y responden sobre todo a bordes y texturas. Antes de FPN, los detectores tenían tres opciones, cada una con un coste. Ejecutar la red sobre una pirámide de imágenes a varias escalas es preciso y varias veces más lento. Predecir solo a partir del último mapa, como hacía el Faster R-CNN original, es rápido y poco eficaz con objetos pequeños. Predecir a partir de varias etapas del backbone, como hace SSD, empieza en una zona avanzada de la red para evitar características de bajo nivel débiles y, por ello, pasa por alto los mapas de alta resolución que necesitan los objetos pequeños. FPN obtiene la cobertura multiescala de una pirámide de imágenes en una sola pasada hacia delante, y Faster R-CNN con FPN estableció un nuevo estado del arte de un único modelo en detección de COCO, funcionando a 5 fotogramas por segundo en una GPU.
Cómo funciona una FPN#
Una FPN construye su pirámide en tres pasos:
- Ruta de abajo arriba: la propagación hacia delante habitual del backbone. FPN toma el último mapa de características de cada etapa, etiquetado de C2 a C5 en una ResNet con strides de 4, 8, 16 y 32.
- Ruta de arriba abajo: desde el nivel más grueso, cada mapa se amplía por un factor de 2 mediante interpolación del vecino más cercano, llevando la semántica de alto nivel hacia los niveles más finos.
- Conexiones laterales: una convolución 1×1 adapta cada mapa del backbone a una anchura común de 256 canales; el resultado se suma elemento a elemento al mapa ampliado del nivel superior, y una convolución 3×3 suaviza la suma para reducir los artefactos de ampliación. Las salidas, de P2 a P5, tienen todas 256 canales, por lo que una única cabeza de predicción con pesos compartidos funciona en todos los niveles.
Torchvision incluye un módulo FeaturePyramidNetwork listo para usar que recibe los mapas del backbone en un diccionario ordenado.
from collections import OrderedDict
import torch
from torchvision.ops import FeaturePyramidNetwork
# Salidas del backbone para una imagen de 640x640 con strides de 8, 16 y 32 (número de canales 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),
)
# Las convoluciones laterales 1x1 y la ruta de arriba abajo dan a cada nivel los mismos 256 canales
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))Imprime c3 (1, 256, 80, 80), c4 (1, 256, 40, 40) y c5 (1, 256, 20, 20): cada nivel conserva su tamaño espacial y ahora los tres comparten la misma anchura de canales, lo que permite que una única cabeza funcione a todas las escalas.
Aplicaciones#
- Imágenes aéreas y de satélite: Los vehículos, las personas y los edificios de análisis de imágenes de satélite y las grabaciones de drones suelen ocupar solo unos pocos píxeles, por lo que los detectores dependen de los niveles de stride 4 y stride 8 de la pirámide.
- Segmentación de instancias: Mask R-CNN, disponible en Detectron2, asigna cada región a un nivel de la pirámide según su tamaño antes de predecir su caja y su máscara.
- Segmentación panóptica: Panoptic FPN añade una rama de segmentación semántica a la misma pirámide y etiqueta elementos como carreteras y cielos, además de los objetos contables.
- Vehículos autónomos: Un único fotograma de cámara puede contener camiones cercanos que ocupan la mitad de la imagen y peatones y semáforos lejanos de apenas unos píxeles de altura.
FPN frente a PANet, BiFPN y otros necks#
La ruta de arriba abajo de FPN fue el punto de partida de una familia de necks que modifican el flujo de información entre niveles:
- PANet: Añade una ruta de abajo arriba tras la ruta de arriba abajo de FPN, acortando el recorrido desde las características finas y bien localizadas hasta los niveles superiores. PANet quedó en primer lugar en el reto de segmentación de instancias COCO 2017.
- BiFPN: El neck de EfficientDet repite varias veces la fusión de arriba abajo y de abajo arriba, elimina los nodos que solo tienen una entrada y aprende un peso para cada entrada que fusiona.
- NAS-FPN: Una disposición de pirámide obtenida mediante búsqueda de arquitecturas neuronales y apilada varias veces.
- U-Net: También combina características gruesas y finas mediante conexiones de salto, pero después predice una sola vez a resolución completa, lo que la hace más adecuada para la segmentación por píxel que para la detección multiescala.
YOLO26 usa un neck FPN más PAN que fusiona niveles mediante concatenación: dos pasos de ampliación llevan el contexto del stride 32 al nivel de stride 8, dos convoluciones con stride trasladan el detalle de vuelta hacia arriba, y la cabeza predice desde P3, P4 y P5 con strides de 8, 16 y 32. Su variante yolo26-p2.yaml amplía la pirámide con un nivel P2 de stride 4 para objetos muy pequeños, lo que aumenta el cómputo sin fusionar de YOLO26n de 6.1 a 9.5 GFLOPs.










