backbone의 마지막 feature map만 사용하던 기존의 방법과 달리 각 feature map마다 RoI를 얻음
큰 feature map일 수록 작은 범위(작은 객체)를 보고
작은 feature map일수록 큰 범위(큰 객체)를 본다고 함
--> 다양한 크기의 객체를 더 잘 탐지하기 위해서 Neck이 필요함, 작은 객체를 잘 탐지 못하는 것이 Object Detection의 문제
하위 레이어는 semantic이 약하므로 상대적으로 semantic이 강한 상위 레이어에서의 feeding이 필요함
1.1 Feature Pyramid Network (FPN)
high level에서 low level로 semantic 정보 전달을 위해 top-down path way를 추가함
여러 스케일의 물체를 탐지하기 위해 설계
여러 크기의 feature를 사용
Lateral connections
top-down 방식의 connection을 위해 backbone에서는 1x1 conv를 통해 채널을 맞춰주고 high level에서는 upsampling을 통해 차원을 맞춘 후 더해줌.
N개의 RoI를 원본 이미지에 RoI projection하기 위해 크기(w,h)를 알아야함
k=[k0+log2(wh/224)],k0=4
위의 식을 이용하여 k번째 layer의 크기로 RoI projection을 함
Code
build laterals: 각 feature map마다 다른 채널을 맞춰주는 단계 build Top-down: channel을 맞춘 후 top-down 형식으로 feature map 교환(+) build outputs: 최종 3x3 conv를 통과하여 RPN으로 들어갈 feature 완성
1.2 Path Aggregation Network (PANet)
기존의 FPN방식에서 처음의 bottom-up이 너무 깊어 low-level의 정보가 high-level에 도달하지 못하는 문제를 해결하기 위해 top-down 후에 한번 더 bottom-up의 구조를 만듦, 새로 생긴 bottom-up구조는 top-down의 방법처럼 레이어가 깊지 않아 low-level의 정보가 잘 반영됨.
Adaptive Feature Pooling
ROIAlign = ROI pooling으로 이해
ROI별로 모든 feature map 에 ROI projection, ROI Pooling을 함
Code
FPN: Top-down에 3x3 conv를 통과하는 것까지 동일 Add bottom-up: FPN을 통과한 후, bottom-up path를 더해줌 Build outputs: 이후 FPN과 마찬가지로 학습을 위해 3x3 conv 통과
2. After FPN
2.1 DetectoRS
Recursive Feature Pyramid(RFP)
이름처럼 top-down에서 나온 feature map을 다시 backbone의 low-level에 넣어줌
(1)
fi=Fi(fi+1,xi), F: FPN
xi=Bi(xi−1), B: Backbone
(2)
fi=Fi(fi+1,xi), F: FPN
xi=Bi(xi−1,Ri(fi)), B: Backbone, R: ASPP
숫자가 클수록 high-level
ASPP
Atrous conv(a.k.a dilated conv)를 사용
receptive field를 키우기위해 사용
2.2 Bi-directional Feature Pyramid (BiFPN)
feature map간에 shortcut path를 만듦
FPN처럼 단순 합이 아닌 Weighted Feature Fusion방식을 통해 lateral connection을 구현함
2.3 NASFPN
강화학습 기반
COCO dataset, ResNet 기준으로 찾은 architecture이기 때문에 범용적이지 못함, 다른 데이터셋에 일반화 x
많은 Parameter 수
높은 search cost
2.4 AugFPN
highest feature map의 정보 손실(상위 레이어가 없음)
Residual Feature Augmentation
backbone의 high-level 레이어(C5)에 연산과정을 추가해(M6) 마지막 highest layer로 연결함 1. input으로 들어온 C5를 pooling을 통해 다른 사이즈로 만들어줌 2.concat - 1x1 conv - 3x3 conv - sigmoid의 과정을 거쳐 weight를 구함 3. 2에서 구한 weight와 C5를 곱해줌으로 써 가중합된 M6를 얻음
Soft RoI Selection
PANet에서는 max pooling을 사용하여 모든 feature map에 RoI projection했기 때문에 정보의 손실이 있어 제안했다고 함