Anchor-Free Detectors
Os detetores sem âncoras preveem caixas a partir de pontos ou pontos-chave, sem caixas-âncora predefinidas. Como FCOS, CenterNet e os modelos YOLO modernos encontram objetos.
Os detetores sem âncoras são modelos de deteção de objetos que preveem diretamente cada caixa delimitadora a partir de um ponto num mapa de características, ou de pontos-chave, como os cantos ou o centro de um objeto, sem recorrer a um conjunto de caixas-âncora predefinidas. Uma localização próxima de um objeto prevê as distâncias entre si e as quatro extremidades do objeto, ou um pico num mapa de calor assinala o centro do objeto e a rede estima a respetiva largura e altura. Isto elimina os tamanhos de âncora, as proporções e os limiares de associação de âncoras que os detetores baseados em âncoras têm de ajustar para cada conjunto de dados; as cabeças sem âncoras tornaram-se o desenho padrão para a deteção em tempo real.
Como funciona a deteção sem âncoras#
Os detetores sem âncoras dividem-se em duas famílias:
- Detetores baseados em pontos, como o FCOS: Cada célula de cada nível do mapa de características é um candidato. O FCOS (2019) prevê, em cada localização dentro de um objeto, as pontuações de classe e quatro distâncias — às extremidades esquerda, superior, direita e inferior — além de uma pontuação de centralidade que reduz o peso das caixas previstas a partir de pontos afastados do centro do objeto.
- Detetores baseados em pontos-chave, como o CornerNet e o CenterNet: O CornerNet (2018) prevê mapas de calor dos cantos superior esquerdo e inferior direito e associa os cantos pertencentes ao mesmo objeto com embeddings aprendidos. O CenterNet prevê um mapa de calor dos centros dos objetos e estima a largura e a altura em cada pico, extraindo os picos com uma operação de max pooling 3 × 3, pelo que não precisa de supressão não máxima baseada em IoU (NMS).
A previsão sem âncoras também antecede as âncoras na linha YOLO: o YOLOv1, em 2015, previa caixas diretamente a partir da célula da grelha que continha o centro de cada objeto, e a introdução de caixas-âncora no YOLOv2 aumentou o recall de 81% para 88%, com um custo de 0,3 pontos de mAP. O YOLOX trouxe o desenho denso baseado em pontos de volta ao YOLO em 2021, e a Ultralytics substituiu as âncoras do YOLOv5 por uma cabeça sem âncoras no YOLOv8, em 2023, pelo que os conjuntos de dados personalizados já não precisam de uma etapa de ajuste de âncoras; o YOLO26 mantém esse desenho.
Para descodificar uma previsão densa sem âncoras, basta conhecer a posição da célula e as quatro distâncias previstas:
import torch
# Center of the grid cell at column 10, row 6 of a stride-16 feature map, in image pixels
stride = 16
point = (torch.tensor([10.0, 6.0]) + 0.5) * stride
# Distances the head predicts from that point to the left, top, right, and bottom box edges, in strides
ltrb = torch.tensor([2.0, 3.5, 1.5, 4.0]) * stride
# Anchor-free decoding: no template box, only the point and four distances
x1, y1 = point - ltrb[:2]
x2, y2 = point + ltrb[2:]
print(f"point {point.tolist()} -> box ({x1:.0f}, {y1:.0f}, {x2:.0f}, {y2:.0f})")O ponto em (168, 104) transforma-se na caixa (136, 48, 192, 168), com 56 píxeis de largura e 120 píxeis de altura. Uma cabeça densa aplica esta descodificação a cada célula de cada nível piramidal, pelo que cada célula produz uma caixa candidata.
Escolher os pontos que aprendem cada objeto#
Sem âncoras para comparar com as caixas anotadas através da interseção sobre união (IoU), um detetor sem âncoras precisa de outra regra para determinar quais pontos contam como amostras positivas de treino. O FCOS utiliza a posição e o tamanho: um ponto é positivo se estiver dentro de uma caixa anotada e se a sua maior distância às extremidades dessa caixa estiver dentro do intervalo do nível piramidal do ponto: 0 a 64 píxeis no nível de stride 8, 64 a 128 no stride 16, e assim sucessivamente até ao stride 128.
Os detetores posteriores escolhem as amostras positivas de forma adaptativa. O ATSS mostrou que a diferença de precisão entre o RetinaNet baseado em âncoras e o FCOS sem âncoras se devia principalmente à forma como cada um definia as amostras positivas e negativas e que, utilizando a mesma regra de amostragem, distribuir várias âncoras por localização não trazia qualquer benefício. A atribuição alinhada com a tarefa, introduzida pelo TOOD e adotada pelo PP-YOLOE e por muitos detetores em tempo real posteriores, ordena os pontos dentro de cada objeto com base num produto ponderado da pontuação de classe prevista e da IoU da caixa e mantém os primeiros como positivos.
Detetores sem âncoras vs. baseados em âncoras#
- Menos hiperparâmetros: Não é necessário ajustar os tamanhos das âncoras, as proporções ou os limiares de associação de IoU para cada conjunto de dados, uma etapa que os detetores baseados em âncoras costumam tratar com agrupamento k-means das caixas de treino.
- Flexibilidade de forma: A atribuição baseada em pontos depende apenas da localização do objeto; assim, um objeto cuja forma não se assemelhe a nenhuma âncora, como um tubo comprido e fino, continua a receber amostras positivas.
- Vocabulário comum: Muitos repositórios de código sem âncoras continuam a chamar «pontos-âncora» aos pontos da grelha, referindo-se a uma localização sem tamanho nem proporção.
- Menos previsões: Cada localização prevê uma caixa, em vez de uma por forma de âncora, pelo que a descodificação e a NMS processam várias vezes menos candidatos; as 9 âncoras por localização do RetinaNet totalizam cerca de 100 000 candidatos por imagem.










