Что такое RoIAlign и почему он точнее RoIPool?
Ответ от нейросети
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)
Пояснение кода:
Код не требуется, но смысл работы такой:
- На вход подается feature map, полученная после backbone-сети.
- Для каждой области RoI берутся координаты без жесткого округления.
- Внутри RoI выбираются точки семплирования.
- Значения в этих точках вычисляются интерполяцией по соседним пикселям feature map.
- Итоговый тензор приводится к фиксированному размеру, например 7×7, 14×14 или другому.
Это позволяет подать признаки одинакового размера в последующие head-сети для классификации, регрессии и маски.
Ключевые моменты:
- RoIPool округляет координаты RoI, RoIAlign — нет.
- RoIAlign использует интерполяцию, обычно bilinear, вместо грубого pooling по дискретным ячейкам.
- Главная причина точности RoIAlign — отсутствие quantization error.
- Особенно полезен в segmentation и instance segmentation, где важны границы объектов.
- Улучшает выравнивание признаков с исходной геометрией объекта.
- В Mask R-CNN именно RoIAlign стал одной из ключевых причин роста качества по сравнению с RoIPool.