1. Neck
1.1 Overview
기존 RPN은 backbone network를 통과한 마지막 layer만 사용했다.
하지만 연구자들은 "왜 마지막 layer만 사용해야하지? 중간의 layer는 사용하면 안되나?" 라는 의문점을 통해 NECK이 나타났다.
그래서 중간에 있는 feature들도 사용
1) Neck이 필요한 이유
backbone을 통과한 피쳐맵에서 다양한 크기의 객체를 예측해야한다.
그래서 여러 크기의 피쳐맵에서 다양한 객체를 예측할수있게된다.
큰피쳐맵일수록 작은 범위를본다.
작은 피쳐맵일수록 큰 범위를본다.
작은 피쳐맵은 low level에서 등장한 피쳐맵이다
최종레벨의 featuremap만 사용하게된다면 작은 객체를 포착할 수 없게된다.
* High level ( 많은 conv를 거쳐 나온 )
* Low level ( 적은 conv를 거쳐나온 )
Neck은 다양한 크기의 객체를 더 잘 탐지하기 위해서 필요하다
object detection은 대체적으로 큰 객체는 잘 잡지만 작은 크기의 객체는 잡기 어렵다
highlevel에선 semantic정보가 풍부하지만 localization정보가 부족하다.
lowlevel에선 localization정보가 풍부하지만 semantic정보가 부족하다.
그래서 이를 잘 섞어줘서 골고루 풍부하게 만들어주는게 Neck의 역할이다.
1.2 Feature Pyramid Network (FPN)
Neck을 사용하기 시작한 첫 paper
high level에서 low level로 semantic 정보를 전달하기 위해 top-down path way 방법을 사용함
* Low level = Early stage = Bottom = 하위레벨
* High level = Late stage = Top = 상위레벨
* Bottom Up - 일반 backbone network를 학습하는 과정
* Top down - 각 level의 feature를 받아서 low level로 가는 과정
Lateral connections
이 방식으로 두개의 feature를 merge해준다
하지만 이때 각 feature의 shape은 다르다
그래서 Bottom-up과정에서 나온 feature map은 1x1 conv를 해서 channel size를 늘려준다
Top-down에서 나온 feature는 Upsample을 하여 width와 height를 높여준다.
여기서는 Nearest Neighbor Upsampling을 사용했다
* *Nearest Neighbor Upsampling
이렇게하면 덧셈이 가능하다
Pipeline
- backbone: ResNet
Resnet은 total 4개의 stage가 존재 (pooling을 통해서 width와 height가 절반으로 줄어드는 conv2~conv5)
아래의 그림과 같이 진행하고 출력된 많은 RoI를 대상으로 NMS를 한다
1000개의 RoI를 뽑아낸다
Faster Rcnn같은 경우에는 싱글 스테이지라서 RoI가 어느 stage의 featuremap에서 나온지 알 수 있지만 FPN은 Input stage가 4개가 있어서 P5,P4,P3,P2 중 어디에서 나왔는지 알 수 없다
그래서 이게 어디서왔는지를 알기위한 mapping이 필요하다.
* k0는 4
피쳐맵의 크기가 작을수록 P2에 가까워짐
Contribution
- 여러 scale의 물체를 탐지하기 위해 설계
- 이를 달성하기 위해서는 여러 크기의 feature를 사용해야할 필요가 있음
Summary
- Bottom up (backbone)에서 다양한 크기의 feature map 추출
- 다양한 크기의 feature map의 semantic을 교환하기 위해 top-down 방식 사용
Anchorbox의 수가 훨씬 많아지지만 AR(Average Recall)값이 훨 씬 좋아진다 (더 잘 찾는다)
1.3 Path Aggregation Network (PANet)
FPN의 단점을 해결하기 위해 나옴
ResNet의 Backbone network는 figure상으로는 몇개없지만 실제로는 많은 conv를 통과한다.
이렇게 많은 conv를 하게되면 bottom의 정보가 top으로 잘 갈수있나? 라는 의문점에서 연구
그래서 기존 FPN에서의 TopDown이후에 다시 Bottom Up을 한다
a에서의 Bottom Up은 많은 conv를 이용하지만 주황색처럼 다시 Bottom Up을 할 때 적은 양의 conv를 이용
Adapted Feature pooling을 사용
기존 RoI는 각 feature에서 RoI를 뽑았지만 이 방식은 한개만 선택해서 한개씩뽑으면 아까우니까 전부다 사용해서 뽑자! 라는 알고리즘이다
2. After FPN
2.1 DetectoRS
- Looking and thinking twice
- Region proposal networks (RPN)
- Cascade R-CNN
주요 구성
- Recursive Feature Pyramid (RFP)
- Switchable Atrous Conolution (SAC)
Recursive Feature Pyramid (RFP)
Backbone을 통해 FPN을 한 결과물을 갖고 다시 Backbone을 학습한다
ASPP
receptive field를 늘리는 방법
하나의 featuremap에서 pooling을 진행할때 diliation rate을 변화해가며 receptive field를 키워나가며 pooling한다
2.2 Bi-directional Feature Pyramid (BiFPN)
아래와 같은 구조로 되어있다.
Lateral connections를 하는데 왜 단순합을 해야하는가에 대한 의문을 제기
그래서 weighted Feature Fusion을 제기
Weighted Feature Fusion
feature별로 가중치를 통해 가중합을 한다.
weight또한 학습을통해 구하게된다
2.3 NASFPN
여태까지는 휴리스틱한 정보가 많이 있었기때문에 NAS를 사용해서 만들어보자!
나스 구조를 찾았을때
단점:
- COCO dataset, ResNet기준으로 찾은 architecture, 범용적이지 못함 -> 바뀌면 새로 돌려서 nas구조를 새로 찾아야함
- Search cost가 큼
2.4 AugFPN
overview
- high level feature는 low level로 가기위해 채널의 수만 줄이는 연산을했다. 그래서 정보손실이 반드시 생긴다
- 1개의 feature map에서 RoI생성 (PAN은 이문제를 어느정도 해결)
주요구성
- Consistent Supervision
- Residual Feature Augmentation
- Soft RoI Selection
Residual Feature Augmentation
- Residual feature를 이용 M6를 만들어서 이로부터 Top Down해서 손실을 없앤다
- C5를 이용해서 만든다
Residual Feature Augmentation의 과정에서 C5를 이용하여 여러개 scale의 output을 만들고 Adaptive Spatial Fusion을 하게된다
- 스스로 뭐가 중요한지를 학습
- spatial pooling된 사이즈를 upsampling으로 같은 사이즈로 만든다
정리
- 3(N)개의 feature에 대해 가중치를 두고 summation한다 (concat)
-> N x (1 x h x w)의 값을 구한다
- 이때 N x (1 x h x w)은 spatial weight를 의미
- N x (1 x h x w)를 각 N개의 feature에 곱해 가중 summation
위의 과정으로 M6(Residual Feature Augmentation)을 통해 P5는 C5의 정보를 얻을 수 있다.
Soft RoI Selection
- FPN과 같이 하나의 feature map에서 RoI를 계산하는 경우 sub-optimal
- 이를 해결하기 위해 PANet에서 모든 feature map을 이용했지만, max pool하여 정보 손실 가능성
- 이를 해결하기 위해 Soft RoI Selection을 설계
'부스트캠프 AI Tech 2기 > 2기 CV P-Stage-Objectdetection' 카테고리의 다른 글
EfficientDet (0) | 2021.10.02 |
---|---|
1 stage Detectors (0) | 2021.10.01 |
MMDetection & Detectron2 (0) | 2021.09.29 |
2-Stage Detectors (0) | 2021.09.28 |
Object Detection Overview (0) | 2021.09.28 |