◾정의

🔸Localization (Bbox Regression)

◾Object Detection 방법론

🔻2-stage Detector

🔸R-CNN

[kernel academy - CV Basic]

[kernel academy - CV Basic]

  1. Region Proposals : 🔸SS : Selective Search 에 의해 2000개 RoI (Region of Interest) 를 추출
    1. selective search는 CPU에서 수행하는 rule-based 연산이기 때문에 R-CNN은 속도가 느리다.
  2. Warped Region : RoI 들을 resize, warp한다.
  3. Feature Extraction : Backbone 모델을 통해 특징을 추출
    1. 각각의 warped region을 CNN 백본으로 특징 추출해야 하므로 2000번의 CNN 연산 필요 → 많은 시간 소요.
  4. Output
    1. SVM Classifier : RoI가 어떤 클래스인지 분류
    2. Bbox regressor : RoI 내의 클래스가 어디에 있는지 bbox 출력

🔸Fast R-CNN

[kernel academy - CV Basic]

[kernel academy - CV Basic]

  1. Region Proposals : R-CNN과 동일하게 Selective Search로 2000개의 RoI들을 추출

  2. Feature Extraction : 원본 Input 이미지를 Backbone 모델에 입력하여 Feature Map 추출

    1. CNN 연산을 한 번만 수행 → 속도 개선
  3. RoI Projection : SPP-Net에서 나온 개념으로, RoI를 Feature Map에 projection하여 딱 그부분의 feature map만 사용한다.

    ref: 🔸SPP-Net for Object Detection

  4. RoI Pooling : 다양한 scale의 RoI가 존재하기 때문에 SPP-Layer를 통해 pooling하여 출력 크기를 고정한다. 이때, SPP-Net과 달리 single-level (single-bin) spatial pyramid max pooling을 진행한다.

    1. multi-level pooling을 한 SPP-Net보다 속도 빠름.
  5. Output

    1. Softmax Classifier : RoI가 어떤 클래스인지 분류
    2. Bbox Regressor : RoI 내의 클래스가 어디에 있는지 bbox 출력

🔸Faster R-CNN

[kernel academy - CV Basic]

[kernel academy - CV Basic]

  1. Backbone 모델을 통해 원본 Input image에 대해 Feature map을 추출한다.

  2. RPN 모듈을 통해 물체가 있을 확률이 높은 RoI 들을 추출한다.

    ⇒ GPU 연산을 통해 region proposal을 하기 때문에 CPU기반 selective search보다 빠르다.

  3. RoI Projection + RoI Pooling : Fast R-CNN과 동일하게 projection 후, single-level spatial pyramid max pooling을 진행한다.

  4. Output

    1. Softmax Classifier : RoI가 어떤 클래스인지 분류
    2. Bbox Regressor : RoI 내의 클래스가 어디에 있는지 bbox 출력

🔻1-stage Detector

🔸YOLO v.1

[kernel academy - CV Basic]

[kernel academy - CV Basic]

  1. Input image를 SxS grid로 분할 (논문에선 7x7)

  2. Input image를 Backbone에 통과시켜 Feature map 생성.

    1. YOLO v.1 는 의도적으로 7x7 grid에 맞게 Feature map도 7x7x1024 shape이 나오도록 설계됨. → feature map 한 칸이 grid cell 하나에 대응됨.

      [YOLO v.1 Architecture]

      [YOLO v.1 Architecture]

    2. Output shape : 7x7x30

      1. 7x7 = grid 크기
      2. 30 = 각 grid cell별 출력값
  3. 각 grid cell마다 b 개의 Bbox와 Confidence를 예측

    1. Bbox
      1. $b_x$ : bbox의 중심 좌표 x와 해당 cell의 중심 좌표 x 사이의 거리
      2. $b_y$ : bbox의 중심 좌표 y와 해당 cell의 중심 좌표 y 사이의 거리
      3. $b_h$ : bbox의 높이
      4. $b_w$ : bbox의 너비
    2. Confidence : 해당 Bbox에 물체가 있는지에 대한 확률 $p_c$

    → 총 5b 만큼의 예측값 출력

    → 논문에서는 cell마다 2개의 bbox를 최종 출력하도록 구현하였으므로 총 10개의 출력값이 나온다. $\lbrace p_{c1},b_{x1},b_{y1},b_{h1},b_{w1}, p_{c2},b_{x2},b_{y2},b_{h2},b_{w2} \rbrace$

  4. 각 grid cell마다 어떤 class가 있는지를 조건부확률 $P(C_i|\text{object})$ 로 예측

    [class probability map]

    [class probability map]

    1. 각 cell별로 class 개수만큼 확률을 예측한다. → 총 class 개수 c 개의 확률값 출력

    → 논문에서는 20개의 class를 예측하므로 총 20개의 출력값이 나온다.

    ⇒ 7x7x30에서 30의 구성 = p_bbox1, coord_bbox1, p_bbox2, coord_bbox2, class별 확률값

  5. Output 후처리

    1. 49개의 cell에서 96개의 bbox가 출력됨.
    2. confidence level(=C)가 낮은 bbox는 제거
    3. NMS를 통해 중복된 bbox는 제거
    4. 남아있는 bbox를 클래스별로 합쳐 최종 결과를 생성.

◾주요 데이터셋