Какие вариации anchor-free детекторов объектов вы знаете?

Ответ

В компьютерном зрении я экспериментировал с 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) из-за ее простоты и хорошей производительности.

Ответ 18+ 🔞

А, слушай, вот тут про anchor-free детекцию расскажу — это вообще отдельная песня, блядь. Я с этими подходами так намучился, что ебать мои старые костыли, но в итоге-то понял, в чём прикол.

Ну, короче, вся фишка в том, чтобы нахуй выкинуть эти предзаданные якоря (anchors), которые как будто на дворе 2012-й год. Вместо этого модель учится находить объекты как точки или пиксели — и это, сука, овердохуища упрощает весь пайплайн.

1. Детекторы на основе ключевых точек (Keypoint-based) Вот CenterNet (Objects as Points) — это моя любовь и боль одновременно, ёпта. Там объект — это просто одна точка, его центр. А всё остальное (ширина, высота, ориентация в 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]

Что хорошо: Архитектура проще некуда, расширяется на раз — хоть позу людей детекть, хоть хвост кошке считать. Но, чувак, если heatmap криво обучена — пиши пропало, будет тебе хиросима и нигерсраки на выходе.

2. Пиксельные детекторы (Pixel-wise / Dense Prediction) FCOS — тут уже для каждого пикселя на карте признаков предсказывается, он ли это объект и сколько от него до каждой границы bounding box. Я его юзал, когда объекты были от мухи до слона на одном кадре. Работает, но иногда такая плотная предсказательная сетка начинает бздеть дубликатами — терпения ноль, ебать.

3. Детекторы на основе пар точек (Corner-based) CornerNet — вот это, блядь, ёперный театр. Модель ищет верхний левый и нижний правый углы объектов, а потом пытается их склеить. И представляешь, когда объекты друг на друге лежат, эта группировка превращается в пизда рулю. Получается такая манда с ушами — углов дохуя, а какие к кому относятся, хуй поймёшь. Я с ней довольно быстро забил.

Так что в итоге, сука?

  • Anchor-free vs Anchor-based: Anchor-free — это как машина на автомате: нет этих ёбаных гиперпараметров якорей, которые подбирать надо. Обучается часто быстрее, и если объект вытянутый как хуй с горы, а не квадратный — anchor-free его найдёт без проблем.
  • Проблемы: Главная засада — дублирующие детекции. В том же CenterNet это решается поиском пиков на heatmap (типа локальных максимумов), но если два центра объекта рядом — один из них может подавиться. Волнение, ебать!
  • YOLOv8: Это вообще показатель. Ребята в Ultralytics уже по умолчанию в YOLOv8 используют anchor-free. Весь мир, сука, понял, что так проще и чаще лучше.

Так что для нового проекта я бы, не думая, взял anchor-free архитектуру — какую-нибудь производную от CenterNet или тот же YOLOv8. Простота какая-то обалденная, и производительность на уровне, а то и выше. Главное — данные нормально разметить и loss-функции не накосячить, а то будет не детекция, а цирк с конями.