Spatial Pyramid Pooling, RoI Pooling

Spatial Pyramid Pooling과 RoI Pooling에 대해 간단히 알아봅니다.


Spatial Pyramid Pooling

기존의 R-CNN에서 물체를 Detection하고 분류할 때는, 아래와 같이 이미지에서 물체가 있는 부분을 잘라내거나(crop) 물체의 크기를 고정된 크기에 맞추는(warp) 작업을 선행한 후 진행되었습니다.

이렇게 진행했던 이유는, CNN의 클래스 분류기(SVM, Fully-Connected Layer) 들이 고정된 개수의 입력만을 받기 때문이었습니다. 따라서 저렇게 이미지의 크기를 맞춰주어야 했죠.

이 문제를 해결하기 위해, Spatial Pyramid Pooling이 제안되었습니다. 이 알고리즘을 한 장으로 정리한 그림은 아래와 같습니다.

Spatial Pyramid Pooling의 골자는, 입력으로 어떤 크기의 이미지가 들어와도 동일한 크기가 출력되는 Pooling을 하고 싶다 는 것입니다. 그것을 위해서 입력 이미지를 여러 사이즈의 bin 으로 나누어 풀링을 진행합니다. bin은, 입력으로 들어오는 Feature Map을 일정한 개수로 나눈 각각의 영역을 말합니다.

위의 그림에서 보면, 입력 이미지를 4 x 4의 bin으로 나누어 Pooling하고, 2 x 2의 bin으로 나누어 Pooling하고, 1 x 1으로 그대로 Pooling한 결과를 합치고 있습니다. 풀링의 방식을 간단합니다. 각각의 bin 내에서 Max pooling 을 수행합니다. 4 x 4개의 bin으로 나뉜 이미지에서는 16개의 Pooling된 값이 출력되고, 2 x 2개의 bin으로 나뉜 이미지에서는 4개의 Pooling된 값이 출력됩니다. 입력 이미지의 크기에 상관없이, 고정된 개수의 bin으로 이미지를 나누기만 하면 고정된 크기의 출력이 나오므로, 입력 이미지의 크기가 달라져도 고정된 크기를 받는 Fully-Connected Layer에 입력이 가능합니다.

RoI Pooling

RoI Pooling은, Spatial Pyramid Pooling의 특수한 형태입니다. Spatial Pyramid Pooling은 bin의 갯수를 달리해서 이미지를 여러 번 풀링하지만, RoI Pooling은 하나로 정해진 bin 개수로 RoI에 대해서 한번만 Pooling합니다. 한마디로 Spatial Pyramid Pooling에서 하나의 층만 가져와서 풀링 하는 것입니다.

RoI Pooling의 예를 보여주는 예제 그림을 만들어 보았습니다. 아래 그림에서 풀링을 수행하는 RoI는 입력 특징 맵에서 추출한 RoI임을 기억하시기 바랍니다.

입력 RoI

2 x 2개의 bin으로 나눔

각 bin에서 Max Pooling 수행

RoI Pooling 결과

Spatial Pyramid Pooling은 위의 방식을 여러 가지 bin 개수에 대해 여러 번 시행해서 고정 크기의 출력 벡터를 만들어내는 작업입니다.