[논문요약] Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

Mayner·2021년 5월 1일
1

논문읽기

목록 보기
2/6
post-thumbnail

이번 글에서 요약할 논문은 CNN의 고정된 입력 크기에 대한 솔루션을 제시하는 Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition입니다.

Link: arXiv - Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

Abstract 🍎

본 논문이 작성될 당시, 기존의 CNN모델들은 224x224의 고정된 크기의 입력이 요구되었다.
하지만 실제로 CNN의 Convolution Layer는 고정된 크기의 입력이 필요하지 않는다.
대신 Convolution Layer 뒤에 위치하는 Fully-Connected Layer에서 고정된 크기의 입력이 필요하여 입력할 수 있는 데이터에 대해 크기가 제한되었던 것이다.

고정된 사이즈로 입력을 받는 것은 모델의 정확도를 하락시키는 등 모델의 성능에 약영향을 끼치게 된다.

그렇기에 본 논문에서는 입력 크기에 관계 없이 고정된 길이의 출력을 만들어낼 수 있는 Spatial Pyramid Pooling(SPP)을 제시한다.
SPP를 적용한 네트워크를 SPP-net이라 부르며, Object Classification과 Object Detection에서 좋은 성능을 보인다.

Spatial Pyramid Pooling(SPP) 🏔

위에서 이야기한 듯이, 기존의 CNN 아키텍쳐들은 고정된 크기의 입력이 필요하였다.
그렇기에 데이터를 전처리하는 과정 중에 이미지를 crop하거나 warp 해줘야 한다.
그렇게 되면 crop으로 인해 잘린 영역 내부에 전체 객체가 포함되어 있지 않거나, 왜곡이 발생하여 정확도의 감소를 초래할 수 있다.

그러나 실제로 고정된 크기의 입력이 필요한 이유는 Convolution Layer 때문이 아니다.
Convolution Layer는 sliding window를 통한 작동 방식으로, 입력 크기에 대한 제약을 받지 않는다.
하지만 Fully-Connected Layer는 각 클래스에 대해 학습/예측하기 위해 고정된 크기의 입력이 필요하다.

이러한 제약을 없애기 위하여 본 논문에서는 Spatial Pyramid Pooling(이하 SPP)이 제안된다.
SPP는 Convolution Layer에서 생성된 feature map을 입력 받고, 각 feature map에 대해 pooling 연산을 하여 고정된 길이의 출력을 만들어 낼 수 있다.

Source: Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

SPP의 작동 방식을 위의 이미지를 예시로 설명해보겠습니다.

  1. Convolution Layer로 부터 feature map을 입력 받는다.
  2. 받은 입력을 사전적으로 정해진 영역으로 나눈다. (위 이미지의 경우 4x4, 2x2, 1x1의 세가지 영역을 제공하며, 각각을 하나의 피라미드라고 부른다.)
  3. 각 피라미드의 한 칸을 bin이라고 부르며, 각 bin에 대해서 max pooling 연산을 적용한다.
  4. max pooling의 결과를 이어 붙여 출력으로 내봅니다.

입력(feature map)의 크기가 k, bin의 개수를 M이라고 한다면 SPP의 최종 출력은 kM차원의 벡터이다.
즉, 입력의 크기에 상관없이 사전에 설정한 bin의 개수와 채널값으로 SPP의 출력이 정해지기에 항상 동일한 크기의 출력을 생성한다고 할 수 있다.

R-CNN vs SPP-net 🤼‍♂️

본 논문에서는 SPP에 대한 설명을 할 때 R-CNN에 대해서 자주 언급한다. (매우 엄청)
논문에서 말하는 R-CNN의 단점은 느린 속도라고 말하며, 이에 대해 자주 지적한다.

잠시 R-CNN의 작동 방식에 대해 알아보자.

  1. 각 이미지마다 Selective Search를 통해 약 2,000개의 candidate window를 추출한다.
  2. 각 window에 대해서 227x227의 고정된 크기로 resize해준다. (이때 왜곡이 발생한다.)
  3. 사전에 학습된 CNN을 통해 각 window에 대해 feature를 추출한다.
  4. 분류기를 통해 생성된 feature map에 대해 학습 및 예측을 수행한다.

R-CNN은 당시의 예전 방식들 보단 우수한 성능을 보였지만, 각 이미지당 2,000개의 window를 생성해 Convolution Layer를 통해 연산해야 하기 때문에 속도가 매우 걸리게 된다.

반면 SPP를 적용한 SPP-net은 feature map에 대해 one-pass 방식으로 한 번만의 연산 후, 임의 영역에 대한 pooling 연산만을 진행하기에 상대적으로 매우 빠른 속도를 가지게 된다.
논문에서는 Pascal VOC 2007의 테스트 이미지 기준으로 SPP-net이 R-CNN보다 24~102배 빠르다고 하며, 좀 더 높거나 비슷한 수준의 성능을 보인다고 한다.

그렇기에 논문에서 주장하는 대로 본다면, 성능적인 부분과 속도적인 측면에서 SPP-net이 더 높다고 볼 수 있다.

Conclusion 🤓

과거의 CNN 아키텍쳐는 CNN에 포함되어 있는 Fully-Connected Layer로 인해 입력 크기에 대한 제약이 있었다.
하지만 이에 대한 제약을 해결하고자 입력 크기에 상관없이 고정된 길이의 출력을 만들어 낼 수 있는 SPP를 제시함으로써 이러한 문제를 해결하였다.

SPP를 적용한 SPP-net은 crop이나 warp을 하는 과정이 필요하지 않기에, 데이터의 손실이나 왜곡이 발생하지 않아 모델의 성능에 악영향을 끼치지 않는다.
또한 다단계의 풀링을 사용하는 SPP는 모델의 인식 정확도를 향상시킬 수 있는 것으로 보이며, 과적합의 가능성을 감소시켜 테스트시 모델의 정확도를 향상시킬 수 있다.

SPP-net은 R-CNN과 다르게 one-pass 방식으로 연산을 수행하게 되어 속도 측면에서 좋은 성능을 보이게 된다.

profile
인공지능처럼 공부하고 싶은 인공지능 개발자

2개의 댓글