[OD] Neck의 기본 개념과 FPN, PANet, BiFPN 까지 정리 | Backbone의 여러 feature map을 합치는 방법
Neck의 개념과 필요성
객체 탐지(object detection) 모델에서 많은 모델의 구조는 컴퓨터 비전 모델을 기반(Backbone)으로 하는 Backbone 구조에서 이미지를 인식하고 여기서 객체를 분류하는 다른 여러 모듈의 조합으로 이뤄집니다. 다양한 크기의 객체를 잘 탐지하고, 특징의 레벨 수준에 따라 갖는 특성이 다르기 때문에 이를 적절히 섞어주는 방법이 필요한데, 이를 Neck이라고 합니다.
즉, 위 이미지처럼 다양한 레별마다 표현되는 특징들을 교환을 통해 객체를 탐지를 돕는 것이 Neck 입니다. Neck에 대한 여러 연구가 이뤄졌지만, 그중에서도 기본적인 개념인 FPN, PANet, 그리고 이들이 약간의 발전이 이뤄진 BiFPN까지 내용을 정리합니다.
FPN
Feature Pyramid Network(FPN)은 Backbone에서 추출된 특징 맵들을 High level 특징 맵부터 Top-down 방식으로 섞어가는 방식입니다. 우선, 각 특징 맵들을 1x1 conv을 통과시킵니다. 그리고 윗층에서는 업샘플링(nearest neighbors 방식)을 한 값을 (1x1 conv를 통과한) 그 아래층의 값에 원소간 합을 취합니다. 이런 방식을 Lateral connection이라고 하며, 이 구조를 FPN이라 합니다. (아래 그림 참고)
PANet
PANet(Path Aggregation Network)는 FPN의 구조적 약점을 보완하기 위해 등장했습니다. FPN은 Top-down 방식을 통해 고수준부터 저수준까지 특징 맵들을 더해주는 방식을 취하고 있으나, 이러한 방식은 저수준(이미지에 가까운) 특징 맵이 고수준 특징 맵과 정보를 교환할 수 없습니다. 이러한 약점은 PANet에서 반대 방향, 즉 Bottom-up 방식을 추가하여 보완됩니다. 전체 구조는 아래와 같습니다.
PANet에서 연산은 위 이미지에서 (a)까지는 FPN과 동일하게 수행합니다. 그리고 (b)처럼 Bottom-up 방식으로 쌓아가는데, Ni는 Pi에 대응해 다운 샘플링을 통해 생성된 값입니다. Ni를 3x3 conv (stride=2)를 통과해 나온 값과 Pi+1을 더해서 새롭게 Ni+1을 생성하는 방식으로 Bottom-up을 추가해갑니다. (아래 이미지 참고)
Bi-FPN
Bi-FPN의 원래 이름은 weighted bi-directional feature pyrmaid network로 이름에서 알 수 있듯이 단순하게 양방향 FPN이 아니라 가중치에 대한 내용이 추가되어야 합니다. Bi-FPN은 크게 두가지로 나눠서 설명할 수 있습니다. 우선, 구조적인 측면에서 FPN에서 있었던 하나의 input edge를 갖던 노드를 제거하고, 같은 레벨에서 input으로부터 output으로 연결하는 edge를 추가(cross-scale connection)합니다.
그리고 가중치를 부여하기 위해 특징 맵마다 다른 기여도를 가질 수 있도록 단순합이 아닌 가중합 방식으로 구성합니다. 아래 식 예시로 주어진 td는 중간(top-down 방식)값이고, out은 bottom-up 으로 올라가는 노드를 가리킵니다.
이것 외에도 어떻게 하면 특징 맵을 잘 전달할 수 있을지 구조/연산 등에 대한 다양한 연구가 이뤄졌습니다. Neck에 대한 추가적인 개선이 필요하다면, DetectoRS/NASFPN/AugFPN 등 다른 내용들을 찾아본다면 도움이 될 것입니다.
참고자료
[1] Alexey Bochkovskiy, Chien Yao Wang, Hong Yuan Mark Liao. “YOLOv4: Optimal Speed and Accuracy of Object Detection”
[2] https://medium.com/analytics-vidhya/the-world-through-the-eyes-of-cnn-5a52c034dbeb
[4] Shu Liu, Lu Qi Haifang Qin Jianping Shi Jiaya Jia. "Path Aggregation Network for Instance Segmentation"
[5] Mingxing Tan, Ruoming Pang, Quoc V. Le. "EfficientDet : Scalable and Efficient Object Detection"
'Note > Deep Learning' 카테고리의 다른 글
[OD] 1-Stage Detector 변천사 | YOLO v1, SSD, RetinaNet 까지 (0) | 2024.10.14 |
---|---|
[OD] 2-Stage Detectors 변천사 | R-CNN 부터 Faster R-CNN 까지 (1) | 2024.10.11 |
[OD] 객체 탐지(Object Detection) 성능 판단 지표 정리 | IOU, mAP, FPS, FLOPS (0) | 2024.10.02 |
[CV] 이미지 분류 문제에 대한 분류 | Binary vs Multi-, Coarse vs Fine-grained, N-shot learning 까지 (2) | 2024.09.20 |
[CV] 3D 렌더링 기술 간단히 살펴보기 | NeRF와 3DGS를 중심으로 (1) | 2024.09.08 |