Ответ
В компьютерном зрении я экспериментировал с anchor-free подходами, которые упрощают pipeline детекции, избавляясь от предзаданных якорей (anchors). Основные семейства:
1. Детекторы на основе ключевых точек (Keypoint-based) CenterNet (Objects as Points) – модель, с которой у меня был наибольший практический опыт. Она детектирует объект как одну точку (центр bounding box) и регрессирует его размеры и другие атрибуты (например, ориентацию в 3D).
# Псевдокод логики вывода CenterNet
heatmap = model(image) # [H, W, C] - карта вероятностей центров классов
scores, indices = torch.topk(heatmap.flatten(), k=100) # Выбор топ-N центров
for score, idx in zip(scores, indices):
y, x = divmod(idx, heatmap.shape[1])
width, height = regress_size(y, x) # Регрессия размеров из отдельных голов
bbox = [x - width/2, y - height/2, x + width/2, y + height/2]
Преимущества: Простая и элегантная архитектура, легко расширяется (например, для оценки позы).
2. Пиксельные детекторы (Pixel-wise / Dense Prediction) FCOS (Fully Convolutional One-Stage) – детектирует объект для каждого пикселя feature map, предсказывая расстояние до границ bounding box (left, right, top, bottom) и класс. Я использовал его для задач, где объекты могли быть сильно разного масштаба.
3. Детекторы на основе пар точек (Corner-based) CornerNet – предсказывает пары верхнего левого и нижнего правого углов, а затем группирует их. На практике я столкнулся со сложностью корректной группировки углов на сцене с множеством перекрывающихся объектов.
Сравнение и мой опыт:
- Anchor-free vs Anchor-based: Anchor-free модели проще (нет гиперпараметров якорей), часто быстрее обучаются и лучше справляются с объектами нестандартных пропорций.
- Проблемы: Основная сложность – подавление дублирующих детекций (NMS). В CenterNet это решается выбором пиков на heatmap.
- YOLOv8: Современные фреймворки, такие как Ultralytics YOLOv8, используют anchor-free подход по умолчанию, что подтверждает тренд в индустрии.
Для нового проекта я бы выбрал anchor-free архитектуру (например, на основе CenterNet или YOLOv8) из-за ее простоты и хорошей производительности.