[Object Detection] Feature Pyramid Network (FPN)
석사 때는 Object Detection 이라는 분야를 컴퓨터비전 쪽으로 공부했었는데
최근들어 프로젝트를 수행하면서 당연히(?) 딥러닝 쪽으로 공부하고 있다.
원 논문
Lin, Tsung-Yi, et al. "Feature pyramid networks for object detection." Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2017.
Object Detection 분야에서 Scale-Invariant 는 아주 중요한 과제라고 한다.
예전에는 다양한 크기의 물체를 탐지하기 위해 이미지 자체의 크기를 리사이즈 하면서 물체를 찾았다고 한다.
이런 작업은 메모리 및 시간 측면에서 비효율적이기 때문에
Feature Pyramid Network (FPN) 이라는 방법이 등장하게 되었다.
먼저 FPN이 왜 나왔는지 살펴보기 위해 기존의 방법들 부터 천천히 보고자 한다.
(a) Featurized Image Pyramid
이 방법은 각 레벨에서 독립적으로 특징을 추출하여 객체를 탐지하는 방법이다.
연산량과 시간 관점에서 비효율적이며 현실에 적용하기 어렵다는 단점이 있다.
(b) Single Feature Map
이 방법은 컨볼루션 레이어가 스케일 변화에 로버스트 하기 때문에
컨볼루션 레이어를 통해서 특징을 압축하는 방식이다. 하지만 멀티 스케일을 사용하지 않고
한번에 특징을 압축하여 마지막에 압축된 특징만을 사용하기 때문에 성능이 떨어진다는 평가가 있다.
(c) Pyramidal Feature Hierarchy
이는 서로 다른 스케일의 특징 맵을 이용하여 멀티 스케일 특징을 추출하는 방식이다.
각 레벨에서 독립적으로 특징을 추출하여 객체를 탐지하게 되는데,
이는 이미 계산 되어 있는 상위 레벨의 특징을 재사용 하지 않는다는 특징이 있다.
이는 SSD에서 사용된 방식이다.
(d) Feature Pyramid Network
Top-down 방식으로 특징을 추출하며,
각 추출된 결과들인 low-resolution 및 high-resolution 들을 묶는 방식이다.
각 레벨에서 독립적으로 특징을 추출하여 객체를 탐지하게 되는데
상위 레벨의 이미 계산 된 특징을 재사용 하므로 멀티 스케일 특징들을 효율적으로 사용 할 수 있다.
CNN 자체가 레이어를 거치면서 피라미드 구조를 만들고 forward 를 거치면서 더 많은 의미(Semantic)를 가지게 된다.
각 레이어마다 예측 과정을 넣어서 Scale 변화에 더 강한 모델이 되는 것이다.
이는 skip connection, top-down, cnn forward 에서 생성되는 피라미드 구조를 합친 형태이다.
forward 에서 추출된 의미 정보들을 top-down 과정에서 업샘플링하여 해상도를 올리고
forward에서 손실된 지역적인 정보들을 skip connection 으로 보충해서 스케일 변화에 강인하게 되는 것이다.
FPN 모델은 ConvNet 의 피라미드 계층 구조를 활용하게 된다.
피라미드 특징 계층 구조는 낮은 수준에서 높은 수준 까지의 의미를 모두 갖고 있으며
전체적으로 높은 수준의 의미 정보들을 갖춘 피라미드를 생성하게 된다.
이 FPN 모델은 Region Proposeal Network (RPN) 와 Fast R-CNN을 기반으로 한다.
FPN 모델은 입력으로 임의의 크기의 단일 스케일 영상을 다루며,
전체적으로 Convolutional 방식으로 비례된 크기의 특징 맵을 다중 레벨로 출력하게 된다.
이 프로세스는 Backbone Convolutional Architecture 와는 독립적이며
ResNet을 사용하여 결과를 보여주게 된다.
크게 Bottom-up , Top-down 프로세스로 설명한다.
Bottom-up pathway
상향식 과정에서는 Backbone ConvNet의 Feedforward 계산이다.
이는 스케일링 단계가 2인 여러 특징 맵으로 구성된 특징 계층을 계산한다.
종종 동일한 크기의 출력 맵을 생성하는 레이어가 많이 있으며 이러한 레이어가 동일한 네트워크 단계에 있다.
특징 피라미드의 경우 각 단계 마다 하나의 피라미드 레벨이 정의된다.
즉, 위로 올라가는 forward 단계 에서는 매 레이어마다 의미 정보를 응축하는 역할을 하게 된다.
깊은 모델의 경우 가로, 세로 크기가 같은 레이어들이 여러개 있을 수 있는데 이 경우에 같은 레이어들은
하나의 단계로 취급해서 각 단계의 맨 마지막 레이어를 skip-connection 에 사용하게 된다.
즉, 각 단계의 마지막 레이어의 출력을 특징 맵의 Reference Set 으로 선택한다.
피라미드를 풍부하게 생성하며, 각 단계의 가장 깊은 레이어에는 가장 영향력 있는 특징이 있어야 한다.
특히 ResNet의 경우 각 단계의 마지막 잔차 블록(Residual Block)에서 출력되는 Feature Activation을 활성화 한다.
conv2, conv3, conv3, conv5 출력에 대해 마지막 잔차 블록의 출력을 C2, C3, C4, C5 라고 표시하고
각 레이어에는 4, 8, 16, 32 픽셀의 Stride 가 설정된다.
conv1 은 큰 메모리를 차지하기 때문에 피라미드에 포함시키지 않는다.
Top-down pathway and lateral connections
하향식 과정에서는 많은 의미 정보들을 가지고 있는 특징 맵을 2배로 업샘플링(Up-sampling) 하여
더 높은 해상도의 이미지를 만드는 역할을 수행한다.
여기서 skip-connection을 통해 같은 사이즈의 bottom-up 레이어와 합쳐서 손실된 지역적 정보를 보충하게 된다.
Top-down 과정에서 매 레이어 마다 classfifier / regressor 가 적용되는데
같은 classfifier / regressor 를 사용하기 때문에 채널이 전부 같고, 논문에서는 256 채널을 사용했다고 한다.
때문에 skip connection 을 합칠 때 1 x 1 레이어를 한번 거쳐서 채널을 알맞게 바꿔준다.
즉, 업샘플링된 맵은 Element-wise addition 에 의해 상향식 맵과 병합되는 과정을 거친다.
이 때 채널 수를 줄이기 위해 1 x 1 컨볼루션 레이어를 거치게 된다.
이 프로세스는 마지막 resolution map이 생성될 때 까지 반복된다.
반복을 시작하기 위해 C5에 1 x 1 컨볼루션 레이어를 덧붙여 가장 정교한 resolution map을 생성한다.
마지막으로 각 합쳐진 맵에 3 x 3 컨볼루션을 추가하여 업샘플링의 앨리어싱(Aliasing) 효과를 줄이는
최종 특징 맵을 생성한다.
생성된 특징 맵은 각각 P2, P3, P4, P5 라고 불리며, 각 동일한 Spatial Size인 C2, C3, C4, C5에 대응된다.
'AI Research Topic > Object Detection' 카테고리의 다른 글
[Object Detection] Darknet 학습 시 적절한 Weight 고르기 (0) | 2019.09.04 |
---|---|
[Object Detection] Convert Darknet yolov3 model to keras model (0) | 2019.08.19 |
[Object Detection] 객체 탐지를 위한 데이터 주석 Yolo 형식으로 변환하기 (9) | 2019.08.19 |
[Object Detection] Image Labeling Tool (5) | 2019.07.08 |
[Object Detection] Multiple Object Detector (0) | 2017.08.31 |