[AITech][Object Detection] 20220322 - Neck

6 minute read


**본 포스팅은 ‘송원호’ 강사 님의 강의를 바탕으로 작성되었습니다. **

Neck

이번 포스팅에서는 Neck에 대해 다룹니다.

Neck이란?

요즘 detection model들에는 Neck 이 사용됩니다.

앞선 포스팅에서 살펴본 2 stage detector의 경우, backbone의 마지막 출력인 feature map만을 이용하여 RPN과 Prediction을 수행했었습니다. 아래와 같이 말이죠.

image-20220322131610302

하지만 backbone의 중간 출력 feature map들도 충분히 활용할 만한 가치가 있는 정보들을 포함하고 있습니다. CNN이 익숙하신 분들은, CNN의 각 층마다 뽑아내는 특징이 약간씩 다르다는 것을 알고 계실겁니다. low level의 layer에서는 선이나 기울기 같은 단순한 위치적 feature들을, high level의 layer에서는 패턴과 같은 추상적인 의미적 feature들을 학습하죠.

Neck은 이 backbone의 중간 feature map들을 모두 활용하자는 목적으로 생겨났습니다.

image-20220322131721678

정리하면, Neck의 목적은 Backbone의 중간 단계에서의 feature map들을 모두 활용하여 더 작은 크기의 객체까지도 탐지할 수 있도록 하는 것입니다.

FPN

Neck에 대한 최초의 논문으로 FPN(Feature Pyramid Network)가 있습니다.

FPN이 동작하는 방식은 Top-down path way로 동작합니다. 이는 아래와 같이 high level의 feature map을 low level의 feature map과 합치는 것을 의미합니다.

image-20220322134525118

그런데 CNN을 거치며 feature map의 h, w는 작아지고 c는 커지기 때문에 high level과 low level의 feature map의 shape이 동일하지 않습니다. 이를 위한 connection을 Lateral connection이라고 합니다. Lateral connection은 아래와 같이 high level feature map에는 upsampling을 통해 h, w를 늘리고, low level feature map에는 1x1 conv를 적용하여 c를 늘립니다.

FPN에서 사용한 Upsampling은 Nearest Neighbor Upsampling입니다.

image-20220322135105616

FPN은 backbone network로 ResNet을 사용했습니다. ResNet은 각 conv block마다 feature map의 h와 w는 0.5배가 되고 c는 2배가 됩니다. 따라서 채널 수를 2배로 늘리는 1x1 conv와 h와 w를 2배로 늘리는 upsampling을 일관적으로 적용할 수 있습니다.

FPN의 구조는 아래와 같습니다. Neck에서의 각 4 stage의 feature map들은 각각 서로 다른 RPN에 전달되어 ROI 후보들이 제안됩니다. 총 4개의 RPN에서 제안된 ROI 후보들은 objectness score가 가장 높은 N개의 ROI들 만이 선택되고, 이 N개의 ROI들에 NMS를 적용하여 최종적으로 1000개의 ROI 만이 Prediction module에 전달됩니다.

image-20220322135837082

추가적으로, Neck을 사용할 때에는 ROI가 제안된 feature map이 서로 다르기 때문에 해당 ROI가 어떤 feature map에서 추출된 것인지 알아야 ROI projection을 수행할 수 있습니다. 바로 이에 대한 공식이 위 이미지에서 우하단에 있는 공식입니다.


PANet

FPN에는 한 가지 큰 문제가 있습니다. 바로 high level feature를 low level feature에 전달해주는 과정은 있지만, low level feature를 high level feature에 전달해주는 과정이 없다는 것입니다.

PANet에서는(PANet은 본래 segmentation을 위한 모델입니다) high level의 feature map에도 low level feature가 충분히 포함될 수 있도록 하기 위해 Bottom-up path augmentation을 수행합니다.

image-20220322140524319

또한 PANet에서는 해당 ROI에 대응하는 feature map을 하나만 고르지 않고, 모든 단계의 feature map에 대해 ROI projection을 수행합니다. 그리고 각 feature map들을 channel-wise max pooling하여 하나의 feature map을 얻어냅니다. 이를 Adaptive Feature Pooling이라고 하고, 이로부터 조금 더 일반적이고 융통성 있는 에측이 가능하게 됩니다.

image-20220322180820317


DetectorRS

DetectoRS는 2021년 발표된 모델입니다.

DetectoRS의 moto는 반복입니다. 단계가 반복될 수록 성능이 나아지는 모델들을 보고, 이것을 Neck 과정에 적용한 것입니다.

DetectoRS의 주요 아이디어로는 Recursive Feature Pyramid(RFP)와 Switchable Atrous Convolution(SAC)가 있는데요, 여기서는 Neck에서 사용되는 Recursive Feature Pyramid(RFP)에 대해 보겠습니다.

RFP를 쉽게 말하자면 N번 반복된 FPN입니다. 여기서 실제로는 FPN의 feature map이 다시 backbone의 feature map과 합쳐질 때에는 ASPP(Atrous Spatial Pyramid Pooling)을 사용하여 feature map을 합칩니다. ASPP는 일반 convolution보다 더 넓은 receptive field에서 general한 정보를 뽑아내는 데 도움을 줍니다.

image-20220322142619729

다만, FPN이 반복되는 구조인 만큼 성능은 좋지만 그 속도가 매우 느립니다.


BiFPN

BiFPN(Bi-directional Feature Pyramid Network)은 Google에서 발표한 EfficientDet 논문에서 제안된 Neck 구조입니다. EfficientDet에 대한 내용은 다른 포스팅에서 다룰 예정입니다.

BiFPN은 PAFPN(PANet에서의 Neck) 구조를 개선한 구조라고 할 수 있습니다. 불필요한 연결을 끊어버리고, residual connection을 추가한 형태입니다.

image-20220322143549600

그리고 이로 인해 불필요한 연산이 줄어서, BiFPN에서는 위의 repeated block 구조를 반복하여 Neck을 설계했습니다.

또한 특징적인 것이, PANet에서는 feature map들 간에 단순 summation을 했던 것에 비해 BiFPN에서는 Weighted Feature Fusion을 수행합니다. 이는 feature map이 더해질 때 각 feature map에 가중치를 두어 weighted sum을 하는 형태이고, 이 가중치도 학습 가능한 파라미터로 두어 학습이 가능하게 합니다.

이것으로 중요한 feature를 강조하여 성능 향상을 이루면서도, 모델 사이즈의 증가는 거의 없다고 합니다.

image-20220322143946890

위 그림에서 위첨자에 in이 있는 것은 첫번째 layer, td(top-down)가 붙어있는 것은 중간 layer, out이 붙어있는 것은 마지막 layer의 feature map을 가리킵니다.


NASFPN

일관적인 구조들을 사용한 앞선 Neck들과는 달리, NASFPN은 NAS(Neural Architecture Search)를 이용해 최적의 FPN 아키텍쳐를 찾아서 사용했습니다.

그리고 그 형채는 아래와 같습니다. (누가 봐도 사람이 짜지 않은 것 같은 구조…)

image-20220322144517686

NASFPN의 장점이자 단점은 COCO dataset과 ResNet을 사용했을 때에 가장 좋은 성능을 보여준다는 것입니다. Dataset을 바꾸거나 backbone을 바꾸면 위 구조는 좋은 성능을 보이지 못 하고, NAS를 이용해 또 다른 최적의 구조를 찾아야 합니다.


AugFPN

마지막으로 소개할 것은 AugFPN입니다. AugFPN에서는 기존 FPN의 문제점을 3가지로 보고 각각을 해결하기 위한 솔루션을 제시했습니다.

  • 서로 다른 level의 feature 간의 semantic 차이 => Consistent Supervision
  • Highest feature map의 정보 손실 => Residual Feature Augmentation
  • 1개의 feature map에서 ROI 생성 => Soft ROI Selection

그 중 Neck에서 사용되는 기법은 Residual Reature Augmentation과 Soft ROI Selection에 대해 알아보겠습니다.

Residual Feature Augmentation

기존 FPN 구조에서 highest layer의 feature map은 정보를 전달하기만 하고, 정보를 전달받는 것은 없었습니다.

Residual Feature Augmentation은 highest layer도 추가적인 정보를 전달받아 더 나은 prediction이 가능하도록 합니다.

image-20220322173833114

위 그림에서 Residual Feature Augmentation을 통해 얻게 되는 feature map을 M6라고 하겠습니다. 지금부터는 이 M6 feature map을 어떻게 구하는지 알아봅니다.

  1. 입력으로 backbone의 마지막 출력인 highest layer의 feature map을 받습니다. (이 feature map을 C5라고 하겠습니다)

  2. C5에 Ratio-invariant Adaptive Pooling을 적용하여 비율은 동일하고 크기가 다른 여러 feature map을 생성합니다.

    • 다양한 scale의 feature map 생성
    • 256 channels

    image-20220322174851705

  3. 2에서 얻은 여러 개의 feature map을 Adaptive Spatial Fusion을 이용해 합쳐서 M6 feature map을 만들어냅니다.

    • 2에서 얻은 feature map들을 동일한 size로 upsampling
    • 각 feature map의 각 픽셀마다(총 NxHxW) 가중치를 생성해서 weighted summation

    image-20220322174626112

Soft ROI Selection

FPN에서는 생성된 여러 단계의 feature map들(P2 ~ P5) 중 하나의 feature map을 선택해 ROI projection을 수행했습니다.

AugFPN에서는 PAFPN과 유사하게, 모든 단계의 feature map들을 모두 활용합니다.

image-20220322175727852

단, PAFPN에서는 feature map들을 channel-wise max pooling 했기 때문에 정보 손실 가능성이 있습니다. AugFPN에서는 이를 방지하기 위해 Soft ROI Selection을 수행합니다.

Soft ROI Selection에서는 우선 PAFPN과 동일하게 각 단계의 feature map에서 ROI prejection과 ROI pooling을 수행합니다. 그 다음 아래의 과정을 수행합니다.

  1. 4개의 feature map들을 channel-wise concat하고 GMP(Global Max Pooling)를 적용하여 (4C,1,1) 모양으로 만듭니다.
  2. 1x1 conv를 적용하여 (C/4, 1, 1) 모양으로 만듭니다.
  3. 다시 1x1 conv를 적용하여 (4C, 1, 1) 모양으로 만듭니다.
  4. Split해서 (C, 1, 1) 모양 4개로 만들고, 4개의 벡터에 대해 sigmoid를 적용합니다.
  5. 1에서의 4개의 feature map에 4개의 가중치 벡터를 channel-wise로 각각 곱하고, 이를 ROI-wise로 더하여 나온 feature map을 사용합니다.



그럼 정리해보겠습니다.

  • FPN
    • Top-down path로 high level의 feature map 정보를 low level의 feature map에 전달
    • 4단계의 feature map들 중 하나의 feature map을 선택해 predict
  • PAFPN
    • High level의 feature map도 low level의 feature map 정보를 전달받을 수 있도록 bottom-up path를 추가
    • 4단계의 feature map 각각에 ROI projection/pooling을 적용한 후 channel-wise max pooling을 통해 생성한 feature map을 이용해 predict
  • DetectoRS
    • 반복적인 Recursive Feature Pyramid(RFP)를 적용하여 성능 개선
    • ASPP, Fusion 등을 사용
  • BiFPN
    • PAFPN을 개선하여 불필요한 연결을 끊어버리고 residual connection을 추가
    • 4 단계의 feature map에 학습 가증한 가중치를 두어 weighted feature fusion을 통해 생성한 feature map을 이용해 predict
  • NASFPN
    • NAS를 이용해 COCO dataset, ResNet backbone을 사용할 때의 최적의 neck 구조를 생성
  • AugFPN
    • FPN의 3가지 문제점을 개선
    • Highest layer의 feature map의 정보 손실을 막기 위해 residual feature augmentation을 수행
    • 4 단계의 feature map에 adaptive spatial fusion을 통해 생성한 feature map을 이용해 predict. 이를 soft roi selection이라고 함



참고 자료

  • Alexey Bochkovskiy, Chien-Yao Wang, Hong-Yuan Mark Liao, “YOLOv4: Optimal Speed and Accuracy of Object Detection”
  • Tsung-Yi Lin, Piotr Dollár, Ross Girshick, Kaiming He, Bharath Hariharan, Serge Belongie, “Feature Pyramid Networks for Object Detection”
  • Mingxing Tan, Ruoming Pang, Quoc V. Le, ‘EfficientDet: Scalable and Efficient Object Detection”
  • 갈아먹는 Object Detection, [7] Feature Pyramid Network
  • Siyuan Qiao, Liang-Chieh Chen, Alan Yuille, ‘DetectoRS: Detecting Objects with Recursive Feature Pyramid and Switchable Atrous Convolution’
  • Golnaz Ghaisi, Tsung-Yi Lin, Ruoming Pang, Quoc V. Le, ‘NAS-FPN: Learning Scalable Feature Pyramid Architecture for Object Detection”
  • Chaoxu Guo, ‘AugFPN: Improving Multi-scale Feature Learning for Object Detection”
  • Jonathan Hui, Understanding Feature Pyramid Networks for object detection (FPN)

Categories: ,

Updated:

Leave a comment