-
Feature Pyramid Network (FPN) 정리AI/Object Detection & Pose Estimation 2021. 9. 1. 00:47728x90
[사족: FPN에서 더 발전된 것이 Cascaded Pyramid Network. 참고했던 그 블로그 글 다시 한 번 읽어보자!]
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에 대응된다.
출처: https://eehoeskrap.tistory.com/300
Scale-Invariant는 object detection에서 아주 중요한 과제다. 예전에는 다양한 크기의 물체를 탐지하기 위해 이미지 크기를 리사이즈 하면서 물체를 찾았다(a). 하지만 이런 작업은 메모리와 시간을 아주 많이 잡아먹는다.
(b)와같은 형태로 cnn을 통해 단일 아웃풋으로 좀 더 robust한 예측을 할 수 있지만 (a)에 비해 성능이 부족하다. (c)와 같은 형태가 ssd에서 사용한 방법이다. cnn자체가 태생적으로 레이어를 거치면서 피라미드 구조를 만들고 레이어를 거치면서 더 semantic해진다.
이 논문에서 제안한 구조는 (d) skip connection, top-down, cnn forward에서 생성되는 자연적인 피라미드 구조를 합친다. forward에서 응축된 sematic 요소들을 top-down 과정에서 upsampling해 해상도를 올리고 forward에서 손실된 지역 정보들을 skip connection으로 보충해서 크기 변화에 강한 모델을 만든다. 또한 속도도 빠르다.
Bottom-up
위로 올라가는 forward 단계에서는 매 레이어마다 semantic을 응축하는 역할을 한다. 깊은 모델의 경우 가로, 세로 크기가 같은 레이어들이 여러개 있을 수 있는데 이 경우에 같은 레이어들은 하나의 스테이지로 취급해서 각 스테이지의 맨 마지막 레이어를 skip-connection에 사용한다. 왜냐 하면 마지막의 깊은 레이어가 더 강한 피쳐를 갖기 때문이다.
Top-down
아래로 내려가는 네트워크는 upsmapling하면서 많은 sematic을 내포함과 동시에 고해상도의 이미지를 만드는 역할을 한다. 여기서 skip-connection을 통해(여기서는 lateral connection 측면 커넥션이라 부른다) 같은 사이즈의 bottom-up 레이어와 합쳐서 손실된 지역적 정보를 보충한다.
그림에서 보이듯 top-down 과정 매 레이어마다 classifier/regressor가 적용되는데 같은 classifier/regressor를 사용하기 때문에 채널이 전부 같고 논문에서는 256을 사용했다. 때문에 skip connection을 합칠 때 1 x 1 레이어를 한번 거쳐서 채널을 맞게 바꿔준다.
왜 top-down이 중요한가?
top-down없이 bottom-up만으로 네트워크를 만들었을 때 성능이 안좋은데 레이어 별 semantic 수준이 너무 다르기 때문이다. 특히 이런 현상은 깊은 레이어에서 두드러진다.
lateral connection이 없으면?
lateral connection이 없으면 top-down레이어가 물론 높은 semantic을 가지고 있지만 지역 정보가 부정확해 정확도가 떨어진다.
피라미드 구조가 아니라면?
크기가 다른 각 레이어에서 예측하는 것이 아니라 top-down의 맨 마지막 레이어에서만 prediction 하면 baseline보다는 높지만 원 구조보다는 성능이 떨어진다. scale 변화에 덜 robust 해지기 때문이다. 피라미드 구조의 맨 마지막의 해상도가 높기 때문에 많은 anchor들이 적용됐는데도 성능이 그다지 높지 못한 것을 보면 앵커가 많은 것이 성능을 높이기에 충분치 않다는 것을 보여준다.
728x90'AI > Object Detection & Pose Estimation' 카테고리의 다른 글
Mask R-CNN 흐름 정리 (R-CNN, Fast R-CNN, Faster R-CNN) (0) 2021.09.09 Cascaded Pyramid Network for Multi-person pose estimation (0) 2021.09.09 Detectron2 이란? Pytorch 기반의 Object Detection, Segmentation 라이브러리! (0) 2021.09.09 Cifar10 Dataset 정리 (0) 2021.09.01 3d human pose estimation in video with temporal convolutions and semi-supervised training 정리 (0) 2021.09.01