ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Object Detection] Neck
    CS 공부/AI 2023. 5. 3. 23:42

    Neck 이란?


    • backbone과 head(검출이 이루어지는 실질적인 부분)를 이어주는 연결부
    • backbone의 각각의 stages에서 서로 다른 feature maps를 추출
      1. Top-down 방식과 측면 연결을 통해서 기존의 convolutional network를 증강시킨다
      2. 이는 네트워크가 풍부하고 다양한 scale의 feature 층을 구성할 수 있도록 함
      3. 다양한 층 덕분에, 서로 다른 사이즈의 object 검출 가능
    • neck이 필요한 이유
      • 다양한 크기의 객체를 더 잘 탐지하기 위해서
      • neck이 없으면 작은 사이즈의 객체 탐지 못함

     

     

    다양한 Neck의 종류


    FPN (Feature Pyramid Network)

    • 대표적인 Neck
    • high level에서 low level로 semantic 정보 전달해주는 top-down path way 추가
      • pyramid 구조를 통해 high level 정보를 low level에 순차적으로 전달
    • Lateral connections
      • 의미론적으로 강한 특징 계층을 up-sampling 하여 고해상도를 가진 낮은 계층의 특징과 연결하는 방식 
      • Top-down path way: Nearset Neighbor Upsampling 진행 (16x16 -> 32x32)
      • Bottom-up path way: 1x1 conv 진행 (채널 64 -> 128)
      • 최종: 32x32x128

     

    • Pipeline
      • Backbone: ResNet

    wh가 작을수록, p2,3에서 RoI projection 진행, 커질수록 p4,5에서 진행

    • Contribution
      • 여러 scale의 물체를 탐지하기 위해 설계
      • 이를 달성하기 위해 여러 크기의 feature을 사용해야할 필요가 있음

     

    • Summary
      • Bottom up(backbone)에서 다양한 크기의 feature map 추출
      • 다양한 크기의 feature map의 semantic을 교환하기 위해 top-down 방식 사용

     

    • Code
    # Build laterals: 각 feature map마다 다른 채널을 맞춰주는 단계
    laterals=[lateral_conv(intputs[i]) for i, lateral_conv in enumerate(self.lateral_convs)
    
    # Build top-down: 채널 맞춘 후 top-down 형식으로 feature map 교환
    for i in range(3,0,-1):
    	prev_shape=laterals[i-1].shape[2:]
        laterals[i-1]+=F.interpolate(laterals[i],size=prev_shape)
        
    # Build outputs: 최종 3x3 conv 통과하여 RPN으로 들어갈 feature 완성
    outs=[self.fpn_convs[i](laterals[i]) for i in range(4)]

     

     

    PANet (Path Aggregation Network)

    • FPN의 네트워크가 매우 길어 low level의 feature가 high level로 제대로 전달이 안될 수 있다는 단점이 있음
      • 해결방법 Bottom-up Path Augmentation: bottom-up을 한번 더 해줌
    • RoI가 미세하게 차이나도 feature map은 큰 차이가 발생함
      • 해결방법 Adaptive Feature Pooling: RoI stage를 하나만 정하지 않고 모든 feature map으로부터 RoI projection 진행

     

    • Code
    # FPN: top-down에 3x3 convolution layer 통과
    inter_outs=[self.convs[i](laterals[i]) for i in range(4)]
    
    # Add bottom-up: FPN 통과 후, bottom-up path 더해줌
    for i in range(3):
    	inter_outs[i+1]+=self.downsample_convs[i](inter_outs[i])
        
    # Build outputs: 이후 FPN과 마찬가지로 학습을 위해 3x3 conv layer 통과
    outs.append(inter_outs[0])
    outs.extend([self.pafpn_convs[i-1](inter_outs[i]) for i in range(1,4)])

     

    DetectoRS

    • RPN과 Cascade R-CNN에서 영감을 얻음
    • 주요 구성: RFP, SAC
      • Recursive Feature Pyramid (RFP)
        • FPN의 정보를 backbone에 넘겨줄 때 ASPP 과정 사용
      • Atrous Convolution: receptive field 키움

     

    BiFPN

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

     

    NASFPN

    • 기존의 FPN, PANet의 단순 일방향(top->bottom / bottom ->top)보다 좋은 방법을 찾다가
    • NAS(Neural Architecture Search)를 통해서 FPN 아키텍쳐를 찾음

     

    • 단점
      • COCO dataset, ResNet 기준으로 architecture 찾아서 범용적이지 못함 (파라미터 많음)
      • High search cost: 다른 데이터셋이나 backbone에서 가장 좋은 성능을 내는 architecture을 찾기 위해 새로 찾아야함 

     

    AugFPN

    • 주요 구성
      • Consistent Supervision
      • Residual Feature Augmentation : C5 feature을 기준으로 M6 만들어냄
        1. ratio-invariant adaptive pooling: 다양한 scale의 feature map 생성
        2. C5 feature을 upsampling해서 3개의 feature map을 concat하고 Nx(1xhxw)의 값을 구함
          • Conv1x1, Conv3x3, Sigmoid layer을 차례로 통과
          • Nx(1xhxw) = spatial weight
        3. Nx(1xhxw)를 각 N개의 feature에 곱해 가중  summation
      • Soft  RoI Selection
        • FPN: 하나의 feature map에서 RoI 계산해서 최적화는 아님
        • PANet: 모든 feature map 이용했지만, max pool하여 정보 손실 가능성
        • 이를 해결하기 위해 Soft RoI Selection 설계
          1. 모든 scale의 feature에서 RoI projection 진행 후 RoI pooling
          2. channel-wise 가중치 계산 후 가중합 사용
          3. PANet의 max pooling을 2번의 가중합으로 대체

    'CS 공부 > AI' 카테고리의 다른 글

    [Object Detection] EfficientDet  (1) 2023.05.06
    [Object Detection] 1 stage Detectors  (0) 2023.05.04
    [Object Detection] MMDetection과 Detectron2  (0) 2023.05.03
    [Object Detection] 2 stage Detectors  (0) 2023.05.03
    [Object Detection] Overview  (0) 2023.05.02
Designed by Tistory.