Neck
Neck은 다양한 크기의 객체를 더 잘 탐지하기 위해서 반드시 필요하다.
또한, 하위 level의 feature는 semantic이 약하므로 상대적으로 semantic이 강한 상위 feature와의 교환이 필요하다. 이를 구현하기 위해서 Neck을 사용한다.
feature Pyramid Network(FPN)
high level에서 low level에서 sematic 정보를 전달하기 위해 top-down path way를 추가하였다. 피라미트 구조를 통해 high 정보를 low level에 순차적으로 전달한다.(이 때, low level은 모델의 Early stage를 뜻하고 이를 bottom이라고 칭한다.)
- Lateral connections
- FPN은 여러 scale의 물체를 탐지하기 위해 설계되었고, 이를 달성하기 위해 여러 크기의 feature를 사용할 필요가 있다.
- Bottom up에서 다양한 크기의 feature map을 추출하고, 다양한 크기의 feature map의 semantic을 교환하기 위해 top-down 방식을 사용한다.
PANet
FPN의 단점 = bottom-up 과정에서 low level에서 high level로 이동할 때 정보 전달이 쉽게 될 것이라고 생각할 수 있으나, backbone은 resnet을 사용하다보니, 깊은 층으로 이루어져 있어 과연 low level에서 high level로 이동할 때 정보 전달이 잘 되지 않을 수 있다.
path aggregation network(PANet)은 FPN과 같이 bottom-up + top-down 구조를 사용하고 추가적으로 bottom-up을 추가함으로써 low level의 feature를 high level에 정보전달을 한다.
- Adaptive Feature pooling
FPN에서는 RoI stage를 하나만 사용한 것에 반해 나머지 stage에서도 모두 RoI를 추출하였다.
DetectoRS
- RPN, Cascade R-CNN에서 영감을 받았다.
- Recursive Feature Pyramid(RFP)
FPN을 recursive하게 진행하는 것으로, top-down 방식을 거쳐 low level backbone이 high level feature를 어느 정도 이해하고 이가 포함된 low-level feature를 low-level backbone에 들어온다면 feature map를 더 잘 이해할 수 있지만 n번 반복하기 때문에 학습 속도가 매우 느리다.
- ASPP
하나의 feature map에서 pooling을 진행하지만, Atrous Convolution(kernel size를 그대로 유지시키지만, 보는 크기는 넓힘으로써 receptive field를 넓이는 방식)를 rate별로 키운 후 pooling을 모두 진행하고, concat시키는 방법
즉, ASPP를 수행하는 이유는 Atrous Convolution을 사용함으로써 receptive field를 넓이기 위함이다.
BiFPN
Bi-directional Feature Pyramid은 EfficientDet에서 제안하였다.
한 곳에서 오는 feature를 모두 제거함으로써 효율성을 챙긴 모델이다.
또한 BiFPN은 bottom-up 과정에서 생긴 feature map과, top-down에서 생긴 feature map을 하나는 채널을 늘리고 하나는 upsampling을 수행한 후 더하는 FPN의 구조에서 더하는 대신 각 feature 별로 가중치를 부여한 뒤 더하는 방식을 사용한다. 이를 통해 중요한 feature를 강조하여 성능을 상승시킬 수 있다.
NASFPN
단순 일방향(top-down, bottom-up)을 사용하지 않고 휴리스틱한 방식을 깨고자 만들어졌고, FPN 아키텍처를 NAS를 통해서 찾는 방식을 사용한다.
NAS를 사용해서 점점 AP를 높이는 방식이다. 일반적인 FPN방식보다 월등히 성능이 좋으나, coco dataset, ResNet 기준으로 찾은 architecture이고, 범용적이지 못하다. 그러다 보니 다른 dataset이나 backbone에서 가장 좋은 성능을 내는 architecture를 찾기 위해 새로운 search를 하게 되고, 이는 cost가 크게 증가함을 뜻한다. 즉, 비용이 많이든다.
AugFPN
- FPN의 단점
- 서로 다른 level의 feature간의 semantic의 차이
- highest feature map에서는 top-down 과정에서 받을 정보가 없다. 따라서 정보 손실이 생길 수 밖에 없다.
- 1개의 feature map에서 RoI를 생성한다. PANet에서는 어느정도 해결을 했다.
- Residual Feature augmentation
residual feature Augmentation(M6)를 사용하여 highest feature map의 정보 손실을 해결한 방법
C5를 다양한 Ratio-invariant adaptive pooling을 통해 다양한 scale의 feature map을 만든다.(피라미드 형태로)
이렇게 만들어진 feature map들을 Adaptive spatial Fusion을 사용해 fusion하여 M6를 만든다.
Adaptive spatial Fusion의 과정은 feature map을 모두 동일한 size로 upsampling을 한 후, 각 feature를 concat한 후 convolution후 sigmoid를 씌우는 과정인데, 이 과정을 통해 sigmoid(0 <= x <= 1)값이 곧 각 pixel에 대한 weight로 나타낼 수 있다.
- soft RoI Selection
마지막에서 모든 feature map에서 Roi를 얻게 되는데, 이를 모두 Roi-projection을 진행하는 과정
FPN과 같이 하나의 feature map에서 RoI를 계산하는 경우 sub-optimal가 발생한다. 이를 해결하기 위해 PANet에서 모든 feature map을 이용했지만, max pool하여 정보 손실 가능성이 생길 수 있다. 이를 해결하기 위해 soft RoI Selection가 등장하였다.
soft RoI Selection은 모든 scale의 feature에서 RoI projection 진행 후 RoI pooling을 수행한 후, Channel-wise 가중치 계산을 수행한다. 이를 사용하여 PANet의 max pooling 대신 학습 가능한 가중 합으로 대체한다.
Object Detection Library
MMDetection
2 Stage 모델은 크게 Backbone / Neck / DenseHead / RoIHead 모듈로 나눌 수 있다. 각각 모듈 단위로 커스터마이징이 가능하고 config 파일을 이용해 통제된다.
Backbone – 입력 이미지를 특징 맵으로 변형한다/
Neck – backbone과 head를 연결, Feature map을 재구성한다 (ex. FPN)
DenseHead – 특징 맵의 dense location를 수행하는 부분이다.
RoIHead –RoI 특징을 입력으로 받아 box 분류, 좌표 회귀 등을 예측하는 부분이다.
detectron2
setup config/ setup trainer/ start training으로 구성되어 있다.