← Назад к вопросам

Есть ли детекция без anchor-box?

2.4 Senior🔥 81 комментариев
#Глубокое обучение#Машинное обучение

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI29 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Детекция объектов без anchor-box

Да, существует несколько подходов к детекции объектов без использования anchor-box (якорных блоков). Это особенно актуально в последние годы, так как anchor-free методы показывают лучшую производительность и более просты в реализации.

История развития

Anchor-based методы (R-CNN, YOLO v1-v3, SSD, Faster R-CNN) использовали предопределённые якорные блоки разных размеров и соотношений сторон. Это требовало:

  • Много ручной работы при выборе anchor размеров
  • Сложную матчинг процедуру между ground truth и anchors
  • Много гиперпараметров

Anchor-free методы избегают этих проблем.

Основные anchor-free подходы

1. CornerNet (2018)

Обнаруживает объекты как пары углов (top-left и bottom-right).

# Принцип работы
# 1. Предсказываем тепловые карты для левых-верхних углов
# 2. Предсказываем тепловые карты для правых-нижних углов
# 3. Объединяем углы, которые принадлежат одному объекту

from cornernet_lite import CornerNet

model = CornerNet(num_classes=80)  # COCO dataset
# Входное изображение -> Backbone -> Heatmaps for corners

Преимущества:

  • Без якорей и NMS
  • Проще обнаруживать объекты с необычными пропорциями

Недостатки:

  • Сложнее в реализации
  • Медленнее чем YOLO

2. CenterNet (2019)

Обнаруживает объекты по центру и предсказывает их размер.

# Концепция: один объект = одна точка в центре

from torchvision.models.detection import fasterrcnn_resnet50_fpn

# CenterNet выходной формат:
# center_heatmap: (H, W) - вероятность наличия объекта
# size_map: (H, W, 2) - высота и ширина объекта
# offset_map: (H, W, 2) - смещение от grid ячейки к центру

# Inference:
detections = []
for y, x in center_locations:
    w, h = size_map[y, x]
    offset_y, offset_x = offset_map[y, x]
    # Реальный центр: (x + offset_x) * stride, (y + offset_y) * stride
    bbox = [x - w/2, y - h/2, x + w/2, y + h/2]
    detections.append(bbox)

Преимущества:

  • Простая идея - один объект = одна точка
  • Быстрый inference
  • Не требует NMS

3. YOLO v4-v8 (anchor-free версии)

Новые версии YOLO постепенно отошли от anchors:

from ultralytics import YOLO

# YOLOv8 - полностью anchor-free
model = YOLO(yolov8n.pt)  # nano version
results = model(image_path)

# YOLOv8 предсказывает:
# - Вероятность объекта в каждой ячейке сетки
# - Прямые координаты bbox (x_center, y_center, width, height)
# - Классы объектов

# Без якорей -> проще, быстрее, лучше

4. FCOS (Fully Convolutional One-Stage Object Detection)

Обрабатывает каждый пиксель как потенциальный центр объекта.

# Каждый пиксель в feature map может быть центром bbox
# Предсказываем для каждого пикселя:
# - Вероятность содержить центр объекта
# - Расстояния до четырёх сторон объекта (left, right, top, bottom)

from fcos_core.config import cfg
from fcos_core.modeling.detector import build_detection_model

model = build_detection_model(cfg)
# Выход: class_logits, bbox_regression

# Для пиксела (i, j):
# bbox = [x - left, y - top, x + right, y + bottom]

Преимущества FCOS:

  • Полностью свёрточная архитектура
  • Каждый пиксель - потенциальный центр
  • Не требует ручного выбора anchor размеров

5. RepPoints (Representational Points)

Объект представляется набором репрезентативных точек.

# Вместо bbox, предсказываем N точек, которые хорошо
# описывают форму объекта

# Например, 9 точек расположены так:
#  1 - 2 - 3
#  |   |   |
#  4 - 5 - 6  (5 - центр)
#  |   |   |
#  7 - 8 - 9

# Эти точки можно преобразовать в bbox, но они 
# более гибкие для сложных форм

Сравнение подходов

МетодПространство поискаПростотаСкоростьТочность
Anchor-basedДискретное (anchors)СложноСредняя80-85%
CornerNetУглыСложноМедленно85-87%
CenterNetЦентр + размерПростоБыстро85-88%
FCOSКаждый пиксельСреднеБыстро86-89%
YOLOv8Сетка (без anchors)ПростоОчень быстро87-89%
RepPointsРепрезентативные точкиСреднеБыстро88-90%

Почему anchor-free лучше?

  1. Меньше гиперпараметров — не нужно выбирать anchor sizes и ratios

  2. Более гибкий поиск — не привязаны к предопределённым формам

  3. Проще реализация — нет сложного matching между GT и anchors

  4. Лучшая обобщаемость — лучше работает на новых доменах

  5. Быстрее inference — без NMS или с более простой версией

Практический пример с YOLOv8

from ultralytics import YOLO
import cv2

# Загрузить модель
model = YOLO(yolov8m.pt)  # medium version

# Детекция на изображении
results = model(image.jpg, conf=0.5)

# Результаты
for r in results:
    for box in r.boxes:
        x1, y1, x2, y2 = box.xyxy[0]  # координаты
        confidence = box.conf[0]  # уверенность
        class_id = box.cls[0]  # класс объекта
        
        print(f"Object: class={class_id}, conf={confidence}")
        print(f"BBox: ({x1}, {y1}) to ({x2}, {y2})")

# Без anchors, без NMS, просто и эффективно!

Современный тренд

Все новые методы (YOLO v8, RTMDet, YOLOv10, Faster R-CNN v3 с anchor-free веткой) движутся в сторону anchor-free подходов, потому что они:

  • Дают лучшую точность
  • Требуют меньше настроек
  • Работают быстрее
  • Проще в разработке

Заключение

Да, детекция без anchor-box не только возможна, но и становится стандартом в индустрии. Современные модели вроде YOLOv8, FCOS и CenterNet демонстрируют, что anchor-free подходы превосходят старые anchor-based методы по всем ключевым метрикам.

Есть ли детекция без anchor-box? | PrepBro