본문 바로가기
논문 리뷰/Object Detection

RoI(Region of Interest) Pooling 이해하기

by inhovation97 2022. 12. 1.

객체 탐지 모델을 공부하다보면, 객체를 분류함과 동시에 bbox를 추론하여 제안해야하기 때문에 일반적인 task들과는 달리 부수적인 알고리즘들이 많은 것 같습니다. 

Fast R-CNN 논문 리뷰 중 나왔던 RoI Pooling에 대해서 살펴봅니다.

 

1. RoI Pooling을 왜 쓸까?
2. RoI Pooling 원리

 

 

1. RoI( Region of Interest ) Pooling을 왜 쓸까?

 

객체 탐지 모델을 기준으로 설명합니다.

객체 탐지 모델은 CNN으로부터 획득한 Feature map을 원본 영상의 관심영역인 RoI 부분만큼만 이용합니다. 

RoI 내에 어떤 객체가 있는지 확인하려는 목적입니다. 

해당 부분만 분류하기 위해서는 FC layer로 입력해야하는데, fc layer 고정길이의 벡터만 입력으로 받기 때문에 크기가 제각각인 RoI가 문제가 됩니다.

따라서 고정 길이의 벡터로 사이즈를 제한하기 위해 RoI pooling을 이용합니다.

아래 원리를 보시면 쉽게 이해가 갈겁니다.

 

2. RoI( Region of Interest ) Pooling 원리

 

RoI projection

격자 내에는 픽셀값들이 있다고 생각하면서 RoI projection부터 봅시다!

예시로 원본 이미지는 224*224의 사이즈를 가진 이미지가 입력됩니다. 

관심영역이 빨간색의 얼굴 부분으로 RoI가 뽑혔습니다. 

이후 ConvNet을 통해 1/32 압축되어 7*7로 이미지가 줄어 들었다고 가정해봅시다.

 

RoI좌표는 (r,c,w,h)좌표 r,c는 좌상단의 픽셀좌표이며 h,w는 RoI의 크기입니다. 

projection 이전 (80, 30, 95, 50) 80, 30의 좌상단 픽셀부터 130, 50크기를 갖는 RoI 좌표를 가정합시다.

14*14크기로 압축된 feature map에서 projection된 RoI를 봅시다.

Projection RoI좌표는 (80/32, 20/32, 95/32, 50/32)이 되었습니다.

(2.5, 0.93, 2.96, 1.56)으로 실수의 값으로 값이 바뀝니다. 이런 경우에 풀링을 어떻게 진행할까요?

 

이 경우는 segmentation과 obj detection에서 픽셀 선택하는 법이 조금 다르다고합니다. 

현재 객체 탐지인 경우는 b-box정도를 추론하고 crop된 부분의 분류를 진행하는 정도이기 때문에 조금 rough해도 괜찮을 겁니다. 따라서 반올림하여 픽셀을 선택한다고 합니다.

(링크에 segmentation roi align이 잘 설명 돼 있습니다.)

 

RoI Pooling 2x2

SPPNet처럼 여러 사이즈의 피라미드 pooling을 하지는 않고, 1개 계층의 풀링만 진행합니다. 

위는 2x2 풀링 예시입니다. 

최종적으로 선택한 픽셀에서 H,W를 2 stride로 나누어 3/2, 2/2 풀링을 좌상단 부터 진행하여 2x2 feature map을 얻어냅니다.

이런식으로 모든 RoI에 대해서 고정 벡터를 얻어낼 수 있게 됩니다!

 

댓글