반응형

Object Detection의 시작은 R-CNN이 등장하기 이전과 이후로 나뉜다. 2014년에 공개되었으며 R-CNN은 2012년에 등장한 CNN의 개념과 Region proposals(객체가 있을것 같은 지역. 이하 RP) 알고리즘을 적용한것이다. Region의 R과 CNN을 붙여서 R-CNN이 되었다.

 

Pascal VOC 2012에서 53.3%의 mAP를 달성하며 이전의 알고리즘들 보다 30%를 넘는 성능을 보여주어 큰 관심을 받게 되었고, 이를 시작으로 Object Detection 시대의 막을 올리게 된다.

 

Concept

R-CNN의 방법은 다음과 같은 방법으로 진행된다.

  • 객체가 있을법한 지역을 생성(RP).
  • 각 RP에 대하여 CNN을 수행.
  • Linear SVM(Support Vector Meachine)을 이용한 Classification
  • Bounding Box Regression
  • L1 Smooth Loss

 

1. Region Proposal(RP)

RP를 찾는 방법은 여러가지 방법이 있다. R-CNN에서는 Selective Search(이하 SS)라는 방법을 사용한다. SS는 객체 인식이나 검출을 위한 Bounding Box를 찾아내는것이 목표이다.

 

픽셀의 색, 질감, 명암 등의 정보를 활용하여 픽셀을 군집화 하고 분할하는 과정을 반복하여 영역을 생성한다.

 

Selective Search를 활용한 Region Proposal

이렇게 찾아낸 Bounding Box는 수천개에 육박한다. 그중에서 2000개를 추출하여 최종 RP의 후보군으로 점지해둔다.

 

2. CNN

SS를 통해 만들어진 2000개의 RP에 대하여 Crop을 진행한 후, 모두 동일한 크기로 변경해준다(논문에서는 227x227 size). 각각의 Crop된 이미지는 모두 Height, Width가 다를것이다. 이를 강제로 Resize하기 때문에 왜곡된 형태(warping)가 되지만, 어찌됐든 이것을 CNN에 입력한다. 이미지 1장당 2000개의 RP가 존재하기 때문에, 실제로 CNN에 입력되는 이미지는 2000개의 이미지가 입력되는것과 동일하다.

 

즉, 100장의 이미지에 대하여 R-CNN을 돌리는것은, 200,000만장의 이미지를 CNN에 입력으로 밀어넣는것과 다름없다.어째됐든, CNN 모델은 AlexNet을 사용하였고, 마지막 FC Layer의 최종 출력의 갯수는 4096의 고정적인 길이를 가지는 Vector로 변경하였다.

 

3. SVM

CNN으로 부터 추출된 Feature Map은 Linear SVM 활성함수를 통해 Classification을 진행한다. Softmax를 사용해보기도 했는데 이는 SVM만큼 성능이 나오지 않았다고 한다. 또한 CNN 신경망 내부에서 추정을 진행하는것이 아니라 SVM에서 추정이 이루어진다. 때문에 Classification을 위한 별도의 Loss Function이 존재하지 않고 역전파도 불가능하다.

 

4. Bounding Box Regression

RP에 대한 Bounding Box는 SS를 통해 그 좌표값의 초기정보를 설정해주었을 뿐이다. 즉, 객체의 정확한 좌표정보라 할 수 없다. 따라서 Bounding Box의 좌표정보에 대해서도 추정하는 과정이 필요하다. 이것은 각각의 좌표정보들을 Linear Regression을 통해 추정값을 획득한다.

 

RCNN의 전체구조

5. L1 Smooth Loss

Bounding BoxRegression에 사용되는 Loss Function은 L1 Smooth Loss를 사용한다. 통계학에서는 흔히 Ridge Regression라고 불리우는 방법이다.

 

$$
W_{\star} = argmin\sum_{i\in{x,y,w,h}}(t_{i}-\hat{w}{\star}^{T}\phi{5}(P^{i})^{2} + \lambda\Vert \hat{w}_{\star}\Vert
$$

 

자세한 정보는 아래 Appendix를 참고.

 


Result

 

R-CNN은 당시 유명한 대회였던 ImageNet대회인 ILSVRC2013에서 mAP 31.4%로 가장 높은 성능을 보였고, Pascal VOC 2010에서 mAP 53.7%의 높은 수준을 보여주었다.

 

class별 mAP를 보아도 다른 알고리즘에 비해서 전체적인 성능향상이 되었음을 알 수 있다.

 

당시에는 대단한 충격적인 결과였다

 


 

R-CNN의 결과를 보면 당시의 어떠한 알고리즘보다도 월등한 성능을 보여주었음을 알 수 있다. 이것에 영향때문인지, 이후에는 CNN을 통한 연구가 매우 활발하게 진행이 되었다. R-CNN의 문제점으로 꼽혔던 몇가지 이슈들인, 역전파의 불가능많은 RP의 존재는 후속 연구에서 거의 해소되었고, Object Detection의 시대가 도래하게 된다.

 


Appendix

 

Bounding Box Regression

R-CNN을 비롯한 Object Detection 전반적으로 중요하게 다루는것이 Bounding Box Regression이다. 통계학적인 내용이 많아 이해하기 어려울 수 있지만, 이 관문을 통과하지 못하면 반푼짜리 연구자가 될지도 모른다.

 

1. Bounding Box from Selective Search

SS를 통해 수많은 Bounding Box를 생성해낼 수 있다. 만들어진 Bounding Box에서 꼭지점에 해당하는 좌표값을 알 수 있고, 이로부터 중심좌표(x, y)와 가로(w), 세로(h)를 구할 수 있다. 이것을 수식으로 적어보면 아래와 같다.

 

$$
G^{i}=(G^{i}_{x}, G^{i}_{y}, G^{i}_{w}, G^{i}_{h})
$$

 

G라고 쓴것을 Ground Truth(이하 GT)를 뜻한다. GT란 사용자가 미리 정답이라고 설정해둔 좌표값 정도로 해석하면 좋을것 같다. labelImg, labelme와 같은 도구를 통해서 획득한 좌표값이 GT를 나타낸다.

 

2. Bounding Box from Regression

SS를 통해 획득한 Bouding Box가 P에 대한 식은 아래와 같다.

 

$$
P^{i}=(P^{i}_{x}, P^{i}_{y}, P^{i}_{w}, P^{i}_{h})
$$

 

3. L1 Smooth Loss(Rigde Regression)

우리의 목적은 Regression을 통해 얻은 Bounding Box $P^{i}$가 최대한 GT의 Bounding Box $G^{i}$ 되도록 하는 것 이다. 예측을 해야하는것은 Bounding Box의 좌표값이므로 x, y, w, h에 대한 함수로 다시 변형을 해준다. 예측해야할 Bounding Box를 $\hat{G}_{x}$라 하면

 

$$
\hat{G}_{x} = P_{w}d_{x}(P) + P_{x}\\
\hat{G}_{y} = P_{h}d_{y}(P) + P_{y}\\
\hat{G}_{w} = P_{w}exp(d_{w}(P))\\
\hat{G}_{h} = P_{h}exp(d_{h}(P))\\
$$

 

위 수식의 기하학적인 모습은 아래와 같다.

 

exp이 왜 튀어나온건지는 논문에도 나와있지 않다.

이제 Bounding Box의 함수로 x, y, w, h를 표현해보면 $d_{\star}(P)$($\star$는 x,y,w,h중 하나)의 식으로 표현하고 손실함수의 최소값을 구하기만 하면 된다.

 

$$
d_{x}(P) = t_{x} = (G_{x}-P_{x})/P_{w}\\
d_{y}(P) = t_{y} = (G_{y}-P_{y})/P_{h}\\
d_{w}(P) = t_{w} = log(G_{x}/P_{w})\\
d_{h}(P) = t_{h} = log(G_{h}/P_{h})\\
$$

 

R-CNN에서는 Ridge Regression에서 차용하는 손실함수를 사용하였다. 일반적으로 사용하는 Least Square에서 패널티 $\lambda$가 추가된 형태이다. 통계학적으로 $\lambda$는 변수간에 다중공선성을 방지할 수 있는 특징이 있다. 어떤 값을 사용할지에 대해서는 딱히 기준이 없으며, 논문에서는 $\lambda=1000$을 사용하였다.

 

$$
W_{\star} = argmin\sum_{i\in{x,y,w,h}}(t_{i}-\hat{w}{\star}^{T}\phi{5}(P^{i})^{2} + \lambda\Vert \hat{w}_{\star}\Vert
$$

 

추정해야할 $d_{\star}(P)$를 $w_{\star}^{T}\phi_{5}(P)$로 표현을 하였는데, $\phi_{5}(P)$는 5개의 Pooling Layer를 거쳐 만들어졌다는 의미로 표현의 중복을 피하기 위해서 사용한것이며, 선형회귀분석에서 회귀계수 $\beta$를 추정하는것과 같다.

 

이제 위 수식을 미분하여 Global Minimum을 찾고, 이 과정을 반복하면 적합한 Bounding Box $\hat{G}$를 얻을 수 있게 된다.

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기