Object Detection
Anchor-based (Faster R-CNN, SSD) и anchor-free (FCOS, CenterNet) детекторы. Non-Maximum Suppression (NMS).
Object Detection — что и где на картинке
Классификация отвечает на вопрос «что на картинке?». Detection — «что и где?». Для каждого объекта нужно предсказать bounding box (x, y, w, h) и класс. На одном изображении может быть 0, 1, 100 объектов — модель не знает заранее сколько. Это принципиально сложнее классификации.
Эволюция: от R-CNN к anchor-free
R-CNN (2014) — первый deep learning детектор. Алгоритм: 1) Selective Search генерирует ~2000 region proposals, 2) каждый region ресайзится и прогоняется через CNN (AlexNet), 3) SVM классифицирует. Проблема: 2000 forward passes = очень медленно (47 секунд на изображение).
Fast R-CNN (2015) — один forward pass через CNN для всего изображения, потом ROI Pooling вырезает фичи для каждого proposal. 25× быстрее R-CNN. Но Selective Search всё ещё bottleneck.
Faster R-CNN (2015) — заменяет Selective Search на Region Proposal Network (RPN) — маленькую CNN, которая предсказывает proposals прямо из feature map. End-to-end обучение. 5 fps на GPU — впервые пригоден для near-real-time.
Anchor-based детекторы
Anchors — предзаданные bounding boxes разных размеров и пропорций (aspect ratios) в каждой позиции feature map. Модель предсказывает не абсолютные координаты, а смещения (offsets) относительно anchor-ов + вероятность объекта.
Faster R-CNN — two-stage детектор: 1. Stage 1 (RPN): для каждого anchor предсказывает objectness score + bbox refinement → генерирует ~300 proposals 2. Stage 2 (ROI Head): для каждого proposal — классификация + финальная коррекция bbox Два стейджа дают высокую точность, но добавляют latency.
SSD (Single Shot Detector, 2016) — one-stage детектор. Предсказывает классы и bbox для anchors на нескольких масштабах feature map (multi-scale detection). Быстрее Faster R-CNN, но менее точен для мелких объектов.
RetinaNet (2017) — one-stage с Focal Loss. Проблема one-stage детекторов: 99% anchors — фон (easy negatives), модель не учится на hard examples. Focal Loss: FL(p) = -α(1-p)^γ log(p) — снижает вклад easy examples, фокусируется на трудных. Сравнялся с two-stage по точности.
Anchor-free детекторы
Anchors — гиперпараметры (размеры, ratios, количество). Их нужно подбирать под датасет. Anchor-free детекторы убирают эту зависимость:
- FCOS (2019) — предсказывает для каждого пикселя feature map расстояния до 4 сторон bounding box (l, t, r, b) + «centerness» score. Нет anchors, нет proposals.
- CenterNet (2019) — предсказывает heatmap центров объектов + размеры bbox. Объект = пик на heatmap. Элегантно и быстро.
- DETR (2020) — трансформер для detection. Набор learnable queries → attention к feature map → прямое предсказание bbox + класс. Нет NMS, нет anchors. Красивая архитектура, но медленно сходится.
Non-Maximum Suppression (NMS)
Детектор выдаёт много overlapping predictions для одного объекта. NMS фильтрует дубликаты:
def nms(boxes, scores, iou_threshold=0.5):
"""Non-Maximum Suppression — удаляем дублирующие боксы."""
order = scores.argsort()[::-1] # сортируем по confidence
keep = []
while len(order) > 0:
i = order[0]
keep.append(i)
if len(order) == 1:
break
# IoU текущего бокса со всеми оставшимися
ious = compute_iou(boxes[i], boxes[order[1:]])
# Убираем боксы с IoU > порога (они про тот же объект)
mask = ious <= iou_threshold
order = order[1:][mask]
return keepВарианты NMS: Soft-NMS (снижает confidence вместо удаления), Weighted NMS (усредняет координаты overlapping boxes). DETR не нуждается в NMS — Hungarian matching даёт уникальные predictions.
Feature Pyramid Network (FPN)
Объекты бывают разных размеров. Мелкие объекты лучше видны на ранних (high-resolution) feature maps, крупные — на глубоких (low-resolution). FPN строит пирамиду: top-down pathway с lateral connections. Каждый уровень пирамиды отвечает за свой масштаб объектов.
FPN — стандартный компонент в Faster R-CNN, RetinaNet, Mask R-CNN, YOLO. Без FPN детекторы плохо работают на мелких объектах.
🎯 На собеседовании
Ключевые вопросы
Материалы
Основополагающая работа по two-stage detection. RPN + ROI Pooling.
Anchor-free detection — простой и эффективный подход.
Оригинальная R-CNN — для понимания эволюции подходов.