본문 바로가기

부스트캠프 AI Tech/[Week9] Object Detection (1)

[Week9] Object Detection - Neck [Day2]

1. Neck

 

1.1 Overview

  • History
  • Neck은 무엇인가?
    • 위는 기존 2-stage 방식
    • backbone의 마지막 feature map을 RPN에 통과시키게 됨
    • 근데 왜 마지막 feature map을 활용해야 할까? => 중간의 feature map들도 활용해보자
      Neck 등장
  • Neck은 왜 필요한가?
    • low-level의 feature map은 선, 점, 기울기 등의 정보와 작은 객체를 잘 표현
    • high-level의 feature map은 object의 semantic한 정보와 큰 객체를 잘 표현
    • 따라서 Neck을 활용하여 두 정보를 다 활용
    • 다양한 크기의 객체를 더 잘 탐지 하게 됨


    • 그렇다면 Neck을 활용하지 않고 여러 level에서의 feature map을 활용하면 되지 않냐?

      • Neck을 활용하여 하위 level의 feature는 semantic이 약하므로 상대적으로 semantic이 강한 상위 feature와의 교환이 필요함
    • 결국 low-level부터 high-level feature를 적절히 섞어주고 region을 뽑음으로써 작은 객체를 더 잘 탐지하게 됨

 

 

1.2 Feature Pyramid Network (FPN)

 

  • FPN이전에는 이미지 사이즈를 조절하여 작은 객체를 탐지하고자 했음

 

  • 마지막 feature map만 활용해보자

 

  • 중간중간 feature map을 그대로 활용해보자 (SSD)

 

*FPN은 어떤것을 보완했나?

  • high level에서 low level로 semantic 정보 전달 필요
  • 따라서 top-down path way 추가
    • Pyramid 구조를 통해서 high level 정보를 low level에 순차적으로 전달
      • Low level = Early stage = Bottom
      • High level = Late stage = Top

 

  • Bottom-up

 

 

  • Top-down
  • 두 level을 어떻게 적절히 섞을까? 
    • Lateral connections


      • high-level은 up sampling, low-level은 1x1 conv로 채널을 늘려줌
      • element-wise 연산으로 합쳐줌. (더해줌?)
    • Nearest Neighbor Upsampling


  • Pipeline (Backbone : ResNet)
    ResNet

    Neck의 Lateral connections
    • 4개의 stage를 bottom-up과 top-down에서 lateral connection이 일어남
    • 이후 RPN을 거쳐 RoI를 뽑음
    • RoI가 어떤 스테이지로부터 나온것인지 mapping을 해줌

      • 어떤 stage의 feature map으로부터 roi projection을 진행할지 알 수 있음
  • 결과

 

  • Code
    • Build laterals : 각 feature map 마다 다른 채널을 맞춰주는 단계



    • Build Top-down : channel을 맞춘 후 top-down 형식으로 feature map 교환



    • Build outputs : 최종 3x3 convolution을 통과하여 RPN으로 들어갈 feature 완성


 

1.3 Path Aggregation Network (PANet)

*Problem in FPN

  • ResNet은 많은 conv와 pooling이 존재
  • low-level feature가 backbone을 통과하는 과정에서 제대로 high-level로 전달될 수 있을까?

 

*Bottom-up Path Augmentation

  • 기존 FPN에서 (b) bottom-up path way를 하나 추가 해주었음

 

*Adaptive Feature Pooling

  • 기존 FPN방식은 불과 몇 픽셀 차이로 인해 stage가 나뉘어 버리는 문제가 있음
  • 따라서 각 stage의 roi를 projection해서 사용하지 않고, AFP에서는 모든 RoI를 FC layer로 합침

 

*Code

  • FPN : Top-down에 3x3 convolution layer 통과하는 것 까지 동일
  • Add bottom-up : FPN을 통과한 후, bottom-up path를 더해줌
  • Build outputs : 이후 FPN과 마찬가지로 학습을 위해 3x3 convolution layer 통과

 

 

 

 

 

 

2. After FPN

 

 

2.1 DetectoRS

*Motivation

  • Looking and thinking twice
    • Region proposal networks(RPN)
    • Cascade R-CNN

 

*주요구성

  • Recursive Feature Pyramid (RFP)
  • Switchable Atrous Convolution (SAC)

 

 

*Recursive Feature Pyramid (RFP)

  • Neck 정보를 backbone이 다시 학습하는 방식

 

  • 좌측 red box는 FPN과 동일
  • FPN feature를 다시 backbone에 넣는 과정이 ASPP가 이루어짐
  • 단점 : FLOPs가 매우 증가
  • What is ASPP?

    • receptive field를 증가 시키는 방법
    • receptive field를 증가시키고 pooling하여 concat

 

2.2 Bi-directional Feature Pyramid (BiFPN)

 

*Pipeline

  • 기존 노드들을 제거하여 간단하고 효율적으로 바꿈
  • 하지만 high-level feature와 low-level feature을 합치는 과정에서 단순 summation을 하면 정보가 섞일 수없음
  • 따라서 Weighted Feature Fusion 방법 제안

 

*Weighted Feature Fusion

  • FPN과 같이 단순 summation을 하는 것이 아니라 각 feature별로 가중치를 부여한 뒤 summation
  • 모델 사이즈의 증가는 거의 없음
  • feature별 가중치를 통해 중요한 feature를 강조하여 성능 상승

 

 

2.3 NASFPN

 

*Motivation

  • 기존의 FPN, PANet
  • Top-down or bottom up pathway
  • 단순 일방향(top->bottom or bottom ->top) summation 보다 좋은 방법이 있을까?
  • 그렇다면 FPN 아키텍처를 NAS (Neural architecture search)를 통해서 찾자!

 

*Architecture

 

*Search

 

*Stacking

  • NAS를 활용했을때 같은 FLOPs에서 성능이 좋음

 

*단점

  • COCO dataset, ResNet기준으로 찾은 architecture, 범용적이지 못함
    • Parameter가 많이 소요
  • High search cost
    • 다른 Dataset이나 backbone에서 가장 좋은 성능을 내는 architecture를 찾기 위해 새로운 search cost

 

 

2.4 AugFPN

 

*Overview

  • Problems in FPN
    • 서로 다른 level의 feature간의 semantic차이
    • Highest feature map의 정보 손실
    • 1개의 feature map에서 RoI 생성

 

 

  • 주요 구성
    • Consistent Supervision
    • Residual Feature Augmentation
    • Soft RoI Selection

 

*Residual Feature Augmentation

  • Ratio-invariant Adaptive Pooling
    • 다양한 scale의 feature map 생성
    • Adaptive Spatial Fusion(256 channels) : transformer 처럼 중요도를 스스로 학습
      • N 개의 feature에 대해 가중치를 두고 summation을 하는 방법
      • concat후 1x1 conv로 Cxhxw로 만들어주고, 3x3 conv로 다시 Nx(Cxhxw)로 만듦
      • channel wise sigmoid 연산을통해 Nx (1xhxw)를 만듦
      • N x (1xhxw)의 의미는 각각의 픽셀별로 3개의 value가 나타나고, 각 픽셀의 중요도를 나타낼 수 있음 
        -> spatial weight

 

*Soft RoI Selection

 

  • FPN과 같이 하나의 feature map에서 RoI를 계산하는 경우 sub-optimal
  • 이를 해결하기 위해 PANet에서 모든 feature map을 이용했지만, max pool하여 정보 손실 가능성
  • 이를 해결하기 위해 Soft RoI Selection을 설계

 

  • 모든 scale의 feature에서 RoI projection 진행 후 RoI pooling
  • Channel-wise 가중치 계산 후 가중 합을 사용
  • PANet의 max pooling을 학습 가능한 가중 합으로 대체

 

*Experiment