1. Neck
1.1 Overview
- History
- Neck은 무엇인가?
- 위는 기존 2-stage 방식
- backbone의 마지막 feature map을 RPN에 통과시키게 됨
- 근데 왜 마지막 feature map을 활용해야 할까? => 중간의 feature map들도 활용해보자
- Neck은 왜 필요한가?
- low-level의 feature map은 선, 점, 기울기 등의 정보와 작은 객체를 잘 표현
- high-level의 feature map은 object의 semantic한 정보와 큰 객체를 잘 표현
- 따라서 Neck을 활용하여 두 정보를 다 활용
- 다양한 크기의 객체를 더 잘 탐지 하게 됨
- 그렇다면 Neck을 활용하지 않고 여러 level에서의 feature map을 활용하면 되지 않냐?
- Neck을 활용하여 하위 level의 feature는 semantic이 약하므로 상대적으로 semantic이 강한 상위 feature와의 교환이 필요함
- 결국 low-level부터 high-level feature를 적절히 섞어주고 region을 뽑음으로써 작은 객체를 더 잘 탐지하게 됨
1.2 Feature Pyramid Network (FPN)
- FPN이전에는 이미지 사이즈를 조절하여 작은 객체를 탐지하고자 했음
- 마지막 feature map만 활용해보자
- 중간중간 feature map을 그대로 활용해보자 (SSD)
*FPN은 어떤것을 보완했나?
- high level에서 low level로 semantic 정보 전달 필요
- 따라서 top-down path way 추가
- Pyramid 구조를 통해서 high level 정보를 low level에 순차적으로 전달
- Low level = Early stage = Bottom
- High level = Late stage = Top
- Pyramid 구조를 통해서 high level 정보를 low level에 순차적으로 전달
- Bottom-up
- Top-down
- 두 level을 어떻게 적절히 섞을까?
- Lateral connections
- high-level은 up sampling, low-level은 1x1 conv로 채널을 늘려줌
- element-wise 연산으로 합쳐줌. (더해줌?)
- Nearest Neighbor Upsampling
- Lateral connections
- Pipeline (Backbone : ResNet)
- 4개의 stage를 bottom-up과 top-down에서 lateral connection이 일어남
- 이후 RPN을 거쳐 RoI를 뽑음
- RoI가 어떤 스테이지로부터 나온것인지 mapping을 해줌
- 어떤 stage의 feature map으로부터 roi projection을 진행할지 알 수 있음
- 결과
- Code
- Build laterals : 각 feature map 마다 다른 채널을 맞춰주는 단계
- Build Top-down : channel을 맞춘 후 top-down 형식으로 feature map 교환
- Build outputs : 최종 3x3 convolution을 통과하여 RPN으로 들어갈 feature 완성
- Build laterals : 각 feature map 마다 다른 채널을 맞춰주는 단계
1.3 Path Aggregation Network (PANet)
*Problem in FPN
- ResNet은 많은 conv와 pooling이 존재
- low-level feature가 backbone을 통과하는 과정에서 제대로 high-level로 전달될 수 있을까?
*Bottom-up Path Augmentation
- 기존 FPN에서 (b) bottom-up path way를 하나 추가 해주었음
*Adaptive Feature Pooling
- 기존 FPN방식은 불과 몇 픽셀 차이로 인해 stage가 나뉘어 버리는 문제가 있음
- 따라서 각 stage의 roi를 projection해서 사용하지 않고, AFP에서는 모든 RoI를 FC layer로 합침
*Code
- FPN : Top-down에 3x3 convolution layer 통과하는 것 까지 동일
- Add bottom-up : FPN을 통과한 후, bottom-up path를 더해줌
- Build outputs : 이후 FPN과 마찬가지로 학습을 위해 3x3 convolution layer 통과
2. After FPN
2.1 DetectoRS
*Motivation
- Looking and thinking twice
- Region proposal networks(RPN)
- Cascade R-CNN
*주요구성
- Recursive Feature Pyramid (RFP)
- Switchable Atrous Convolution (SAC)
*Recursive Feature Pyramid (RFP)
- Neck 정보를 backbone이 다시 학습하는 방식
- 좌측 red box는 FPN과 동일
- FPN feature를 다시 backbone에 넣는 과정이 ASPP가 이루어짐
- 단점 : FLOPs가 매우 증가
- What is ASPP?
- receptive field를 증가 시키는 방법
- receptive field를 증가시키고 pooling하여 concat
2.2 Bi-directional Feature Pyramid (BiFPN)
*Pipeline
- 기존 노드들을 제거하여 간단하고 효율적으로 바꿈
- 하지만 high-level feature와 low-level feature을 합치는 과정에서 단순 summation을 하면 정보가 섞일 수없음
- 따라서 Weighted Feature Fusion 방법 제안
*Weighted Feature Fusion
- FPN과 같이 단순 summation을 하는 것이 아니라 각 feature별로 가중치를 부여한 뒤 summation
- 모델 사이즈의 증가는 거의 없음
- feature별 가중치를 통해 중요한 feature를 강조하여 성능 상승
2.3 NASFPN
*Motivation
- 기존의 FPN, PANet
- Top-down or bottom up pathway
- 단순 일방향(top->bottom or bottom ->top) summation 보다 좋은 방법이 있을까?
- 그렇다면 FPN 아키텍처를 NAS (Neural architecture search)를 통해서 찾자!
*Architecture
*Search
*Stacking
- NAS를 활용했을때 같은 FLOPs에서 성능이 좋음
*단점
- COCO dataset, ResNet기준으로 찾은 architecture, 범용적이지 못함
- Parameter가 많이 소요
- High search cost
- 다른 Dataset이나 backbone에서 가장 좋은 성능을 내는 architecture를 찾기 위해 새로운 search cost
2.4 AugFPN
*Overview
- Problems in FPN
- 서로 다른 level의 feature간의 semantic차이
- Highest feature map의 정보 손실
- 1개의 feature map에서 RoI 생성
- 주요 구성
- Consistent Supervision
- Residual Feature Augmentation
- Soft RoI Selection
*Residual Feature Augmentation
- Ratio-invariant Adaptive Pooling
- 다양한 scale의 feature map 생성
- Adaptive Spatial Fusion(256 channels) : transformer 처럼 중요도를 스스로 학습
- N 개의 feature에 대해 가중치를 두고 summation을 하는 방법
- concat후 1x1 conv로 Cxhxw로 만들어주고, 3x3 conv로 다시 Nx(Cxhxw)로 만듦
- channel wise sigmoid 연산을통해 Nx (1xhxw)를 만듦
- N x (1xhxw)의 의미는 각각의 픽셀별로 3개의 value가 나타나고, 각 픽셀의 중요도를 나타낼 수 있음
-> spatial weight
*Soft RoI Selection
- FPN과 같이 하나의 feature map에서 RoI를 계산하는 경우 sub-optimal
- 이를 해결하기 위해 PANet에서 모든 feature map을 이용했지만, max pool하여 정보 손실 가능성
- 이를 해결하기 위해 Soft RoI Selection을 설계
- 모든 scale의 feature에서 RoI projection 진행 후 RoI pooling
- Channel-wise 가중치 계산 후 가중 합을 사용
- PANet의 max pooling을 학습 가능한 가중 합으로 대체
*Experiment
'부스트캠프 AI Tech > [Week9] Object Detection (1)' 카테고리의 다른 글
[Week9] Object Detection - EfficientDet [Day3] (0) | 2021.09.29 |
---|---|
[Week9] Object Detection - 1 stage detector [Day3] (0) | 2021.09.29 |
[Special Mission3] Detectron2 튜토리얼 (0) | 2021.09.29 |
[Week9] Object Detection - library [Day2] (0) | 2021.09.28 |