1.1 Overview
1.2 Feature Pyramid Network (FPN)
백본의 마지막 feature map을 이용하여 PRN을 진행. 그럼 왜 마지막 feature map만 가지고 뽑을까? 에서 출발
각 layer에서 나온 모든 feature map을 사용함
만약 여러 크기의 feature map을 사용하게 된다면 ROI head에서 보는 객체의 크기도 다양해짐
따라서 다양한 크기의 객체를 더 잘 탐지하기 위해 Neck이 필요함
하위 level의 feature는 semantic이 약하므로 상대적으로 semantic이 강한 상위 feature와의 교환이 필요
row level feaure map : 백본 초반의 feature map : 작은 영역을 봄
high level feature map : 백본을 충분히 통과한 작은 feature map : 큰 영역을 봄
// FPN 이전의 작은 object를 탐지하기 위한 시도
이렇게 하면 각 크기의 feature map이 섞이지 않음
따라서 top down path way 추가
Pyramid 구조를 통해서 high level 정보를 low level에 순차적으로 전달
FPN의 과정
1. Bottom-up
2. Top-down
3. Lateral connections
두 feature map을 섞어주는 과정.
bottom-up의 두번째 layer의 feature map과 top-down의 맨 위 가장 작은 feature map을 섞어야 하는데, 둘의 spatial size와 channel이 맞지 않다. 따라서 top-down 은 up-convolution / bottom-up은 1x1 convoution 과정을 통해 size와 channel을 맞춰줌.
1x1 channel 줄이는거 아니었나? 계산량감소를 위해 channel 수를 작게하는 것뿐 1x1 filter의 channel 수를 크게하면 반대의 역할.
Pipeline
AR : Average Racall
: small 박스 1000개 기준 AR
Code
Build laterals: 각 feature map 마다 다른 채널을 맞춰주는 단계
Build Top-down: channel을 맞춘 후 top-down 형식으로 feature map 교환
Build outputs: 최종 3x3 convolution을 통과하여 RPN으로 들어갈 feature 완성
Contribution
1.3 Path Aggregation Network (PANet)
Bottom-up Path Augmentation
bottom-up path way 를 하나 더 추가
(b)부분 딱 4개의 layer만 지나면되므로 row level 정보가 잘 전달됨
Adaptive Feature Pooling
각 layer(N2,N3,N4,N5)에서 나온 feature map에서 ROI pooling진행. 이때 FPN과 같은 stage계산 공식을 쓰면 경계에 있는 feature map의 stage를 제대로 계산 할 수 없음
Projection 단계에서 특정 stage에 있는 feature map을 사용하면 결국 local~sementic정보를 모두 사용할 수 없으니 모든 feature map을 사용해서 ROI Projection을 하고 ROI pooling을 헤서 fc를 만들고, channel wise projection으로 하나의 fc로 출력
Code
2.1 DetectoRS
RPN, Cascade R-CNN 에서 영감을 받아 반복적으로 하면 좋은 성능을 이끌어내는지 실험
주요구성
Recursive Feature Pyramid (RFP)
FPN을 recursive하게 수행하는 것 . neck정보를 backbone에 다시 전달하여 backbone을 다시 학습시킴 . 단점은 backbone연산이 많아져 flops늘어남
F: neck 연산(backbone layer feature map 와 neck high level feature map 을 통해 feature map 생성)
B: backbone연산(low level feature map 을 통해 feature map생성)
Atrous Spatial Pyramid Pooling 연산을 통해 neck stage의 feature map을 backbone으로 넘겨줌
Atrous Spatial Pyramid Pooling(ASPP)
Atrous Convolution : receptive field를 늘릴 수 있는 방법
하나의 fm에서 pooling을 진행하는데
Atrous Convolution rate를 여러가지를 주어 receptive fiel를 늘리고(다양화하고) concat
2.2 Bi-directional Feature Pyramid (BiFPN)
EfficeintDet에서 제안함
효율성을 위해 PANet을 다음과 같이 바꾸자.
효율성을 위해 feature map이 한곳에서만 오는 node제거
위의 fpn구조를 반복적으로 사용하여 parameter와 flops를 줄임
Weighted Feature Fusion
이때 weight도 학습가능한 parameter
2.3 NASFPN
기존의 FPN, PANet
Architecture
search
단점
COCO dataset, ResNet기준으로 찾은 architecture, 범용적이지 못함
2.4 AugFPN
Problems in FPN
주요 구성
Residual Feature Augmentation
fpn은 row level feature map은 high level sementic정보가 내려오면서 추가됨. 하지만 p5의 경우 1x1,3x3 conv만 진행하기 때문에 channel이 줄어드는 정보손실이 발생함. 따라서 마지막 stage에 더 높은 high level 정보를 보강해줘야 함
이것이 Residual Feature Augmentation. C5로부터 m6를 만들어주고 이를 추가해줌
M6 만드는 방법
Ratio-invariant Adaptive Pooling
Soft RoI Selection
Further Reading
FPN Paper
PAFPN Paper
DetectoRS Paper
회의 내용
mmdetection 의 config를 직접 만들어 학습 시켜봄
train- valid set을 어떻게 나눌지에 대한 고민 필요
각 모델별 metric 무엇을 의미하는지 분석 필요
object detection 디버깅 방법 여쭤보기