본문 바로가기

논문 리뷰

R CNN(Rich feature hierarchies for accurate object detection and semantic segmentation)

Object detection의 history에 감을 잡기 위해 손을 댄 논문이다. 이후에 r cnn을 개선해서 좋은 결과를 얻은 논문들이 많으므로 한 번은 읽어야 한다고 생각했다.

 

Object detection은 지난 몇 년간 정체되어 있던 분야인데, r cnn이 VOC 2012에서 기존 방법들을 30% 이상 나은 성능으로 압도했다.

 

Contribution

   -Object detection에도 딥러닝을 적용하면 잘 된다는 것을 보여줬다.

   -Data가 부족한 경우에 모델을 pre-training 한 후 사용할 domain에 맞게 fine tuning하는 방식을 선보였다.

 

 

Input 이미지를 여러 개의 bounding box로 쪼갠다. 2000개의 region proposals를 CNN에 넣고 feature를 추출한 뒤, svm을 이용해 classification 한다.

 

CNN에는 AlexNet을 사용했다. 이후에 VGG로 해보니까 더 좋은 결과가 나왔다.

 

Localizing

   Object detection은 classification과 달리 그 object의 위치를 특정해야 하는 문제가 발생한다. Regression으로 해결하려는 시도는 다른 연구에서 결과가 좋지 않아서 제외했고, sliding window 방법을 처음에 생각 했었다. 그러나 AlexNet의 깊이 때문에 receptive field도 넓어지고 stride도 커져서 잘 작동하지 않았다. 대신해서 선택한 게 recognition using region이다. Selective search라는 알고리즘으로 2000개의 region proposals를 원본 이미지로부터 추출하고, 이것을 모두 CNN에 넣는다. CNN으로 들어갈 input size를 통일하기 위해 region proposals를 warp해서 227x227 사이즈로 만들었다. 

 

AlexNet의 구조

 

Pre-trained and fine-tuning CNN

   Object detection에 관한 data는 classification에 비하면 턱 없이 부족한데, 따라서 ImageNet dataset으로 AlexNet을 pre-training 한 후 detection data로 fine tuning 한다. 어차피 우리가 원하는건 CNN의 feature extracting 능력이므로 classification data로 학습해도 잘 작동할 것이다. ImageNet을 이용한 pre-training이 끝나면 마지막에 붙은 softmax를 떼어내고 N+1 way의 fcn을 붙인다. N은 구별해야 할 class의 수이고 1은 background에 해당하는 class 때문에 더하는 것이다. Data를 어떻게 줬나 보면, 균등하게 안주고 bias를 가해서 positive window 32개, negative window 96개, 총 128개를 1 batch로 했다. Ground truth와 IoU가 0.5 이상 나오면 positive로 labeling 했다. Negative는 그 object가 아니라는 뜻이다. 실제 상황에서 positive가 훨씬 rare하기 때문에 negative를 더 많게 구성했다고 한다.  Fine tuning 단계에서는 learning rate를 pre-training에서보다 10배 작게 사용한다.

 

SVM

   CNN이 추출한 feature를 이용해 각 class에 대한 score를 뱉는다. 2000개의 region proposals에서 중복되는 부분을 제거하기 위해 greedy non-maximum suppression을 사용하는데, 각 class마다 score가 가장 높은 input을 남겨놓고, 그 input과 IoU가 일정 threshold 이상인 input들은 중복이라고 여기고 제거한다. IoU는 intersection over union이라는 뜻인데, 두 bounding box가 얼마나 겹치는가에 관한 지표라고 보면 된다.

 

CNN의 pre-training과 fine tuning이 모두 끝나면 SVM을 training 한다. 여기서는 이전과 positive와 negative를 나누는 기준이 다른데, ground truth만 positive를 주고, ground truth와 IoU가 0.3 이하로 나오는 window에 negative를 주고, 그 중간의 회색 지대에 있는 window들은 버렸다. 즉, 질을 위해 양을 포기한 것이다. 이렇게 하면 positive example이 30배 줄어든다. 그래서 CNN을 fine tuning 할 때 이렇게 하면 오히려 결과가 안좋다고 한다. 여기서 0.3이라는 수는 hyperparameter인데, grid search 해서 가능한 모든 parameter 조합을 시도해 본 후 고른 값이라고 한다.

 

정리하자면, AlexNet을 pre-training 하고, 마지막 softmax layer를 떼고 N+1 way의 새로운 softmax을 붙인 다음, fine-tuning을 한다. 그리고 다시 그 N+1 way의 softmax layer을 떼고 SVM을 붙인 후, 이번엔 data의 labeling 기준을 다르게 해서 SVM을 training 한다. 여기서 드는 당연한 의문은 왜 N+1 softmax를 다 훈련시켜 놓고 굳이 떼고 SVM을 붙여서 또 훈련을 시키느냐 이다. 저자도 처음에는 그냥 softmax를 사용했는데, 성능이 잘 안나왔다고 한다. SVM을 붙여서 잘 되는 이유는, softmax를 썼을 때는 labeling 방식을 CNN fine-tuning 할 때랑 똑같이 했지만, SVM을 썼을 때는 IoU 0.3 이하의 hard negative와 ground truth인 positive 만을 사용해서 그런 것 같다고 한다. 근데 그러면 labeling을 똑같이 하면 softmax를 써도 되지 않을까? 저자도 그럴 가능성에 대해 언급하며 그럴 경우 training 절차가 간편해질 것이라고 한다.

 

Efficiency

   CNN의 feature vector의 demension이 다른 방법에 비해 낮다. UVA와 비교하면 100배정도 낮다. 그리고 CNN은 기존 방법들과 달리 class 개수와 상관 없이 parameter 수가 일정하다. 마지막 SVM의 shape만 조절해주면 100k까지 class 수를 늘려도 메모리를 1.5GB밖에 먹지 않는다. UVA는 134GB를 먹는다고 한다.

 

CNN 마지막 layer에서 각 filter 별로 activation이 높은, 즉 그 filter가 인식하는 input들을 나열한 것이다. 이 두 filter는 해당 이미지의 (사람, 글자라는)concept를 뽑아내고 있다.

 

여기 두 filter는 물질적인 속성을 인식하는 것으로 보인다. 첫 번째 filter는 검은 점들을 인식하고 있고, 두 번째 filter는 빛의 반사를 인식하고 있다. CNN은 이런 shape, texture, color, material properties 같은 rich feature들을 뽑아내고, 뒤따르는 fcn들이 이 feature들을 조합한다고 한다.

 

FCN

   Ablation study란 어떤 요소의 중요성이나 역할을 알기 위해 그 요소를 제거하는 실험을 말하는데, pre-training 이후에 fcn을 제거하고 돌려보아도 성능 저하가 크지 않았다고 한다. 모델의 힘은 거의 CNN에서 기인하는 듯 한데, CNN의 parameter 수가 전체의 6%밖에 안되는 걸 생각하면 의외의 결과이다. 앞으로 fcn 없이 CNN만을 이용하는 시도도 해봄직 하다고 저자는 주장한다.

 

그런데 여기서 fine-tuning을 거치면 CNN의 성능은 크게 변화가 없는데 fcn은 급격히 좋아진다. CNN이 뽑아내는 feature는 어차피 general한 것들이고 domain specific하게 fcn이 학습한 게 성능에 크게 기여 했다.

 

다른 방법들과 비교했을 때 압도적인 성능 차이를 보여준다.

 

 

T-Net은 AlexNet, O-Net은 VGG이다. Pre-trained CNN을 어떤 걸 사용하는가에 따라 성능이 크게 달라진다. 뒤에 BB가 붙은 모델이 성능이 훨씬 좋은 것을 알 수 있는데, 여기서 BB는 bounding box regression을 뜻한다. Region proposals 방식이 다소 무식하고 fix 되어 있기 때문에 발생하는 문제를 보완하는 방법이다.

 

이 그래프를 보면, false positive 중에 Loc(correct class랑 IoU가 0.1~0.5인 것을 positive로 감지)의 비중이 제일 크다. 즉, 다른 class랑 헷갈린 것도 아니고, background와 혼동한 것도 아니면 결국 CNN은 죄가 없고 poor localization 때문이라는 것이다. BB를 사용했더니 Loc 의 비중이 확 떨어지는 것을 볼 수 있다.

 

Object detection의 맥락을 파악하기 위해 읽은 논문이기 때문에 너무 deep 하게 들어가지는 않았다. 어느정도 최근 논문을 읽게 되면 구현도 해볼 생각이다. 따라서 BB도 일단은 이 정도로만 알고 넘어가도록 하겠다.

 

Results