728x90
서론
- Detection분야에서 DNN이 나오기 이전에 마지막까지 사용되었던 모델이다.
- R-CNN은 Region Based Convolutional Neural Networks : 2013이 전체 이름이다.
- 이 부분은 DNN 이전의 기술 및 생각들을 정리하기 참 좋은 모델이라고 생각한다.
- 왜냐하면 이해하기 힘든 최신 논문에 비하면 이 논문은 굉장히 인간적이고 필자가 이해할 수 있는 고민들을 공감할 수 있게 되면서 여러 개념이 정리된 좋은 개념이였다.
본론
- 이 모델은 크게 2가지로 구성되어 있다. 1) 사진에서 어디에 객체가 있는 지확인하는 Extract Region proposal, 2) 객체가 있을 법한 곳에서 이게 무슨 객체인지 분류하는 Classify Region
- DNN을 먼저 공부하고 이걸 보면 대부분 End to End(입력부터 목적까지 한번에 가는 것)만을 보다보니 이 부분이 생소할 것이다.
- 특이하게 이 모델은 2-stage라고 하며, 학습 방법이 다르다. → 이것이 성능에 굉장히 발목을 잡기에 이후에 나오는 모델의 개선 목표가 된다.
- Extract Region proposal
- 여기는 Detection 분야에서 사용되는 Selective Search를 이용해서 Bounding box(이후, Bbox라고 한다.)를 구하는데, 이를 설명하기에는 이야기가 새기에 간략하게 설명하겠다.
- Selective Search는 쉽게말해서 사진 전체에서 각기 cluster를 만든다. → iteration하면서 이 클러스터를 뭉쳐 큰 부분으로 만든다. → 학습이 끝나고 만들어진 cluster를 담을 수 있는 bounding box를 output으로 낸다.
- 이 부분을 바로 다음 단계로 전달하면 좋겠지만 앞서 말했듯 이 모델은 two-stage 모델으로 한번 학습을 끝내고 시작해야한다. 따라서 output을 저장할 공간이 필요하다.
- Classify Region
- VGGNet을 이용한다. 근데 변형해서 이용하는 게 아니라 거의 그대로 사용한다.
- 유지하는 것은 input 크기인 224*224를 맞추기위해 Bbox를 줄이는 것과, 마지막 층을 제외한 hidden layer등이다.
- 달라지는 것은 마지막 층 뉴런의 갯수이다. 원래 VGG의 경우는 1000개의 클래스를 분류하기 위해 1000개의 노드가 있었으나, R-CNN에서는 20(Object)+1(Background)로 21개의 노드만을 사용한다.(이 노드는 특징들이 됨)
- 위에서 나온 값들을 가지고 SVM을 학습시킨다.
- Bounding Box Regression
- 특이하게 우리는 two-stage model이기에 학습하고자 하는 것도 2개다.
- 위의 Classify Region의 목표는 ‘클래스를 잘 분류하는 것’이다. 이는 이 모델의 전체 목표와 같지만 이는 two-stage의 후자의 모델에 초점이 맞춰져 있다. 그렇다면 전자의 모델은 무엇을 목표로 하는가?
- 이는 ‘얼만큼 객체를 담고 있는 Bbox를 딱 맞게 만드는가’이다.
- 다만 일반적으로 CNN기반 모델은 classification 문제를 잘 푸는데 regression으로도 여기서는 결과가 잘 나왔다. → 그 에 대한 이유를 살펴보자
- 단순하게 생각하면 Bbox가 될 4개의 좌표를 잘 구하면 되는 것이다. 그래서 필자는 그냥 distance를 구하면 된다고 생각했지만 여기서는 특이한 값을 사용한다.
학습 및 조정 과정- 좌표 변환:
- 후보 영역의 바운딩 박스 좌표를 (xp,yp,wp,hp)로 정의합니다.
- $(x_p, y_p, w_p, h_p)$
- 실제 객체의 바운딩 박스 좌표를 (xt,yt,wt,ht)로 정의합니다.
- $(x_t, y_t, w_t, h_t)$
- 회귀 모델의 입력은 후보 영역의 특징 벡터입니다.
- 좌표 차이 계산:
- 목표는 후보 영역 좌표와 실제 객체 좌표 간의 차이를 최소화하는 것입니다.
- 이를 위해 다음과 같은 좌표 변환을 사용합니다:
- $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}$
- 회귀 모델 학습:
- 후보 영역의 특징 벡터와 위에서 계산된 좌표 차이 (tx,ty,tw,th)를 이용하여 회귀 모델을 학습합니다.
- $(tx,ty,tw,th)(t_x, t_y, t_w, t_h)$
- 이 회귀 모델은 CNN의 출력으로 얻어진 특징 벡터를 입력으로 받아 바운딩 박스 조정값을 예측합니다.
- 좌표 조정:
- 학습된 회귀 모델을 이용하여 후보 영역의 바운딩 박스를 조정합니다.
- 조정된 바운딩 박스 좌표 (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값을 사용하는 것을 볼 수 있다. → 이게 결과값이 잘 나오는 이유라고 한다. - Bounding Box Regression의 학습 과정은 다음과 같은 단계로 진행됩니다:
- Removal of Redundant Box
- 예상 Bbox는 굉장히 많이 생기는 데, 중복된 것을 줄여야 할 필요가 있다.
- Non-maximal Suppression을 사용해서 줄인다.
- NMS는 쉽게 말하면 $IoU=\frac{Area of Overlap}{Area of Union}$ 의 값이 0.6이상이면 하나로 묶는 것으로 한다
- 그럼 겹치는 것중에서 어떤 것을 살리나요? → 여기서는 mAP로 class를 잘 포함하는 박스를 남기는 것으로 한다.
- mAP는 이곳에 넣는 것보다 다른 포스트에 정리하는 것으로 한다.
결론
- R-CNN은 Detection에서 DNN 이전에 마지막으로 성능이 좋았던 모델이다.
- 배울 점이 많다. 2-stage model, Bbox regression 등
추가로 생각할 점
결국 class의 분류를 SVM으로 할 거라면 굳이 마지막 층의 노드를 21개로 줄일 필요가 없지 않나? 그냥 21개 노드를 통해서 각 클래스의 확률을 구하는 면 되는 것이 아닌가?- Fast-RCNN에서 해결되는 문제이다.
- Bbox regression에서 학습 input이 하필 저걸 하면 잘 학습되는 이유를 정확하게 알지 못한다.
- 사진을 넣어 이해하기가 편하면 더 좋을 듯하다.
728x90
'Learn' 카테고리의 다른 글
[컴퓨터비전] Fast-RCNN (1) | 2024.06.13 |
---|---|
[데이터처리와 분석] K-Mean 실습 및 확인 (0) | 2024.06.13 |
[머신러닝] Optimizer(SGD+M, AdaGrad, RMSProp, Adam, AdamW) (1) | 2024.06.12 |
[데이터처리와분석] 데이터 준비하기 (0) | 2024.06.12 |
[머신러닝] Normalization 종류 (0) | 2024.06.12 |