Anchor-Based Detectors
Детекторы на основе анкеров предсказывают объекты как смещения относительно заранее заданных анкерных рамок, как в Faster R-CNN, SSD, RetinaNet и YOLOv5. Принцип работы и сравнение.
Детекторы на основе анкеров — это модели обнаружения объектов, которые размещают на изображении заранее заданные анкерные боксы и для каждого анкера предсказывают оценки классов и смещения, превращающие его в подходящий ограничивающий бокс. К этому семейству относятся двухэтапные модели, например Faster R-CNN, сеть генерации регионов которой оценивает анкеры и формирует регионы-кандидаты, а также одноэтапные модели, например SSD, RetinaNet и YOLOv2–YOLOv5, которые сразу классифицируют и уточняют каждый анкер. Анкеры были стандартным способом локализации объектов с момента появления Faster R-CNN в 2015 году до 2019 года, когда детекторы без анкеров, например FCOS, сравнялись с ними по точности.
Как работает обнаружение на основе анкеров#
Бэкбон и шея преобразуют изображение в карты признаков, а в каждой ячейке каждой карты располагается фиксированный набор анкеров разных размеров и соотношений сторон. Для каждого анкера голова детектора предсказывает оценку каждого класса, а в YOLOv2–YOLOv5 также оценку объектности и четыре значения регрессии. Широко используемое кодирование из Faster R-CNN сдвигает центр анкера на доли его ширины и высоты, а ширину и высоту масштабирует экспоненциально:
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})")Якорь становится рамкой размером 78.2 × 121.8 пикселя с центром в точке (336.0, 227.2): он сместился на 16 пикселей вправо и на 12.8 пикселя вверх, стал шире на 22% (exp(0.2)) и ниже на 5% (exp(−0.05)). Поскольку смещения заданы относительно размера якоря, одни и те же предсказанные значения подходят для маленьких и больших якорей.
Во время инференса детектор декодирует каждый анкер таким образом, отбрасывает боксы ниже порога уверенности и применяет подавление немаксимумов (NMS), чтобы удалить дубликаты от соседних анкеров.
Обучение: разметка каждого анкера#
Во время обучения каждому анкеру назначается метка на основе его пересечения над объединением (IoU) с размеченными боксами. RetinaNet использует следующие пороги:
Сеть генерации регионов Faster R-CNN использует более строгие значения: 0,7 и 0,3. На пяти уровнях пирамиды RetinaNet размещает по 9 анкеров в каждой точке, всего около 100 000 анкеров на изображение. Почти все они отрицательные, и фокальная функция потерь уменьшает вес простых отрицательных примеров, чтобы они не перегружали обучение.
Основные архитектуры на основе анкеров#
- Двухэтапные детекторы: Сеть генерации регионов Faster R-CNN оценивает анкеры как объекты или фон и уточняет их, получая около 300 предложений на изображение; затем вторая голова классифицирует и уточняет каждое предложение. С бэкбоном VGG-16 модель работала со скоростью 5 FPS на GPU; Mask R-CNN добавляет к той же архитектуре ветвь масок.
- Одноэтапные детекторы объектов: SSD, RetinaNet и модели YOLO от YOLOv2 до YOLOv5 классифицируют и уточняют каждый анкер за один проход. YOLOv2 заменила анкеры, выбранные вручную, кластерами ширины и высоты обучающих боксов, полученными методом k-средних.
Ultralytics YOLOv5 использует анкеры: по 3 анкера на каждом из трёх выходных уровней. Она сопоставляет метки и анкеры по форме: анкер становится кандидатом, если ширина и высота метки отличаются от ширины и высоты анкера не более чем в 4 раза. Варианты YOLOv5u из пакета Ultralytics заменяют эту голову на безанкерную раздельную голову, впервые представленную в YOLOv8 и сохранённую в YOLO26.
Детекторы с анкерами и без них#
Детекторы без анкеров предсказывают бокс для каждой точки сетки — как расстояния до четырёх краёв — или используют ключевые точки, например центры объектов. Поэтому им не нужно настраивать размеры анкеров, соотношения сторон и пороги IoU, и они создают одного кандидата на точку, а не по одному на каждую форму анкера. ATSS выяснила, что разница в точности между RetinaNet и детектором без анкеров FCOS объяснялась тем, как каждая модель выбирала положительные обучающие примеры: при одинаковом правиле выбора обе достигали одинаковой точности. RetinaNet набрала 39,2 AP на мини-выборке COCO с 9 анкерами на точку и 39,3 AP с одним.










