Feature Pyramid Network

SSD (Single Shot MultiBox Detector) - Object Detection

Feature Pyramid Network (FPN): Migliorare l'Object Detection su Oggetti di Diverse Dimensioni

Le Feature Pyramid Networks (FPN) sono una tecnica usata nei modelli di object detection per migliorare il riconoscimento di oggetti di diverse dimensioni. Sono state introdotte da Lin et al. nel 2017 e sono utilizzate in modelli avanzati come RetinaNet, Faster R-CNN e YOLO.


1. Perché servono le Feature Pyramid Networks?

Nei modelli di computer vision, le reti neurali convoluzionali (CNN) elaborano un'immagine attraverso più strati, creando feature map a diverse risoluzioni.

💡 Problema:

  • Gli oggetti piccoli possono perdersi negli strati più profondi della rete, dove la risoluzione è più bassa.
  • Gli oggetti grandi possono non essere ben rappresentati negli strati più superficiali.

✅ Soluzione: La FPN combina feature map a diverse scale, permettendo alla rete di riconoscere oggetti di qualsiasi dimensione con maggiore precisione.


2. Come funziona una Feature Pyramid Network?

La FPN costruisce una piramide di feature utilizzando due flussi:

  1. Bottom-up (estrazione delle feature) → Usa una CNN pre-addestrata (es. ResNet) per estrarre feature map di diverse scale.
  2. Top-down (potenziamento delle feature) → Propaga le informazioni dagli strati più profondi a quelli più superficiali, migliorando la qualità delle feature per gli oggetti piccoli.

2.1. Struttura della FPN

  • Dati in input → Un'immagine passa attraverso una backbone CNN (es. ResNet), generando feature map a più risoluzioni.
  • Connessioni laterali → Le feature map ad alta risoluzione ricevono informazioni dagli strati più profondi.
  • Piramide di feature finali → La rete usa queste feature map multi-scala per la classificazione e la regressione dei bounding box.

🔎 Effetto finale: la rete può rilevare oggetti piccoli nei livelli superiori della piramide e oggetti grandi nei livelli inferiori.


3. Vantaggi delle Feature Pyramid Networks

  • ✅ Miglior riconoscimento di oggetti piccoli e grandi
  • ✅ Migliore generalizzazione su dataset complessi
  • ✅ Utilizzo in molte architetture avanzate (RetinaNet, Faster R-CNN, YOLO)

4. Implementazione di una FPN in PyTorch

Ecco un'implementazione semplificata di una Feature Pyramid Network in PyTorch:

import torch
import torch.nn as nn
import torchvision.models as models

class FeaturePyramidNetwork(nn.Module):

    def __init__(self):
        super(FeaturePyramidNetwork, self).__init__()
        resnet = models.resnet50(pretrained=True)

        self.layer1 = resnet.layer1
        self.layer2 = resnet.layer2
        self.layer3 = resnet.layer3
        self.layer4 = resnet.layer4

        # Convoluzioni per uniformare i canali
        self.conv1 = nn.Conv2d(256, 256, kernel_size=1)
        self.conv2 = nn.Conv2d(512, 256, kernel_size=1)
        self.conv3 = nn.Conv2d(1024, 256, kernel_size=1)
        self.conv4 = nn.Conv2d(2048, 256, kernel_size=1)

    def forward(self, x):

        c1 = self.layer1(x)
        c2 = self.layer2(c1)
        c3 = self.layer3(c2)
        c4 = self.layer4(c3)

        p4 = self.conv4(c4)
        p3 = self.conv3(c3) + nn.functional.interpolate(p4, scale_factor=2)
        p2 = self.conv2(c2) + nn.functional.interpolate(p3, scale_factor=2)
        p1 = self.conv1(c1) + nn.functional.interpolate(p2, scale_factor=2)

        return [p1, p2, p3, p4]  # Feature map multi-scala

# Creazione della FPN
fpn = FeaturePyramidNetwork()
print(fpn)

🔹 Nota: Questa implementazione è semplificata e utilizza ResNet-50 come backbone.


5. Confronto tra Metodi di Multi-Scale Feature Extraction

Metodo Funzionamento Pregi Difetti
Single-scale CNN Usa solo un livello Semplice e veloce Non gestisce bene oggetti piccoli/grandi
Image Pyramid Ridimensiona l'immagine e la processa più volte Funziona bene per il multi-scala Alto costo computazionale
Feature Pyramid Network (FPN) Usa feature map a diverse scale con connessioni top-down Efficiente e accurata Richiede più memoria

6. Conclusione

Le Feature Pyramid Networks (FPN) migliorano l'object detection utilizzando una gerarchia di feature map a diverse scale.

Utilizzate in modelli avanzati come RetinaNet, Faster R-CNN, YOLO, permettono una migliore gestione degli oggetti piccoli e grandi.

Sono ormai uno standard nei modelli di computer vision moderni.

📌 Se vuoi implementare una FPN nel tuo progetto, fammelo sapere! 🚀

Commenti

Post popolari in questo blog

SSD (Single Shot MultiBox Detector)

Instance Segmentation: Cos'è e Come Funziona

U-Net: Architettura per la Segmentazione di Immagini