Boostcamp AI Tech

[Boostcamp Day-42] Object Detection - Advanced Object Detection 1

ju_young 2021. 10. 5. 18:57
728x90

Cascade R-CNN

faster rcnn에서 postive/negative sample을 나누는 기준(0.5)에 집중하였다. 이 기준을 바꾸면 어떻게 될까라는 생각에서 cascade r-cnn이 제시된 것이다.


  • IoU threshold에 따라 다르게 학습되었을 때 결과가 다름
  • Input IoU가 높을수록 높은 IoU thereshold에서 학습된 model이 더 좋은 결과를 냄

  • IoU threshold에 따라 다르게 학습되었을 때 결과가 다름
  • 전반적인 AP의 경우 IoU threshold 0.5로 학습된 model이 성능이 가장 좋음
  • 그러나 AP의 IoU threshold가 높아질수록 IoU threshold가 0.6, 0.7로 학습된 model의 성능이 좋음

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

1. Method


  • (b) : bbox pooling을 반복 수행항 시 성능 향상되는 것을 증명

  • IoU threshold가 다른 classifier가 반복될 때 성능 향상 증명
  • B0 : RPN으로 얻은 bbox
  • RoI threshold가 각각 다른 H1, H2, H3를 생성
  • Faster RCNN과는 다르게 IoU threshold가 다른 Classifier C1, C2, C3를 학습
  • Loss의 경우 각각 C1, C2, C3의 classifier loss를 합
  • inference 시, C1, C2, C3의 confidence를 평균
  • 큰 성능 향상은 없음

  • IoU threshold가 다른 RoI head를 cascade로 쌓을 시 성능 향상 증명
  • 이전 B1, B2를 사용하여 projection
  • 여러 개의 RoI head(H1, H2, H3)를 학습
  • Head 별로 IoU threshold를 다르게 설정
  • C3, B3가 최종 결과

Deformable Convolutional Networks (DCN)

이전 글


Transformer

이전 글

1. Vision Transformer (ViT)


  1. Flatten 3D to 2D (Patch 단위로 나누기)
  2. Learnable한 embedding 처리
  3. Add class embedding, posigion embedding
  4. Transformer
  5. Predict


  • Flatten 3D to 2D (Patch 단위로 나누기)
    • P = patch 크기
    • N = HW/P^2
    • reshape image : HxWxc -> Nx(P^2xC)

 


  • Learnable한 embedding 처리
    • E(embedding matrix)라는 matrix를 이용해서 학습을 가능하게 만들어줌

 


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

 

  • ViT의 문제점
    • ViT의 실험부분을 보면 굉장히 많은 양의 Data를 학습하여야 성능이 나옴
    • Transformer 특성상 computataional cost 큼
    • 일반적인 backbone으로 사용하기 어려움

DETR

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

1. Architecture


  • CNN backbone을 사용
  • Transformer (Encoder-Decoder) 적용
  • Prediction Heads

  • Highest level feature map : Transformer 특성상 많은 연산량이 필요하여 highest level feature map만 사용
  • Flatten 2D
  • Positional embedding
  • Encoder

  • Decoder
  • Feed Forward Network(FFN)
  • N(한 이미지에 존재하는 object 개수보다 높게 설정)개의 output

2. Train

  • ground truth에서 부족한 object 개수만큼 no object로 padding 처리 -> 예를 들어 N=10이고 image에 3개의 객체가 존재한다면 나머지 없는 객체 7개를 no object로 처리하는 것이다.
  • ground truth와 prediction이 N:N 매핑
  • 각 예측 값이 N개 unique하게 나타나 post-process 과정이 필요 없음

Swin Transformer

  • CNN과 유사한 구조로 설계
  • Window라는 개념을 활용하여 cost를 줄임
  • 적은 Data에도 학습이 잘 이루어짐
  • CNN과 비슷한 구조로 Object Detection, Segmentation 등의 backbone으로 general하게 활용

1. Architecture


  • Patch Partitioning : 이미지를 Patch로 나누어줌
  • Linear Embedding
  • Swin Transformer Block
  • Window Multi-head Attention
  • Patch Merging

  • Patch Partitioning

 

  • Linear Embedding
    • detection task에서는 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
    • W-MSA의 경우 Window 안에서만 수행하여 receptive field를 제한하는 단점 존재 -> 이를 해결하기 위해 Shifted Window Multi-head Attention을 Transformer Block 2번째 layer에서 수행
    • Window size와 다르게 나뉜 부분들 해결 필요
    • 남는 부분들 (A, B, C)를 아래 그림처럼 옮겨줌
    • 남는 부분들은 masking 처리하여 self-attention 연산이 되지 않도록 함

  • Patch Merging

 

728x90