Learn

[컴퓨터비전] R-CNN

부루기 2024. 6. 13. 08:09
728x90

서론

  1. Detection분야에서 DNN이 나오기 이전에 마지막까지 사용되었던 모델이다.
  2. R-CNN은 Region Based Convolutional Neural Networks : 2013이 전체 이름이다.
  3. 이 부분은 DNN 이전의 기술 및 생각들을 정리하기 참 좋은 모델이라고 생각한다.
  4. 왜냐하면 이해하기 힘든 최신 논문에 비하면 이 논문은 굉장히 인간적이고 필자가 이해할 수 있는 고민들을 공감할 수 있게 되면서 여러 개념이 정리된 좋은 개념이였다.

본론

  1. 이 모델은 크게 2가지로 구성되어 있다. 1) 사진에서 어디에 객체가 있는 지확인하는 Extract Region proposal, 2) 객체가 있을 법한 곳에서 이게 무슨 객체인지 분류하는 Classify Region
    1. DNN을 먼저 공부하고 이걸 보면 대부분 End to End(입력부터 목적까지 한번에 가는 것)만을 보다보니 이 부분이 생소할 것이다.
    2. 특이하게 이 모델은 2-stage라고 하며, 학습 방법이 다르다. → 이것이 성능에 굉장히 발목을 잡기에 이후에 나오는 모델의 개선 목표가 된다.
  2. Extract Region proposal
    1. 여기는 Detection 분야에서 사용되는 Selective Search를 이용해서 Bounding box(이후, Bbox라고 한다.)를 구하는데, 이를 설명하기에는 이야기가 새기에 간략하게 설명하겠다.
    2. Selective Search는 쉽게말해서 사진 전체에서 각기 cluster를 만든다. → iteration하면서 이 클러스터를 뭉쳐 큰 부분으로 만든다. → 학습이 끝나고 만들어진 cluster를 담을 수 있는 bounding box를 output으로 낸다.
    3. 이 부분을 바로 다음 단계로 전달하면 좋겠지만 앞서 말했듯 이 모델은 two-stage 모델으로 한번 학습을 끝내고 시작해야한다. 따라서 output을 저장할 공간이 필요하다.
  3. Classify Region
    1. VGGNet을 이용한다. 근데 변형해서 이용하는 게 아니라 거의 그대로 사용한다.
    2. 유지하는 것은 input 크기인 224*224를 맞추기위해 Bbox를 줄이는 것과, 마지막 층을 제외한 hidden layer등이다.
    3. 달라지는 것은 마지막 층 뉴런의 갯수이다. 원래 VGG의 경우는 1000개의 클래스를 분류하기 위해 1000개의 노드가 있었으나, R-CNN에서는 20(Object)+1(Background)로 21개의 노드만을 사용한다.(이 노드는 특징들이 됨)
    4. 위에서 나온 값들을 가지고 SVM을 학습시킨다.
  4. Bounding Box Regression
    1. 특이하게 우리는 two-stage model이기에 학습하고자 하는 것도 2개다.
    2. 위의 Classify Region의 목표는 ‘클래스를 잘 분류하는 것’이다. 이는 이 모델의 전체 목표와 같지만 이는 two-stage의 후자의 모델에 초점이 맞춰져 있다. 그렇다면 전자의 모델은 무엇을 목표로 하는가?
    3. 이는 ‘얼만큼 객체를 담고 있는 Bbox를 딱 맞게 만드는가’이다.
    4. 다만 일반적으로 CNN기반 모델은 classification 문제를 잘 푸는데 regression으로도 여기서는 결과가 잘 나왔다. → 그 에 대한 이유를 살펴보자
    5. 단순하게 생각하면 Bbox가 될 4개의 좌표를 잘 구하면 되는 것이다. 그래서 필자는 그냥 distance를 구하면 된다고 생각했지만 여기서는 특이한 값을 사용한다.

    학습 및 조정 과정
    1. 좌표 변환:
      • 후보 영역의 바운딩 박스 좌표를 (xp,yp,wp,hp)로 정의합니다.
      • $(x_p, y_p, w_p, h_p)$
      • 실제 객체의 바운딩 박스 좌표를 (xt,yt,wt,ht)로 정의합니다.
      • $(x_t, y_t, w_t, h_t)$
      • 회귀 모델의 입력은 후보 영역의 특징 벡터입니다.
    2. 좌표 차이 계산:
      • 목표는 후보 영역 좌표와 실제 객체 좌표 간의 차이를 최소화하는 것입니다.
      • 이를 위해 다음과 같은 좌표 변환을 사용합니다:
        • $t_x = \frac{x_t - x_p}{w_p}$
        • $t_y = \frac{y_t - y_p}{h_p}$
        • $t_w = \log \frac{w_t}{w_p}$
        • $t_h = \log \frac{h_t}{h_p}$
    3. 회귀 모델 학습:
      • 후보 영역의 특징 벡터와 위에서 계산된 좌표 차이 (tx,ty,tw,th)를 이용하여 회귀 모델을 학습합니다.
      • $(tx,ty,tw,th)(t_x, t_y, t_w, t_h)$
      • 이 회귀 모델은 CNN의 출력으로 얻어진 특징 벡터를 입력으로 받아 바운딩 박스 조정값을 예측합니다.
    4. 좌표 조정:
      • 학습된 회귀 모델을 이용하여 후보 영역의 바운딩 박스를 조정합니다.
      • 조정된 바운딩 박스 좌표 (xp′,yp′,wp′,hp′)는 다음과 같이 계산됩니다:
        • $xp′=xp+tx⋅wpx'_p = x_p + t_x \cdot w_pxp′=xp+tx⋅wp$
        • $yp′=yp+ty⋅hpy'_p = y_p + t_y \cdot h_pyp′=yp+ty⋅hp$
        • $wp′=wp⋅exp⁡(tw)w'_p = w_p \cdot \exp(t_w)wp′=wp⋅exp(tw)$
        • $hp′=hp⋅exp⁡(th)h'_p = h_p \cdot \exp(t_h)hp′=hp⋅exp(th)$
      • $(xp′,yp′,wp′,hp′)(x'_p, y'_p, w'_p, h'_p)$

    위의 내용을 확인해보면 알겠지만 w, h에 대한 비율과 그 배율의 exp값을 사용하는 것을 볼 수 있다. → 이게 결과값이 잘 나오는 이유라고 한다.
  5. Bounding Box Regression의 학습 과정은 다음과 같은 단계로 진행됩니다:
  6. Removal of Redundant Box
    1. 예상 Bbox는 굉장히 많이 생기는 데, 중복된 것을 줄여야 할 필요가 있다.
    2. Non-maximal Suppression을 사용해서 줄인다.
      1. NMS는 쉽게 말하면 $IoU=\frac{Area of Overlap}{Area of Union}$ 의 값이 0.6이상이면 하나로 묶는 것으로 한다
      2. 그럼 겹치는 것중에서 어떤 것을 살리나요? → 여기서는 mAP로 class를 잘 포함하는 박스를 남기는 것으로 한다.
        1. mAP는 이곳에 넣는 것보다 다른 포스트에 정리하는 것으로 한다.

결론

  1. R-CNN은 Detection에서 DNN 이전에 마지막으로 성능이 좋았던 모델이다.
  2. 배울 점이 많다. 2-stage model, Bbox regression 등

추가로 생각할 점

  1. 결국 class의 분류를 SVM으로 할 거라면 굳이 마지막 층의 노드를 21개로 줄일 필요가 없지 않나? 그냥 21개 노드를 통해서 각 클래스의 확률을 구하는 면 되는 것이 아닌가?
    1. Fast-RCNN에서 해결되는 문제이다.
  2. Bbox regression에서 학습 input이 하필 저걸 하면 잘 학습되는 이유를 정확하게 알지 못한다.
  3. 사진을 넣어 이해하기가 편하면 더 좋을 듯하다.
728x90