Anchor Boxes
Ankerrahmen sind vorab festgelegte Rahmen mit festen Größen und Seitenverhältnissen, die ein Detektor verschiebt und skaliert, um sie an Objekte anzupassen. So werden sie dimensioniert, zugeordnet und eingesetzt.
Ankerboxen sind vordefinierte Rechtecke mit festen Größen und Seitenverhältnissen, die an jeder Position der Feature-Maps eines Detektors angeordnet werden und als erste Schätzungen für Position und Form von Objekten dienen. Ein ankerbasierter Detektor bewertet jede Ankerbox für jede Klasse und sagt kleine Verschiebungen voraus, die sie verschieben und skalieren, damit sie zum Objekt passt. Das ist leichter zu lernen, als eine Box aus dem Nichts vorherzusagen. Faster R-CNN setzt an jeder Position 9 Ankerboxen ein: drei Flächen (128², 256² und 512² Pixel) mal drei Seitenverhältnisse (1:1, 1:2 und 2:1). Bei einem Bild mit 1000 × 600 Pixeln ergibt das rund 20.000 Ankerboxen.
Wie Ankerboxen definiert werden#
Ein Ankersatz ist eine Liste von Größen und Seitenverhältnissen, die an jeder Zelle einer Feature-Map wiederholt wird. Die Anzahl der Ankerboxen entspricht daher Zellen × Formen pro Zelle. Detektoren mit einem Feature-Pyramid-Netzwerk (FPN) weisen kleinen Ankerboxen feine, hochauflösende Ebenen und großen Ankerboxen gröbere Ebenen zu: RetinaNet verwendet auf jeder von fünf Ebenen 9 Ankerboxen pro Position, also etwa 100.000 pro Bild. SSD nennt sie Standardboxen; SSD300 ordnet 8.732 davon an.
Von Hand gewählte Formen passen oft schlecht zu bestimmten Datensätzen. Deshalb führte YOLOv2 eine k-Means-Clusteranalyse der Breiten und Höhen der Trainingsboxen durch, verwendete 1 − IoU als Distanzmaß und wählte die Mittelpunkte von 5 Clustern als Ankerboxen. YOLOv3 gruppierte 9 Ankerboxen und verteilte sie gleichmäßig auf seine drei Ausgabeschrittweiten – von 10 × 13 Pixeln auf der Ebene mit Schrittweite 8 bis zu 373 × 326 Pixeln auf der Ebene mit Schrittweite 32.
Ankerboxen Objekten zuordnen#
Während des Trainings wird jede Ankerbox anhand der Schnittmenge über Vereinigung (IoU) mit jeder beschrifteten Box verglichen. Ankerboxen, die ein Objekt ausreichend überlappen, werden zu positiven Beispielen und lernen die Klasse des Objekts sowie die Verschiebungen zu seiner Begrenzungsbox. Ankerboxen mit geringer Überlappung werden zu negativen Beispielen und lernen „Hintergrund“; Ankerboxen dazwischen werden ignoriert. Das Region-Proposal-Netzwerk von Faster R-CNN stuft IoU-Werte ab 0,7 als positiv und Werte unter 0,3 als negativ ein. Außerdem kennzeichnet es die am besten passende Ankerbox jedes Objekts als positiv, damit kein Objekt ohne eine solche bleibt.
import torch
from torchvision.ops import box_iou
# Nine anchors centered on one feature-map cell at (200, 200): 3 sizes x 3 aspect ratios (height / width)
shapes = [(size, ratio) for size in (64, 128, 256) for ratio in (0.5, 1.0, 2.0)]
anchors = []
for size, ratio in shapes:
w, h = size / ratio**0.5, size * ratio**0.5
anchors.append([200 - w / 2, 200 - h / 2, 200 + w / 2, 200 + h / 2])
# A labeled pedestrian box (x1, y1, x2, y2): tall and narrow
person = torch.tensor([[160.0, 110.0, 240.0, 290.0]])
# Faster R-CNN RPN rule: IoU >= 0.7 is positive, below 0.3 is negative, anything between is ignored
iou = box_iou(torch.tensor(anchors), person).squeeze(1)
for (size, ratio), value in zip(shapes, iou.tolist()):
label = "positive" if value >= 0.7 else "negative" if value < 0.3 else "ignored"
print(f"size {size}, ratio {ratio}: IoU {value:.2f} -> {label}")Nur die hohe Ankerbox mit 128 Pixeln (Seitenverhältnis 2,0) überlappt den Fußgänger ausreichend, um mit einer IoU von 0,88 als positiv zu gelten. Zwei weitere Ankerboxen mit 128 Pixeln und IoU-Werten von 0,31 und 0,50 werden ignoriert; die sechs Ankerboxen mit unpassender Größe gelten als negativ. Die positive Ankerbox lernt anschließend Verschiebungen gemäß der üblichen Parametrisierung: Der Mittelpunkt verschiebt sich um Bruchteile der Breite und Höhe der Ankerbox, und Breite und Höhe werden mit Exponentialfunktionen der vorhergesagten Werte skaliert.
Ankerboxgrößen für einen Datensatz auswählen#
Ankerboxen, deren Formen zu den Objekten eines Datensatzes passen, ermöglichen es mehr Objekten, eine positive Ankerbox zu erhalten, und erhöhen dadurch den erreichbaren Recall eines Detektors. Ultralytics YOLOv5 beginnt mit den 9 Ankerboxen von YOLOv3 und prüft sie vor dem Training mit AutoAnchor: Das Verfahren misst den bestmöglichen Recall der Ankerboxen für die Trainingsbeschriftungen und passt sie mit k-Means und 1.000 Generationen genetischer Optimierung neu an, sofern der Wert nicht über 0,98 liegt. Die neuen Ankerboxen werden nur übernommen, wenn sich der Recall verbessert.
Einschränkungen und ankerfreie Detektoren#
Ankerboxen verursachen drei Nachteile. Fast alle der Zehntausenden Ankerboxen in einem Bild decken den Hintergrund ab. Diese einfachen negativen Beispiele überlagern den Verlust; RetinaNet führte deshalb den Focal Loss ein, um ihr Gewicht zu verringern. Mehrere benachbarte Ankerboxen passen zu demselben Objekt, weshalb die Ausgabe eine Nicht-Maximum-Unterdrückung (NMS) benötigt, um eine Box pro Objekt zu behalten. Größen, Seitenverhältnisse und IoU-Schwellenwerte sind außerdem Hyperparameter, die je nach Datensatz und Bildgröße angepasst werden müssen.
Ankerfreie Detektoren vermeiden diese Hyperparameter, indem sie Boxen anhand von Punkten oder Schlüsselpunkten vorhersagen. Die meisten seit YOLOX im Jahr 2021 veröffentlichten Echtzeitdetektoren sind ankerfrei. Ankerboxen kommen weiterhin in ankerbasierten Detektoren wie Faster R-CNN, Mask R-CNN und RetinaNet zum Einsatz. Beim Vergleich von RetinaNet mit dem ankerfreien FCOS stellte ATSS fest, dass RetinaNet mit 9 Ankerboxen pro Position nicht genauer war als mit einer Ankerbox, sobald beide positive Beispiele auf dieselbe Weise auswählten.










