Глава 8. FPN / PAN

Глава 8. Сдвигая горы: Пирамиды признаков (FPN / PAN)

На глубоких слоях сеть знает, что перед ней, но забыла, где это.
На ранних слоях она знает, где, но ещё не поняла, что.

Одностадийный детектор из главы 7 смотрит один раз.
Но «один раз» на каком масштабе признаков?

Если только на самом глубоком тензоре после ×32 downsampling, мелкие объекты превращаются в один «пиксель смысла».
Если только на ранних картах — есть координаты, нет семантики.

Нужен механизм, который сшивает масштабы.


8.1. Семантика против локализации

Типичный backbone после стека stride-2:

Масштабы backbone

Детали против семантики

Конфликт:

Уровень Плюс Минус
Ранний Острые края, мелкие объекты Слабый контекст, «глупые» признаки
Глубокий Классово богатые признаки Плохая геометрия, смерть мелочи

Детектору нужны оба мира сразу.


8.2. Путь сверху вниз: FPN

Идея Feature Pyramid Network (упрощённо):

  1. взять самый глубокий признак (много смысла);
  2. увеличить его пространственно (upsample);
  3. сложить/слить с более ранней картой того же размера;
  4. повторить вниз по пирамиде.

FPN сверху вниз и PAN снизу вверх

Смысл операции FPN:

Глубокий слой говорит: «здесь примерно машина».
Ранний слой говорит: «края вот тут».
Слияние даёт карту, где есть и класс, и геометрия.

Это и есть top-down путь: семантика стекает вниз на более высокое разрешение.

Обмен:

Получили Чем заплатили
Многомасштабные головы Доп. память и latency на шее
Лучше мелкие объекты Нужно аккуратно сливать каналы
Единый язык признаков по уровням Сложнее отлаживать, чем один выход

8.3. Путь снизу вверх: PAN

FPN отлично раздаёт смысл вниз.
Но точная локализация, родившаяся внизу, не всегда достаточно сильно возвращается наверх.

YOLO-семейство (начиная с линии v4 и дальше) усиливает шею вторым проходом — bottom-up aggregation (PAN и родственники):

PAN bottom-up

После top-down делаем ещё один подъём: детали и точные границы помогают более глубоким уровням.

Интуиция:

FPN:   «умное»  →  подтягиваем к «чёткому»
PAN:   «чёткое» →  подтягиваем обратно к «умному»

В сумме шея (Neck) становится не тонкой трубочкой, а двусторонней развязкой масштабов.

flowchart TD
    B[Backbone C3/C4/C5] --> FPN[FPN top-down]
    FPN --> PAN[PAN bottom-up]
    PAN --> H1[Head /8]
    PAN --> H2[Head /16]
    PAN --> H3[Head /32]

Именно поэтому в современных детекторах так много линий со стрелками между уровнями: это не украшение схемы, а плата за одновременную жизнь муравья и грузовика в одном кадре.


8.4. SPP/SPPF: ещё один ответ на масштаб — внутри уровня

Пока мы сшивали разные уровни пирамиды.
Есть родственная боль: даже на одном тензоре рецептивное поле фиксировано.

Spatial Pyramid Pooling (и быстрый SPPF) агрегирует контекст разными окнами pooling и склеивает:

SPP / SPPF

Это не замена FPN.
Это усилитель «разного зрения» на самом глубоком (или выбранном) уровне перед раздачей по шее.

В книге про мышление архитектора важно разделить:

Инструмент Какую боль лечит
SPP/SPPF Мало контекста при фиксированном поле зрения
FPN Семантика не доходит до высокого разрешения
PAN Детали/локализация слабо идут обратно наверх
Много голов Разным размерам объектов нужны разные ответы

8.5. Итог главы

Один проход ≠ один масштаб

  • Backbone даёт башню признаков
  • FPN раздаёт смысл вниз
  • PAN возвращает геометрию вверх
  • Головы читают несколько уровней параллельно

Мы почти собрали современный детектор логически.
Не хватает последнего большого ускорителя внутри самого хребта: зачем прогонять все каналы через все тяжёлые блоки, если часть информации можно провести транзитом.


Если бы вы были автором статьи…

  1. Уберите PAN, оставьте FPN. Каких объектов станет больше в ошибках — крупных или мелких? Как измерите?

  2. Три головы против одной. Придумайте критерий, когда третья голова (например /8) не окупает latency.

  3. Вместо сложения признаков на слиянии поставьте attention.
    Какую гипотезу вы проверяете? Чем ваш эксперимент отличается от «просто RT-DETR»?

Следующая глава — CSP и C2f: экономия вычислений без обнуления глубины.