Anchor Boxes
Анкерные рамки — это заранее заданные рамки фиксированных размеров и соотношений сторон, которые детектор сдвигает и изменяет, чтобы подогнать под объекты. Как их задают, сопоставляют и используют.
Анкерные боксы — это заранее заданные прямоугольники фиксированного размера и соотношения сторон, размещаемые в каждой точке карт признаков детектора. Они служат начальными предположениями о расположении и форме объектов. Детектор на основе анкеров оценивает каждый анкер для каждого класса и предсказывает небольшие смещения, которые перемещают и масштабируют анкер под объект. Это проще для обучения, чем предсказывать бокс с нуля. Faster R-CNN размещает 9 анкеров в каждой точке: три площади (128², 256² и 512² пикселей) умножаются на три соотношения сторон (1:1, 1:2 и 2:1). Для изображения размером 1000 × 600 это даёт примерно 20 000 анкеров.
Как задаются анкеры#
Набор анкеров — это список размеров и соотношений сторон, повторяемый в каждой ячейке карты признаков, поэтому число анкеров равно количеству ячеек × числу форм в ячейке. Детекторы с пирамидальной сетью признаков (FPN) назначают маленькие анкеры детализированным уровням с высоким разрешением, а большие — грубым уровням: RetinaNet использует 9 анкеров на точку на каждом из пяти уровней — около 100 000 на изображение. В SSD они называются боксами по умолчанию; SSD300 размещает 8 732 таких бокса.
Формы, выбранные вручную, плохо подходят для некоторых наборов данных, поэтому YOLOv2 применяла кластеризацию k-средних к ширине и высоте обучающих боксов, используя 1 − IoU в качестве расстояния, и выбрала центры 5 кластеров как анкеры. YOLOv3 кластеризовала 9 анкеров и равномерно распределила их по трём шагам выходных данных: от 10 × 13 пикселей на уровне с шагом 8 до 373 × 326 на уровне с шагом 32.
Сопоставление анкеров с объектами#
Во время обучения каждый анкер сравнивается со всеми размеченными боксами по пересечению над объединением (IoU). Анкеры с достаточным перекрытием с объектом становятся положительными примерами и обучаются предсказывать класс объекта и смещения для его ограничивающего бокса; анкеры с небольшим перекрытием становятся отрицательными примерами и обучаются предсказывать «фон», а анкеры между этими категориями игнорируются. Сеть генерации регионов Faster R-CNN считает положительными анкеры с IoU не менее 0,7, а отрицательными — с IoU ниже 0,3. Кроме того, она помечает как положительный анкер, лучше всего совпадающий с каждым объектом, чтобы ни один объект не остался без соответствующего анкера.
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}")Достаточно сильно с пешеходом перекрывается только высокий анкер размером 128 пикселей (соотношение сторон 2,0): его IoU равен 0,88. Два других анкера размером 128 пикселей с IoU 0,31 и 0,50 игнорируются, а шесть анкеров неподходящего размера считаются отрицательными. Затем положительный анкер обучается предсказывать смещения в стандартной параметризации: центр сдвигается на доли ширины и высоты анкера, а ширина и высота масштабируются экспоненциально от предсказанных значений.
Подбор размеров анкеров для набора данных#
Анкеры, соответствующие формам объектов в наборе данных, дают большему числу объектов положительный анкер, повышая максимальную достижимую полноту детектора. Ultralytics YOLOv5 начинает с 9 анкеров YOLOv3 и проверяет их до обучения с помощью AutoAnchor: она измеряет максимально возможную полноту этих анкеров на обучающих метках и, если она не превышает 0,98, подбирает анкеры заново с помощью k-средних и 1 000 поколений генетической эволюции. Новые анкеры сохраняются, только если полнота повышается.
Ограничения и детекторы без анкеров#
Анкеры создают три проблемы. Почти все десятки тысяч анкеров на изображении покрывают фон, из-за чего функция потерь перегружается простыми отрицательными примерами; RetinaNet ввела фокальную функцию потерь, чтобы уменьшить их вес. Несколько соседних анкеров подходят одному и тому же объекту, поэтому для выбора одного бокса на объект требуется подавление немаксимумов (NMS). Кроме того, размеры, соотношения сторон и пороги IoU — это гиперпараметры, которые приходится менять для каждого набора данных и размера изображения.
Детекторы без анкеров устраняют эти гиперпараметры, предсказывая боксы по точкам или ключевым точкам. Большинство детекторов реального времени, выпущенных после YOLOX в 2021 году, не используют анкеры. Анкеры сохранились в детекторах на основе анкеров, таких как Faster R-CNN, Mask R-CNN и RetinaNet. Сравнивая RetinaNet с детектором без анкеров FCOS, ATSS показала: когда обе модели одинаково выбирали положительные примеры, RetinaNet с 9 анкерами на точку была не точнее, чем с одним.










