[부스트캠프 AI tech Det] week10 (2022.03.23) Neck

redgreen·2022년 3월 23일
0

1.Neck

  • backbone의 마지막 feature map만 사용하던 기존의 방법과 달리 각 feature map마다 RoI를 얻음
  • feature map일 수록 작은 범위(작은 객체)를 보고
  • 작은 feature map일수록 큰 범위(큰 객체)를 본다고 함
    --> 다양한 크기의 객체를 더 잘 탐지하기 위해서 Neck이 필요함, 작은 객체를 잘 탐지 못하는 것이 Object Detection의 문제
  • 하위 레이어는 semantic이 약하므로 상대적으로 semantic이 강한 상위 레이어에서의 feeding이 필요함

1.1 Feature Pyramid Network (FPN)

  • high level에서 low levelsemantic 정보 전달을 위해 top-down path way를 추가함
  • 여러 스케일의 물체를 탐지하기 위해 설계
  • 여러 크기의 feature를 사용

  • Lateral connections
    • top-down 방식의 connection을 위해 backbone에서는 1x1 conv를 통해 채널을 맞춰주고 high level에서는 upsampling을 통해 차원을 맞춘 후 더해줌.
  • N개의 RoI를 원본 이미지에 RoI projection하기 위해 크기(w,hw, h)를 알아야함
  • k  =  [k0  +  log2(wh/224)],  k0=4k \; = \; [k_0 \; + \; log_2(\sqrt {wh} / 224)], \; k_0 = 4
  • 위의 식을 이용하여 k번째 layer의 크기로 RoI projection을 함
  • Code

    build laterals: 각 feature map마다 다른 채널을 맞춰주는 단계
    build Top-down: channel을 맞춘 후 top-down 형식으로 feature map 교환(+)
    build outputs: 최종 3x3 conv를 통과하여 RPN으로 들어갈 feature 완성

1.2 Path Aggregation Network (PANet)

  • 기존의 FPN방식에서 처음의 bottom-up이 너무 깊어 low-level의 정보가 high-level에 도달하지 못하는 문제를 해결하기 위해 top-down 후에 한번 더 bottom-up의 구조를 만듦, 새로 생긴 bottom-up구조는 top-down의 방법처럼 레이어가 깊지 않아 low-level의 정보가 잘 반영됨.
  • Adaptive Feature Pooling

    • ROIAlign = ROI pooling으로 이해
    • ROI별로 모든 feature mapROI projection, ROI Pooling을 함

  • Code

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

2. After FPN

2.1 DetectoRS

  • Recursive Feature Pyramid(RFP)

    • 이름처럼 top-down에서 나온 feature map을 다시 backbonelow-level에 넣어줌
    • (1)
    • fi=Fi(fi+1,xi)f_i = F_i(f_{i+1}, x_i), FF: FPN
    • xi=Bi(xi1)x_i = B_i(x_{i-1}), BB: Backbone
    • (2)
    • fi=Fi(fi+1,xi)f_i = F_i(f_{i+1}, x_i), FF: FPN
    • xi=Bi(xi1,Ri(fi))x_i = B_i(x_{i-1}, R_i(f_i)), BB: Backbone, RR: ASPP
    • 숫자가 클수록 high-level

  • ASPP

    • Atrous conv(a.k.a dilated conv)를 사용
    • receptive field를 키우기위해 사용

2.2 Bi-directional Feature Pyramid (BiFPN)

  • feature map간에 shortcut path를 만듦
  • FPN처럼 단순 합이 아닌 Weighted Feature Fusion방식을 통해 lateral connection을 구현함

2.3 NASFPN

  • 강화학습 기반
  • COCO dataset, ResNet 기준으로 찾은 architecture이기 때문에 범용적이지 못함, 다른 데이터셋에 일반화 x
  • 많은 Parameter 수
  • 높은 search cost

2.4 AugFPN

  • highest feature map의 정보 손실(상위 레이어가 없음)
  • Residual Feature Augmentation
    • backbonehigh-level 레이어(C5C_5)에 연산과정을 추가해(M6M_6) 마지막 highest layer로 연결함
      1. input으로 들어온 C5C_5pooling을 통해 다른 사이즈로 만들어줌
      2. concat - 1x1 conv - 3x3 conv - sigmoid의 과정을 거쳐 weight를 구함
      3. 2에서 구한 weightC5C_5를 곱해줌으로 써 가중합된 M6M_6를 얻음

  • Soft RoI Selection
    • PANet에서는 max pooling을 사용하여 모든 feature mapRoI projection했기 때문에 정보의 손실이 있어 제안했다고 함
    • PANetMax pooling을 학습 가능한 가중합으로 대체
profile
인공지능 꿈나무

0개의 댓글