CS 공부/AI

[Object Detection] Cascade RCNN, DCN, Transformer

imsmile2000 2023. 5. 6. 19:45

Cascade RCNN


 

 

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

 

 

 

 

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

 

 

 

  • high quality detection을 수행하기 위해선 IoU threshold를 높여 학습할 필요가 있음
  • 하지만 성능이 하락하는 문제가 존재하기 때문에 이를 해결하기 위해 Cascade RCNN 제안

 

Method

 

 

<Integral loss>

  • Faster RCNN과 다르게 IoU threshold가 다른 classifier C1,C2,C3 학습
  • Loss의 경우 각각 C1, C2, C3의 classifier loss를 합
  • Inference 시, C1,C2,C3의 confidence를 평균 냄
  • IoU threshold가 다른 classfier가 반복될 때 성능 향상 증명

 

<Cascade RCNN>

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

 

 

Deformable Convolutional Networks (DCN)


CNN의 문제점

  • 일정한 패턴을 지닌 CNN은 geometric transformations에 한계를 지님
    • geometric transformations: 이미지에 변형주는 것(affine), 다른 관점에서 보는 것(viewpoint), pose

 

  • 기존의 해결 방법: geometric augmentation, geometric invariant feature selection 
  • 하지만 기존의 사람이 넣어준 연산들만 학습할 수 있다는 것이 단점, 이를 해결하기위해 DCN 등장

 

Deformable Convolution

 

  • input feature map에서 2 branch로 나뉘어져서 1 branch는 offset을 계산하고, 또 다른 branch는 offset 정보를 받아 conv 연산을 수행
  • 일정한 패턴이 아니라 offset을 학습시켜 위치를 유동적으로 변화
  • 주로 object detection, segmentation에서 좋은 효과 보임

 

 

 

Convolution: 3x3 conv layer의 경우 식과 같이 grid R을 정의, R의 길이는 9

  • Weight가 R을 참고하면서 Input feature map의 어떤 픽셀과 곱할지 결정
  • Deformable Convolution: 배경에서 conv 학습하지 않고 객체에서만 학습시켜서, 객체가 있을법한 위치 더 잘 학습

한 점 P0에 대한 convolution과 deformable conv layer ∆Pn만큼 더해줌으로써 deformable하게 만들어줌

 

 

Transformer


  • NLP에서 long range dependency를 해결, 이를 vision에도 적용
  • ViT, DETR, Swin Transformer 등

 

Vision Transformer

  • 이미지 데이터를 자연어 데이터처럼 sequential하게 바꿔줘야함
  1.  Flatten 3D to 2D (이미지를 word 형태로 바꾸기)
    • grid 형태의 patch 단위로 나누기
    • HxWxC 크기의 채널을 Nx(P2xC)로 reshape
  2. Learnable한 embedding 처리 (matrix를 이용해서 학습 가능하게 만들어줌)
  3. class embedding, position embedding 추가
    • 앞서 만들어진 embedding 값에 class embedding 추가 ([CLS] 토큰)
    • 이미지의 위치에 따라 학습하기 위해 position embedding 추가
  4. Transformer 통과 (embedding: transformer 입력값)
  5. Predict
    • class embedding 벡터 값을 MLP head에 입력시켜 최종 결과를 추출

 

DETR

  • Transformer을 처음으로 object detection에 적용
  • 기존 object detection의 hand-crafted post process 단계를 transformer를 이용해 없앰
  • Architecture
    • CNN backbone
    • Transformer (Encoder-Decoder)
    • highest feature map: transformer 특성상 연산량이 많아 highest level feature map만 사용
    • flatten 2D / positional embedding / encoder
    • 224 x 224 input image
    • 7x7 feature map size: 49개의 feature 벡터를 encoder 입력값으로 사용
    • Decoder
    • Feed Forward Network(FFN)
    • N개의 output (이미지에 존재하는 object 개수보다 높게 설정해주어야함)

 

  • Train시 유의사항
    • N=10으로 설정하고 실제 객체가 3개 존재하면 groundtruth에서 부족한 object 개수만큼 no object로 padding 처리
    • groundtruth와 prediction을 N:N 매핑
    • 각 예측값 N개가 unique하게 나타나 post-process 과정이 필요 없음

 

Swin Transformer

  • ViT의 문제점
    • 굉장히 많은 양의 데이터를 학습하여야 성능이 나옴
    • transformer 특성상 computational cost 큼
    • 일반적인 backbone으로 사용하기 어려움

 

  • 해결방법: CNN과 유사한 구조로 설계, Window라는 개념을 활용하여 cost를 줄임
  • Architecture

  1. Patch Partitioning: 이미지를 n개의 패치로 나누어주는 과정
  2. Linear Embedding: ViT와 embedding 방식 동일, class embedding 제거
  3. Patch Merging: 패치 사이즈 줄이고 채널을 늘림
  4. Swin Transformer block: attention을 두번 통과시켜줌
    • 첫번째 연산에서는 Window multi-head attention 사용
      • Window 단위로 embedding을 나눔
      • ViT는 모든 embedding을 transformer에 입력
      • Swin-T는 window 안에서만 transformer 연산을 수행해서 computational cost가 window 크기에 따라 조절 가능
      • window 안에서만 수행하여 receptive field를 제한하는 단점이 존재
    • 두번째 연산에서는 Shifted Window multi-head attention 사용
      • window multi-head attention의 단점 해결
      • Window를 위아래로 조금씩 옮긴 shifted window 사용
      • window size와 다르게 나뉜 부분들 해결 필요
      • 남는 부분들을 옮겨주고 masking 처리하여 self-attention 연산이 되지 않도록 함

 

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