Soppressione Non Massima (NMS)
I modelli di object detection spesso prevedono più riquadri di delimitazione sovrapposti per lo stesso oggetto. Questo accade perché i modelli analizzano un'immagine a diverse scale e posizioni, generando così previsioni ridondanti. La Non-Max Suppression (NMS) è una fase di post-elaborazione fondamentale che perfeziona queste rilevazioni selezionando i riquadri di delimitazione più rilevanti ed eliminando quelli superflui.

Perché si verificano più riquadri sovrapposti
I rilevatori di oggetti prevedono più riquadri di delimitazione per un singolo oggetto a causa di:
- Anchor boxes: alcuni modelli, come Faster R-CNN e YOLO, utilizzano anchor box predefiniti di diverse dimensioni, portando a più rilevamenti dello stesso oggetto;
- Approcci a finestra mobile: alcuni metodi di rilevamento analizzano un'immagine in piccole regioni, causando rilevamenti ripetuti di un oggetto in aree sovrapposte;
- Punteggi di confidenza elevati: il modello assegna un punteggio di confidenza a ciascuna previsione e previsioni simili con alta confidenza possono sovrapporsi in modo significativo.
Se questi riquadri ridondanti non vengono filtrati, possono influire negativamente sulle prestazioni del rilevamento degli oggetti aumentando la complessità computazionale e rendendo inaffidabile il conteggio degli oggetti.
Come funziona la Non-Max Suppression
La NMS viene applicata per rimuovere rilevamenti duplicati mantenendo il riquadro di delimitazione con la maggiore confidenza. Segue questi passaggi:
- Ordinamento dei punteggi: disposizione di tutti i riquadri previsti in ordine decrescente in base ai loro punteggi di confidenza;
- Selezione del miglior riquadro: selezione del riquadro con il punteggio più alto e aggiunta alla lista finale delle rilevazioni;
- Calcolo dell'IoU: calcolo dell'Intersection Over Union (IoU) tra il riquadro selezionato e tutti i riquadri rimanenti;
- Soglia: soppressione (rimozione) dei riquadri che hanno un IoU superiore a una soglia impostata (ad esempio, 0.5) poiché probabilmente rappresentano lo stesso oggetto;
- Ripetizione: continuazione di questo processo per il riquadro con il punteggio successivo più alto fino a quando tutti i riquadri sono stati processati.
import numpy as np
def non_max_suppression(boxes, scores, iou_threshold=0.5):
# Sort boxes by confidence scores in descending order
sorted_indices = np.argsort(scores)[::-1]
selected_boxes = []
while len(sorted_indices) > 0:
# Pick the highest confidence box
best_idx = sorted_indices[0]
selected_boxes.append(boxes[best_idx])
# Compute IoU with the remaining boxes
remaining_boxes = boxes[sorted_indices[1:]]
ious = np.array([compute_iou(boxes[best_idx], box) for box in remaining_boxes])
# Suppress boxes with IoU above threshold
sorted_indices = sorted_indices[1:][ious < iou_threshold]
return selected_boxes
Soft-NMS: Un'alternativa più intelligente
La NMS standard rimuove tutti i riquadri sovrapposti sopra una certa soglia di IoU, il che a volte può eliminare rilevamenti utili. Soft-NMS migliora questo processo riducendo i punteggi di confidenza dei riquadri sovrapposti invece di rimuoverli completamente. Questo metodo consente una soppressione più graduale e può migliorare le prestazioni di rilevamento in scenari con oggetti densi.
Differenze principali tra NMS standard e Soft-NMS:
- NMS standard: rimuove i riquadri sovrapposti sopra la soglia di IoU;
- Soft-NMS: riduce i punteggi di confidenza dei riquadri sovrapposti invece di eliminarli, rendendolo più flessibile per il rilevamento di oggetti parzialmente occlusi.
Bilanciare accuratezza e velocità nella NMS
La scelta della soglia IoU corretta è fondamentale:
- Soglie più alte (ad esempio, 0.6 - 0.7): filtraggio più aggressivo, mantenendo solo i riquadri con maggiore confidenza ma rischiando di perdere alcune rilevazioni valide;
- Soglie più basse (ad esempio, 0.3 - 0.4): mantiene più riquadri sovrapposti, utile in scene affollate ma può aumentare i falsi positivi.
L'utilizzo di implementazioni ottimizzate, come le funzioni NMS integrate di TensorFlow o OpenCV, può aiutare ad accelerare l'elaborazione per applicazioni in tempo reale.
Non-Max Suppression è una tecnica fondamentale nel rilevamento degli oggetti per rimuovere i riquadri di delimitazione ridondanti e migliorare l'accuratezza del modello. La NMS standard elimina in modo efficiente le rilevazioni duplicate, mentre la Soft-NMS perfeziona il processo regolando i punteggi di confidenza invece di rimuovere direttamente i riquadri. Regolando opportunamente le soglie di IoU, è possibile trovare il giusto equilibrio tra accuratezza del rilevamento ed efficienza computazionale.
1. Qual è lo scopo principale della Non-Max Suppression (NMS) nel rilevamento degli oggetti?
2. Come determina la NMS standard quali riquadri di delimitazione sopprimere?
3. Qual è la principale differenza tra NMS standard e Soft-NMS?
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione
Can you explain how to choose the best IoU threshold for my application?
What are the main advantages of using Soft-NMS over standard NMS?
Can you provide more details on how IoU is calculated?
Awesome!
Completion rate improved to 3.45
Soppressione Non Massima (NMS)
Scorri per mostrare il menu
I modelli di object detection spesso prevedono più riquadri di delimitazione sovrapposti per lo stesso oggetto. Questo accade perché i modelli analizzano un'immagine a diverse scale e posizioni, generando così previsioni ridondanti. La Non-Max Suppression (NMS) è una fase di post-elaborazione fondamentale che perfeziona queste rilevazioni selezionando i riquadri di delimitazione più rilevanti ed eliminando quelli superflui.

Perché si verificano più riquadri sovrapposti
I rilevatori di oggetti prevedono più riquadri di delimitazione per un singolo oggetto a causa di:
- Anchor boxes: alcuni modelli, come Faster R-CNN e YOLO, utilizzano anchor box predefiniti di diverse dimensioni, portando a più rilevamenti dello stesso oggetto;
- Approcci a finestra mobile: alcuni metodi di rilevamento analizzano un'immagine in piccole regioni, causando rilevamenti ripetuti di un oggetto in aree sovrapposte;
- Punteggi di confidenza elevati: il modello assegna un punteggio di confidenza a ciascuna previsione e previsioni simili con alta confidenza possono sovrapporsi in modo significativo.
Se questi riquadri ridondanti non vengono filtrati, possono influire negativamente sulle prestazioni del rilevamento degli oggetti aumentando la complessità computazionale e rendendo inaffidabile il conteggio degli oggetti.
Come funziona la Non-Max Suppression
La NMS viene applicata per rimuovere rilevamenti duplicati mantenendo il riquadro di delimitazione con la maggiore confidenza. Segue questi passaggi:
- Ordinamento dei punteggi: disposizione di tutti i riquadri previsti in ordine decrescente in base ai loro punteggi di confidenza;
- Selezione del miglior riquadro: selezione del riquadro con il punteggio più alto e aggiunta alla lista finale delle rilevazioni;
- Calcolo dell'IoU: calcolo dell'Intersection Over Union (IoU) tra il riquadro selezionato e tutti i riquadri rimanenti;
- Soglia: soppressione (rimozione) dei riquadri che hanno un IoU superiore a una soglia impostata (ad esempio, 0.5) poiché probabilmente rappresentano lo stesso oggetto;
- Ripetizione: continuazione di questo processo per il riquadro con il punteggio successivo più alto fino a quando tutti i riquadri sono stati processati.
import numpy as np
def non_max_suppression(boxes, scores, iou_threshold=0.5):
# Sort boxes by confidence scores in descending order
sorted_indices = np.argsort(scores)[::-1]
selected_boxes = []
while len(sorted_indices) > 0:
# Pick the highest confidence box
best_idx = sorted_indices[0]
selected_boxes.append(boxes[best_idx])
# Compute IoU with the remaining boxes
remaining_boxes = boxes[sorted_indices[1:]]
ious = np.array([compute_iou(boxes[best_idx], box) for box in remaining_boxes])
# Suppress boxes with IoU above threshold
sorted_indices = sorted_indices[1:][ious < iou_threshold]
return selected_boxes
Soft-NMS: Un'alternativa più intelligente
La NMS standard rimuove tutti i riquadri sovrapposti sopra una certa soglia di IoU, il che a volte può eliminare rilevamenti utili. Soft-NMS migliora questo processo riducendo i punteggi di confidenza dei riquadri sovrapposti invece di rimuoverli completamente. Questo metodo consente una soppressione più graduale e può migliorare le prestazioni di rilevamento in scenari con oggetti densi.
Differenze principali tra NMS standard e Soft-NMS:
- NMS standard: rimuove i riquadri sovrapposti sopra la soglia di IoU;
- Soft-NMS: riduce i punteggi di confidenza dei riquadri sovrapposti invece di eliminarli, rendendolo più flessibile per il rilevamento di oggetti parzialmente occlusi.
Bilanciare accuratezza e velocità nella NMS
La scelta della soglia IoU corretta è fondamentale:
- Soglie più alte (ad esempio, 0.6 - 0.7): filtraggio più aggressivo, mantenendo solo i riquadri con maggiore confidenza ma rischiando di perdere alcune rilevazioni valide;
- Soglie più basse (ad esempio, 0.3 - 0.4): mantiene più riquadri sovrapposti, utile in scene affollate ma può aumentare i falsi positivi.
L'utilizzo di implementazioni ottimizzate, come le funzioni NMS integrate di TensorFlow o OpenCV, può aiutare ad accelerare l'elaborazione per applicazioni in tempo reale.
Non-Max Suppression è una tecnica fondamentale nel rilevamento degli oggetti per rimuovere i riquadri di delimitazione ridondanti e migliorare l'accuratezza del modello. La NMS standard elimina in modo efficiente le rilevazioni duplicate, mentre la Soft-NMS perfeziona il processo regolando i punteggi di confidenza invece di rimuovere direttamente i riquadri. Regolando opportunamente le soglie di IoU, è possibile trovare il giusto equilibrio tra accuratezza del rilevamento ed efficienza computazionale.
1. Qual è lo scopo principale della Non-Max Suppression (NMS) nel rilevamento degli oggetti?
2. Come determina la NMS standard quali riquadri di delimitazione sopprimere?
3. Qual è la principale differenza tra NMS standard e Soft-NMS?
Grazie per i tuoi commenti!