La Focal Loss

SSD (Single Shot MultiBox Detector) - Object Detection

Focal Loss: Cos'è e Come Funziona

La Focal Loss è una funzione di perdita introdotta per migliorare la performance di modelli di object detection come RetinaNet. Il suo scopo principale è ridurre l'impatto degli esempi facili e dare più importanza agli esempi difficili.

🔹 Problema che risolve

Nei dataset di object detection, il numero di oggetti è molto inferiore rispetto allo sfondo. Questo crea uno sbilanciamento che rende il modello meno efficace nel riconoscere gli oggetti rari o piccoli.

La Focal Loss aiuta a risolvere questo problema modificando la Cross-Entropy Loss con un fattore di focalizzazione.

🔹 Formula della Focal Loss

La formula della Focal Loss è:

FL(p_t) = - α (1 - p_t) ^ γ log(p_t)
        
  • p_t: probabilità predetta della classe corretta.
  • α: bilancia il peso tra classi.
  • γ: controlla il livello di focalizzazione (di solito tra 1 e 5).

🔹 Implementazione in PyTorch

Ecco un'implementazione della Focal Loss in PyTorch:

import torch
import torch.nn as nn
import torch.nn.functional as F

class FocalLoss(nn.Module):
    def __init__(self, alpha=0.25, gamma=2.0, reduction='mean'):
        super(FocalLoss, self).__init__()
        self.alpha = alpha
        self.gamma = gamma
        self.reduction = reduction

    def forward(self, inputs, targets):
        BCE_loss = F.binary_cross_entropy_with_logits(inputs, targets, reduction="none")
        p_t = torch.exp(-BCE_loss)
        focal_loss = self.alpha * (1 - p_t) ** self.gamma * BCE_loss
        
        if self.reduction == 'mean':
            return focal_loss.mean()
        elif self.reduction == 'sum':
            return focal_loss.sum()
        else:
            return focal_loss
        

Questa funzione aiuta il modello a concentrarsi sugli esempi difficili e a migliorare il detection di oggetti piccoli o rari.

🔹 Quando usare la Focal Loss?

  • ✅ Quando il dataset ha molto background e pochi oggetti.
  • ✅ Per modelli single-stage come YOLO, SSD e RetinaNet.
  • ✅ Se il modello fatica a rilevare oggetti piccoli o difficili.

🔹 Conclusione

La Focal Loss è un'ottima scelta per migliorare i single-stage object detectors. Con il giusto valore di γ, il modello ignora gli esempi facili e si concentra su quelli più complessi, migliorando la precisione delle predizioni.

💡 Frase mnemonica: "La Focal Loss ignora il facile e si concentra sul difficile!"

Ti è stato utile questo articolo? Lascia un commento qui sotto! 😊

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