🔺

Feature Pyramid Networks for Object Detection

Tags
Model Architecture
Object Detection
Created
2021/01/31 10:47
Publication
CVPR'17
Rate
3
Summary
(상세 페이지 참고)

Reference

Object detection에서 scale-invariance는 꽤나 중요한 문제이다. Object detection에서 scale-invariance는 간단히 말해 크기에 상관 없이 동일한 detection 성능을 보이는 것이다. 예컨대 사람이 카메라에 가까이 있어 아주 크게 잡히든, 카메라에 멀찍이 떨어져 있어 아주 작게 잡히든 그것을 동일한 수준으로 사람으로 인식할 수 있어야하는 것이다.
이전(주로 hand-engineered feature을 사용하던 시절)에는 이러한 scale-invariance를 위해 image pyramid 구조를 사용했다. 간단히 말하면 이미지의 scale을 늘려가며, 즉 이미지를 축소시켜가며(scale이 크다는 것은 시야가 더 넓다는 것으로 이해할 수 있다.) 동일한 수준(예컨대 window size)의 분석을 반복하는 것이다.
하지만 위와 같은 image pyramid는 컴퓨팅 코스트나 메모리 코스트가 엄청나다. 이러한 상황에서 convolution network가 나오는데, convolution network는 그 자체로 상당히 scale-invariant하다는 특성을 갖는다. 하지만 그럼에도 불구하고, convolution network가 아주 뛰어난 성능을 내고 있는 요즘, 더 완벽한 성능을 위해서는 이러한 pyramid 구조를 통한 scale-invariant 한 설계가 필요하다고 주장한다.
어쨌거나 CNN은 자연스럽게 피라미드 구조를 가진다. FPN은 이러한 피라미드 구조로부터 자연스럽게 다양한 scale의 feature를 이용함으로써 scale-invariant architecture를 설계해낸다. FPN의 구조는 크게 Bottom-up과 Top-down으로 나뉜다.

Bottom-up

Bottom-up pathway는 우리가 알고 있던 그 일반적인 forward propagation을 일컫는다. 이 때 CNN이 (resolution이 점점 작아지는) 피라미드 구조를 가진다고 했을 때, 동일한 resolution을 가진 층들을 묶어 하나의 stage로 표현한다. 여기서 FPN에서는 같은 resolution 중 가장 깊은 semantic feature를 가지고 있는 층, 즉 가장 깊은 층의 activation을 사용한다. 페이퍼에서는 ResNet을 사용하는데, 각각 conv2, conv3, conv4, conv5에 대응하는 위와 같은 층들을 {C2,C3,C4,C5}\{ C_2, C_3, C_4, C_5 \}와 같이 표현한다. (C1C_1은 메모리 효율상 버린다고 한다.)

Top-down

사실상 top-down pathway가 FPN의 핵심이다. Top-down pathway에서는 보다 깊은 semantic feature를 가지고 있는, 즉 top-down pathway의 바로 위에 있는 층을 upsampling한 후, 이를 대응되는 bottom-up pathway의 층과 element-wise addition으로 결합한다. (이 때 bottom-up pathway 층의 activation은 channel을 맞추기 위해 1×11 \times 1 convolution 연산을 거친다.) 이를 가장 밑에 층에 이르기까지 계속하고, 이렇게 결합된 층들에 마지막으로 3×33 \times 3 convolution을 가하여 최종 feature map들을 형성한다. 가장 위의 층은 bottom-up pathway의 최상층에 1×11 \times 1 convolution을 가함으로써 형성한다. 즉 다음과 같다.
C5C_51×11 \times 1 convolution을 가하여 P5P'_5 층을 형성한다.
P5P'_5 층을 upsampling한 결과와 C4C_41×11 \times 1 convolution을 가한 결과를 결합하여 P4P'_4 층을 형성한다.
P2P'_2 층까지 계속한다.
PnP'_n 층에 3×33 \times 3 convolution을 가하여 최종 feature map인 {P5,P4,...,P2}\{ P_5, P_4, ..., P_2 \}을 형성한다.
이제 이렇게 형성된 최종 feature map들로부터 각각 prediction을 수행하여 multi-scale object detection을 수행할 수 있다. FPN은 이렇게 위에서부터 pyramid 구조를 쌓아내려옴으로써 pyramid의 모든 층이 강력한 semantic feature map을 가질 수 있도록 한다. 그 덕분에 inference 시에 head 부분의 parameter를 모든 scale에서 공유해도 각각의 고유한 parameter를 학습하는 것과 비슷한 수준의 성능을 낸다고 한다.
또한 이러한 FPN은 object detection뿐 아니라 object segmentation 등의 task에도 확장될 수 있다고 한다. 그 예시를 보여주지만, 나는 segmentation을 아직 하나도 모르기 때문에 스킵했다.
어쨌거나 이렇게 CNN의 pyramidal architecture를 이용해 비교적 간단한 방식으로 자연스러운 scale-invariant 구조를 형성함으로써 당시(2017년)의 object detection backbone으로서의 SOTA를 달성한 FPN이다. 훌륭한 논문들은 문제를 꽤나 직관적인 동시에, 알고 나면 생각보다 간단한 방식으로 풀어낸다는 생각이 든다.
E.O.D.