Anchor Boxes
As caixas-âncora são caixas predefinidas, com tamanhos e proporções fixos, que um detetor desloca e redimensiona para se ajustarem aos objetos. Como são dimensionadas, associadas e utilizadas.
As caixas-âncora são retângulos predefinidos, com tamanhos e proporções fixos, dispostos em todas as posições dos mapas de características de um detetor. Servem como estimativas iniciais da localização e da forma dos objetos. Um detetor baseado em âncoras atribui uma pontuação a cada âncora para cada classe e prevê pequenos desvios que a deslocam e redimensionam para se ajustar ao objeto, o que é mais fácil de aprender do que prever uma caixa do zero. O Faster R-CNN coloca 9 âncoras em cada posição: três áreas (128², 256² e 512² píxeis) vezes três proporções (1:1, 1:2 e 2:1), o que dá cerca de 20 000 âncoras numa imagem de 1000 × 600.
Como são definidas as âncoras#
Um conjunto de âncoras é uma lista de tamanhos e proporções repetida em cada célula de um mapa de características, pelo que o número de âncoras equivale a células × formas por célula. Os detetores com uma rede piramidal de características (FPN) atribuem âncoras pequenas aos níveis finos e de alta resolução e âncoras grandes aos níveis mais grosseiros: o RetinaNet utiliza 9 âncoras por localização em cada um de cinco níveis, cerca de 100 000 por imagem. O SSD chama-lhes caixas predefinidas, e o SSD300 distribui 8732 delas.
As formas escolhidas manualmente ajustam-se mal a alguns conjuntos de dados, pelo que o YOLOv2 executou agrupamento k-means nas larguras e alturas das caixas de treino, usando 1 − IoU como distância, e manteve 5 centros de agrupamento como âncoras. O YOLOv3 agrupou 9 âncoras e distribuiu-as uniformemente pelos seus três strides de saída, desde 10 × 13 píxeis no nível de stride 8 até 373 × 326 no nível de stride 32.
Associar âncoras a objetos#
Durante o treino, cada âncora é comparada com todas as caixas anotadas através da interseção sobre união (IoU). As âncoras que se sobrepõem suficientemente a um objeto tornam-se amostras positivas e aprendem a classe desse objeto e os desvios para a sua caixa delimitadora; as âncoras com pouca sobreposição tornam-se negativas e aprendem «fundo», e as âncoras intermédias são ignoradas. A rede de propostas de regiões do Faster R-CNN considera positivas as âncoras com IoU igual ou superior a 0,7 e negativas as que ficam abaixo de 0,3; também torna positiva a âncora com melhor correspondência para cada objeto, para que nenhum objeto fique sem uma.
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}")Apenas a âncora alta de 128 píxeis (proporção 2,0) se sobrepõe o suficiente ao peão para ser positiva, com IoU de 0,88. Duas outras âncoras de 128 píxeis, com IoU de 0,31 e 0,50, são ignoradas, e as seis âncoras de tamanho inadequado são negativas. A âncora positiva aprende então os desvios segundo a parametrização padrão: o centro desloca-se por frações da largura e da altura da âncora, e a largura e a altura são escaladas exponencialmente pelos valores previstos.
Escolher os tamanhos das âncoras para um conjunto de dados#
As âncoras que correspondem às formas dos objetos de um conjunto de dados permitem que mais objetos tenham uma âncora positiva, o que aumenta o recall que um detetor pode alcançar. O YOLOv5 da Ultralytics parte das 9 âncoras do YOLOv3 e verifica-as antes do treino com o AutoAnchor: mede o recall máximo possível das âncoras nos rótulos de treino e, a menos que ultrapasse 0,98, volta a ajustá-las com k-means e 1000 gerações de evolução genética, mantendo as novas âncoras apenas se o recall melhorar.
Limitações e detetores sem âncoras#
As âncoras têm três custos. Quase todas as dezenas de milhares de âncoras numa imagem cobrem o fundo, o que faz com que a função de perda seja dominada por exemplos negativos fáceis; o RetinaNet introduziu a focal loss para lhes reduzir o peso. Várias âncoras vizinhas ajustam-se ao mesmo objeto, pelo que a saída precisa de supressão não máxima (NMS) para manter uma caixa por objeto. Os tamanhos, as proporções e os limiares de IoU também são hiperparâmetros que variam com cada conjunto de dados e tamanho de imagem.
Os detetores sem âncoras eliminam esses hiperparâmetros ao prever caixas a partir de pontos ou pontos-chave, e a maioria dos detetores em tempo real lançados desde o YOLOX, em 2021, não utiliza âncoras. As âncoras continuam a ser usadas em detetores baseados em âncoras, como Faster R-CNN, Mask R-CNN e RetinaNet. Ao comparar o RetinaNet com o FCOS sem âncoras, o ATSS concluiu que, quando ambos selecionavam as amostras positivas da mesma forma, o RetinaNet com 9 âncoras por localização não era mais preciso do que com 1.










