Anchor-Based Detectors
I rilevatori basati su anchor prevedono gli oggetti come scostamenti rispetto a anchor box predefinite, come avviene in Faster R-CNN, SSD, RetinaNet e YOLOv5. Come funzionano e come si confrontano.
I rilevatori basati su anchor sono modelli di rilevamento degli oggetti che dispongono anchor box predefinite sull'immagine e, per ciascuna anchor, prevedono i punteggi di classe e gli offset che la trasformano in una bounding box adattata all'oggetto. Questa famiglia comprende modelli a due stadi, come Faster R-CNN, la cui rete di proposte di regioni assegna punteggi alle anchor per generare regioni candidate, e modelli a uno stadio, come SSD, RetinaNet e YOLOv2 fino a YOLOv5, che classificano e perfezionano direttamente ogni anchor. Le anchor sono state il metodo standard per localizzare gli oggetti da Faster R-CNN nel 2015, finché nel 2019 rilevatori senza anchor come FCOS non ne hanno raggiunto l'accuratezza.
Come funziona il rilevamento basato su anchor#
Una backbone e un neck trasformano l'immagine in mappe di caratteristiche, e in ogni cella di ciascuna mappa è collocato un insieme fisso di anchor, di varie dimensioni e proporzioni. Per ogni anchor, la testa di rilevamento prevede un punteggio per classe, oltre a un punteggio di objectness da YOLOv2 a YOLOv5, e quattro valori di regressione. La codifica ampiamente usata di Faster R-CNN sposta il centro dell'anchor di frazioni della sua larghezza e altezza e scala esponenzialmente larghezza e altezza:
import torch
# One anchor as (center x, center y, width, height) in pixels
anchor = torch.tensor([320.0, 240.0, 64.0, 128.0])
# Offsets (tx, ty, tw, th) that the regression branch predicts for this anchor
tx, ty, tw, th = torch.tensor([0.25, -0.10, 0.20, -0.05])
# Faster R-CNN decoding: shift the center in units of anchor size, scale width and height exponentially
cx = anchor[0] + tx * anchor[2]
cy = anchor[1] + ty * anchor[3]
w = anchor[2] * torch.exp(tw)
h = anchor[3] * torch.exp(th)
print(f"anchor 64x128 at (320, 240) -> box {w:.1f}x{h:.1f} at ({cx:.1f}, {cy:.1f})")L'ancora diventa un riquadro di 78,2 × 121,8 pixel centrato in (336,0, 227,2): si è spostata di 16 pixel a destra e di 12,8 pixel verso l'alto, è diventata più larga del 22% (exp(0.2)) e si è ridotta del 5% in altezza (exp(−0.05)). Poiché gli scostamenti sono relativi alle dimensioni dell'ancora, gli stessi valori previsti funzionano con ancore piccole e grandi.
In fase di inferenza, il rilevatore decodifica ogni anchor in questo modo, scarta le box al di sotto di una soglia di confidenza ed esegue la soppressione dei massimi non locali (NMS) per eliminare i duplicati provenienti dalle anchor vicine.
Addestramento: etichettare ogni anchor#
Durante l'addestramento, ogni anchor viene etichettata in base alla sua intersezione sull'unione (IoU) con le box etichettate. RetinaNet usa queste soglie:
La rete di proposte di regioni di Faster R-CNN usa valori più severi, 0,7 e 0,3. Le 9 anchor per posizione di RetinaNet, distribuite su cinque livelli piramidali, totalizzano circa 100.000 anchor per immagine, quasi tutte negative; la sua focal loss riduce il peso di questi esempi negativi facili, così non sovrastano l'addestramento.
Principali architetture basate su anchor#
- Rilevatori a due stadi: La rete di proposte di regioni di Faster R-CNN assegna alle anchor un punteggio di oggetto o sfondo e le perfeziona fino a ottenere circa 300 proposte per immagine; una seconda testa classifica e perfeziona ciascuna proposta. Con una backbone VGG-16, raggiungeva 5 FPS su una GPU; Mask R-CNN aggiunge un ramo per le maschere alla stessa architettura.
- Rilevatori di oggetti a uno stadio: SSD, RetinaNet e i modelli YOLO da YOLOv2 a YOLOv5 classificano e perfezionano ogni anchor in un solo passaggio. YOLOv2 ha sostituito le anchor scelte manualmente con cluster k-means delle larghezze e altezze delle box di addestramento.
Ultralytics YOLOv5 è basato su anchor, con 3 anchor per ciascuno dei suoi tre livelli di output, e abbina le etichette alle anchor in base alla forma: un'anchor è candidata quando larghezza e altezza di un'etichetta sono entrambe entro un fattore 4× rispetto all'anchor. Le varianti YOLOv5u del pacchetto Ultralytics sostituiscono quella testa con la testa suddivisa senza anchor introdotta in YOLOv8, un design portato avanti da YOLO26.
Rilevatori basati su anchor e rilevatori senza anchor#
I rilevatori senza anchor prevedono una box da ogni punto della griglia, come distanze dai quattro bordi, oppure da keypoint come il centro dell'oggetto. Non hanno quindi dimensioni, proporzioni o soglie IoU delle anchor da ottimizzare e producono un candidato per posizione anziché uno per ogni forma di anchor. ATSS ha ricondotto il divario di accuratezza tra RetinaNet e FCOS, privo di anchor, al metodo di scelta dei campioni positivi: con la stessa regola di selezione, i due hanno raggiunto la stessa accuratezza e RetinaNet ha ottenuto 39,2 AP su COCO minival con 9 anchor per posizione e 39,3 con 1.










