본문 바로가기

부스트캠프 AI Tech/[Week10] Object Detection (2)

[Week10] Object Detection (2)

*Advanced Object Detection 1

 

 

1. Cascade RCNN

  • 기존 Faster-RCNN에서는 RPN에서 0.7이상의 IoU를 갖는 anchor box를 Positive sample, 0.3이하의 IoU는 Negative sample로 정의, Head Network에서는 0.5이상을 positive, 0.5미만을 negative로 정의했음.
  • 하지만 이 IoU 기준을 정하는 명확한 기준이 없었기 때문에 IoU threshold를 바꿔보면 성능이 어떻게 바뀔지에 집중한것이 Cascade RCNN이다

 

  • IoU를 0.7로 바꾸었을때 False positive가 줄어드는것을 볼 수 있음.

 

 

 

  • Localization Performance
    • x축 : RPN을 통과한 box가 GT와 갖는 IoU값
    • y축 : Box Head를 통과시킨 box와 GT와 갖는 IoU값
    • IoU threshold에 따라 다르게 학습되었을 때 결과가 다름
    • Input IoU가 높을수록 높은 IoU threshold 에서 학습된 model이 더 좋은 결과를 냄
  • Detection Performance
    • IoU threshold에 따라 다르게 학습되었을 때 결과가 다름
    • 전반적인 AP의 경우 IoU threshold 0.5로 학습된 model이 성능이 가장 좋음
    • 그러나 AP의 IoU threshold가 높아질수록 (ex. AP70, AP90) IoU threshold가 0.6, 0.7로 학습된 model의 성능이 좋음

 

* motivation

  • 학습되는 IoU에 따라 대응 가능한 IoU 박스가 다름
  • 그래프와 같이 high quality detection을 수행하기 위해선 IoU threshold를 높여 학습할 필요가 있음
  • 단, 성능이 하락하는 문제가 존재
  • 이를 해결하기 위해 Cascade RCNN을 제안

 

*Method

  • (c) Integral Loss
    • Fastern RCNN과는 다르게 IOU threshold가 다른 Classifier C1, C2, C3를 학습
    • Loss의 경우 각각 C1, C2, C3의 classifier loss를 합
    • Inference 시, C1, C2, C3의 confidence 를 평균 냄
    • 큰 성능 향상은 없음
  • (d) Cascade R-CNN
    • 여러 개의 RoI head (H1, H2, h3)를 학습
    • 이 때 Head 별로 IOU threshold를 다르게 설정
    • C3, B3가 최종 결과
  • 결과

    stage별 IoU threshold 기준

High quality IoU에서 성능향상이 높음

 

 

  • 결론

    • Bbox pooling을 반복 수행할 시 성능 향상되는 것을 증명 (Iterative)
    • IOU threshold가 다른 Classifier가 반복될 때 성능 향상 증명 (Integral)
    • IOU threshold가 다른 RoI head를 cascade로 쌓을 시 성능 향상 증명 (Cascade)

 

 

2. Deformable Convolutional Networks (DCN)

CNN 문제점

  • 일정한 패턴을 지닌 convolution neural networks는 geometric transformations에 한계를 지님
  • what is geometric?
    • Affine
    • Viewpoint


    • pose


  • 기존 해결 방법
    • geometric augmentation
    • geometric invariant feature engineering
  • 제안하는 Module
    • Deformable convolution

 

*Deformable Convolution

 

  • 기존 feature에서 각 픽셀마다 다양한 offset을 줘서 그 위치에 이미지와 element-wise 곱 수행

 

 

 

 

  • 한 점 𝑃0 에 대한 convolution 과 deformable convolution layer
  • ∆𝑃𝑛 만큼 더해줌으로써 deformable 하게 만들어줌.

 

 

*Results

  • 고정된 feature가 아니라 좀 더 객체를 중점적으로 feature를 뽑을 수 있음

 

  • 일정한 패턴을 지닌 convolution neural networks는 geometric transformations에 한계를 파악
  • 일정한 패턴이 아니라 offset을 학습시켜 위치를 유동적으로 변화
  • 주로 object detection, segmentation에서 좋은 효과를 보임

 

 

3. Transformer

Transformer

  • NLP에서 long range dependency를 해결 이를 vision에도 적용
  • Vision Transformer (ViT)
  • End-to-End Object Detection with Transformers (DETR)
  • Swin Transformer

 

 

*ViT

이미지를 sequential한 데이터로 바꿔줘야함 -> 이미지를 patch로 나눔.

  • Flatten 3D to 2D (Patch 단위로 나누기)


    • 𝑃 = 𝑝𝑎𝑡𝑐ℎ 크기
    • N = HW/P 2
    • Reshape image x ∈ ℝ^(H×W×C) → xp ∈ ℝ^(N×(P 2×C))
  • Learnable한 embedding 처리


    • 𝐸 라는 matrix를 이용해서 학습을 가능하게 만들어줌
  • Add class embedding, position embedding


    • 앞서 만들어진 embedding 값에 class embedding 추가 ([CLS]Token)
    • 이미지의 위치 따라 학습하기 위해 position embedding 추가
  • Transformer


    • Embedding: Transformer 입력값
  • Predict
    • Class embedding vector 값을 MLP head에 입력시켜 최종 결과를 추출
  • ViT의 문제점
    • ViT의 실험부분을 보면 굉장히 많은양의 Data를 학습하여야 성능이 나옴
    • Transformer 특성상 computational cost 큼
    • 일반적인 backbone으로 사용하기 어려움

 

 

 

*DETR(End-to-End Object Detection with Transformer)

  • Transformer를 처음으로 Object Detection에 적용
  • 기존의 Object Detection의 hand-crafted post process 단계를 transformer를 이용해 없앰

 

 

 

  • Architecture


    • CNN backbone
    • Transformer (Encoder-Decoder)
    • Prediction Heads
    • Highest level feature map
    • Transformer 특성상 많은 연산량이 필요하여 highest level feature map만 사용
    • Flatten 2D
    • Positional embedding
    • Encoder
    • 224 x 224 input image
    • 7 x 7 feature map size
    • 49 개 의 feature vector 를 encoder 입력값으로 사용
    • Decoder
    • Feed Forward Network (FFN)
    • N개의 output
    • 이 때 N은 한 이미지에 존재하는 object 개수 보다 높게 설정
  • Train
    • 이 때 groundtruth에서 부족한 object 개수만큼 no object로 padding 처리
    • 따라서 groundtruth와 prediction이 N:N 매핑
    • 각 예측 값이 N개 unique하게 나타나 post-process 과정이 필요 없음
  • Experiments


    • 전체적인 AP는 상승하였으나, highest level feature만 사용하여 APS 하락

 

 

*Swin Transformer

  • Backbone으로는 transformer를 활용할 수 없었다. why?
    • ViT의 실험부분을 보면 굉장히 많은량의 Data를 학습하여야 성능이 나옴
    • Transformer 특성상 computational cost 큼
    • 일반적인 backbone으로 사용하기 어려움
  • 해결법
    • CNN과 유사한 구조로 설계
    • Window라는 개념을 활용하여 cost를 줄임

 

 

*Architecture

 

  • Patch Partitioning

  • Linear Embedding
    • ViT와 embedding 방식은 동일, 그러나 class embedding 제거

  • Swin Transformer Block

  • Window Multi-head Attention

    • Window 단위로 embedding을 나눔.
    • 기존 ViT같은 경우 모든 embedding을 Transformer에 입력
    • Swin-Transformer는 Window 안에서만 Transformer 연산 수행
    • 따라서 이미지 크기에 따라 증가되던 computational cost가 Window 크기에 따라 조절 가능
    • Window 안에서만 수행하여 receptive field를 제한하는 단점 존재 -> shifted window multi-head attention활용
    • Shifted Window Multi-Head Attention


      • W-MSA의 경우 Window 안에서만 수행하여 receptive field를 제한하는 단점 존재
      • 이를 해결하기 위해 Shifted Window Multi-Head Attention을 Transformer Block 2번째 layer에서 수행
      • Window size와 다르게 나뉜 부분들 해결 필요
  • Patch Merging

*Experiment

 

  • 적은 Data에도 학습이 잘 이루어짐
  • Window 단위를 이용하여 computation cost를 대폭 줄임
  • CNN과 비슷한 구조로 Object Detection, Segmentation 등의 backbone으로 general하게 활용