Sobes.tech
Back to questions
Middle — Senior
15

Что такое RoIAlign и почему он точнее RoIPool?

Companies where asked
IGaming
X5 techX5 tech

Answer from AI

sobes.tech AI

Что хотят услышать интервьюеры:

RoIAlign — это способ извлечения признаков из области интереса без округления координат. В отличие от RoIPool, он не теряет точность из-за квантования и лучше сохраняет пространственную информацию. Это особенно важно для задач детекции и сегментации, где критичны границы объектов.

Определение:

RoIAlign — это операция, которая берет прямоугольную область интереса на feature map и преобразует ее в фиксированный размер, но без грубого округления координат и без max-pooling по заранее “сдвинутым” ячейкам. Вместо этого значения семплируются в точках с помощью интерполяции, обычно bilinear, что позволяет точнее сопоставить признаки с исходной областью.

RoIPool делает координаты области дискретными: границы RoI округляются, а затем область делится на ячейки для pooling. Это вносит ошибку выравнивания, особенно при мелких объектах или задачах, где нужна высокая точность по пикселям.

Пример использования:

В Mask R-CNN RoIAlign используют для извлечения признаков каждого объекта перед классификацией, регрессией bounding box и предсказанием маски.

# Концептуальный пример: извлечение признаков для одного RoI
# feature_map: тензор признаков от backbone
# roi: координаты прямоугольника на изображении/feature map

aligned_features = roi_align(feature_map, roi, output_size=(7, 7))
# далее:
# class_logits = classifier(aligned_features)
# bbox_deltas = box_regressor(aligned_features)
# mask = mask_head(aligned_features)

Пояснение кода:

Код не требуется, но смысл работы такой:

  1. На вход подается feature map, полученная после backbone-сети.
  2. Для каждой области RoI берутся координаты без жесткого округления.
  3. Внутри RoI выбираются точки семплирования.
  4. Значения в этих точках вычисляются интерполяцией по соседним пикселям feature map.
  5. Итоговый тензор приводится к фиксированному размеру, например 7×7, 14×14 или другому.

Это позволяет подать признаки одинакового размера в последующие head-сети для классификации, регрессии и маски.

Ключевые моменты:

  • RoIPool округляет координаты RoI, RoIAlign — нет.
  • RoIAlign использует интерполяцию, обычно bilinear, вместо грубого pooling по дискретным ячейкам.
  • Главная причина точности RoIAlign — отсутствие quantization error.
  • Особенно полезен в segmentation и instance segmentation, где важны границы объектов.
  • Улучшает выравнивание признаков с исходной геометрией объекта.
  • В Mask R-CNN именно RoIAlign стал одной из ключевых причин роста качества по сравнению с RoIPool.