인공지능 관련

RoI Pooling은 무엇이고 왜 하는가?

frogbam07 2024. 10. 27.

해당 포스트에서는 Fast R-CNN에 등장하는 Region of Interest Pooling 즉, RoI Pooling에 대해 알아보고자 한다.
필자는 RoI Pooling이 처음에는 잘 이해가 가지 않았어서 해당 글을 작성하게 되었다.

Fast R-CNN부터 짚고가면 더 좋은 설명이 되겠지만, 분량이 너무 길어지므로 Fast R-CNN을 알고 있다는 전제하에 RoI Pooling을 설명하고자 한다.

등장 배경

Fast R-CNN이전의 R-CNN에서는 Proposal 단계의 여러 사이즈의 RoI들에 대해 FC layer에 넣기전 Image Warping을 적용해주었다.

각 RoI들의 사이즈는 다 다른데, FC layer는 고정된 크기의 텐서만 입력이 가능하기 때문에 이를 해결하기 위해 warping을 통해 지정된 하나의 사이즈로(예: 7x7) 통일시켜주는 과정인 것이다.

하지만 warping은 원본 RoI의 이미지 비율이 깨지는 등 원본의 정보가 손실되므로 성능에 걸림돌이 되었다.

R-CNN의 대표적인 architecture 이미지에서도 이를 확인 할 수 있다. 본래 가로 세로 비율 약 1:2인 사람에 대한 RoI에 warping을 적용하니, 사이즈는 고정된 사이즈로 바뀌지만 원본의 비율을 잃는것을 볼 수 있다.

이 문제점을 해결하고자 Fast R-CNN에서 RoI Pooling을 제안하였다.

RoI Pooling 이란?

Fast R-CNN에서 RoI Pooling의 역할은 R-CNN의 Warping과 같다. Proposal 단계에서 나온 여러 사이즈들의 RoI들을 FC layer에 넣기 위해 사이즈를 통일 시켜주기 위함이다.

그러나 Warping보다 더 합리적인 과정을 가지고 있다.

아래는 RoI pooling의 과정을 기술하였다.

  1. 임의의 사이즈인 RoI가 Proposal 단계에서 뽑혔다고 했을때, 이미지의 feature map 중 RoI와 대응되는 부분의 feature 사이즈를 (h,w)라고 하자.
    • 이미지에서는 h=5, w=7이므로 (5,7) 이 된다.
  2. 우리는 이 (5,7) 크기의 RoI feature tensor를 (2,2) 크기의 고정된 사이즈로 변환하기를 원한다.
  3. 해당 (5,7) 사이즈를 (2,2)사이즈에 맞게 sub grid로 나누어준다.
    • 이미지에서는 pooling section의 검은색 window들에 해당된다.
  4. 각 grid마다 pooling을 적용시켜 grid 마다 하나의 값을 구하고 최종적으로 (2,2) 크기의 feature를 얻는다.
    • 이미지에서는 max pooling을 사용하였으므로 grid에서 가장 큰 값이 남게 된다.

Image warping보다 더 합리적인 이유는 다음과 같다.

RoI Pooling은 이미지 비율을 유지한 채 feature map 내에서 지정된 영역의 값들을 집계(예: max pooling)하여 고정된 크기의 출력으로 변환한다. 즉 RoI를 왜곡하지않은채, RoI의 정보들을 고정된 크기로 압축할 수 있다는 점이 warping 보다 더 합리적인 이유이다.

요약

  • RoI pooling의 목적은 사이즈가 제각각인 RoI를 FC layer의 인풋으로 넣기위해 고정된 크기의 feature로 만들어 주기 위함에 있음.
  • 기존의 warping 방식의 RoI 왜곡 문제를 해결하기 위해 제안 되었음.
  • RoI feature map을 바꾸고자하는 사이즈의 grid로 나누고 grid 마다 pooling(max, avg, ...)을 적용하여 고정된 크기의 feature로 만듦.
  • 원본 RoI의 비율이 유지되므로 Image warping에 비해 왜곡이 적고, 더 일관된 feature 추출이 가능하였음.

댓글