object detection task를 하기 위한 딥러닝 모델들의 발전 과정을 알아보자.
2 stage detector는 인간이 사물을 인지할 때와 비슷한 방식으로 동작하는 detector이다. 사람이 물체를 보고 1) 위치를 파악한 뒤 2) 물체의 종류를 판별 하는 것처럼 이 두 단계를 거쳐 object detection을 하는 것이다.
이러한 2 stage detector는 R-CNN → SPPNet → Fast R-CNN → Faster R-CNN 과 같이 발전해왔다.
R-CNN이 object detection을 하는 과정은 다음과 같다.
Q. negative sample을 사용하는 이유?
A. negative sample은 이미지에서 객체가 포함되어 있지 않은 부분을 의미하는데, 이를 사용해서 모델이 다양한 배경 상황에서 객체가 없는 경우를 잘 인식하고 구별할 수 있도록 학습시키기 위해서이다. negative sample을 이용하면 False Positive를 줄일 수 있다.
Q. negative sample이 positive sample의 3배수인 이유?
A. 실제 이미지 데이터셋에서는 객체가 포함되지 않은 (배경) 영역이 더 많기 때문에, 이러한 데이터의 불균형을 반영해서 negative sample을 더 많이 포함시킴으로써 모델이 다양한 배경을 제대로 학습해서 False Positive를 줄이고 모델의 일반화 성능을 향상시킨다. "3"배수인 이유는 이 정도 비율이 실험적으로 성능 향상에 유리한 균형을 맞추는 것으로 확인되었기 때문이라고 한다.
이 연구에서는 2000개의 RoI가 각각 CNN을 통과하기 때문에 연산이 오래 걸리고, 강제로 RoI를 동일한 크기로 조절함으로써 성능이 하락할 가능성이 있다. 또한 CNN, SVM classifier, bounding box regressor가 모두 따로 학습되기 때문에 비효율적이고, end-to-end가 갖춰지지 못했다는 것이 아쉬운 점이다.
SPPNet은 입력 이미지를 고정된 크기로 강제로 조정해야하고 2000번의 CNN을 통과해야 하는 R-CNN의 단점을 보완한 모델이다.
SPPNet에서는 Spatial Pyramid Pooling 방식을 도입해서 입력 이미지의 크기가 다양하더라도 CNN의 마지막에서 고정된 길이의 feature vector를 생성할 수 있도록 했다. 기존의 max pooling과 비슷하지만, 고정된 크기의 pooling window를 사용하는 대신 다양한 크기의 pooling window를 적용한다.
SPPNet은 다양한 크기의 이미지를 CNN에 직접 입력할 수 있으므로 강제로 리사이징을 해서 성능이 떨어질 우려가 없다. 게다가 CNN에서 나온 feature map을 한 번만 계산하면 되어서 계산 비용이 크게 줄어들었다.
하지만 여전히 CNN, SVM, bounding box regression을 모두 따로 학습해야 한다는 문제점이 남아 있다.
Fast R-CNN은 CNN, SVM, regressor를 따로 학습해야 하는 기존의 모델을 보완하기 위해 고안되었다.
Dataset은 IoU > 0.5인 positive sample을 25%, 0.1 < IoU < 0.5 인 negative sample을 75% 로 구성했다.
사용하는 loss function의 경우 classificaion task에서는 cross entropy, Bbox regressor에서는 Smooth L1이라는 손실 함수를 사용했다. 최종 손실은 두 손실을 합산하여 계산되었다.
따라서 Fast R-CNN은 CNN, SVM, regressor의 모든 구성 요소가 함께 학습 및 최적화되는 장점이 있다.
Faster R-CNN은 Region Proposal Network (RPN) 을 도입해서 Fast R-CNN보다 성능을 향상시키고 object detection의 모든 과정을 end-to-end로 다룬 모델이다. 아래 과정에서 2~5가 RPN의 동작이다.
★ Non-Maximum Suppression (NMS)
NMS는 다수의 겹치는 bounding box가 생성될 때 가장 적합한 bounding box를 선택하고 나머지를 제거하는 과정이다. 먼저, 모든 bounding box를 객체일 확률(score)에 따라 높은 순서대로 정렬해서 가장 높은 score를 가진 bounding box를 선택한다. 그리고 다른 bbox들과 선택된 bbox와의 IoU 값을 계산해서 일정 기준 이상인 다른 bbox들은 제거한다. 남은 bbox 중에서 가장 높은 score를 가진 박스를 다시 선택하고, 이 과정을 모든 box에 대해 NMS가 적용될 때까지 반복한다. Faster R-CNN에서는 각 sliding window 마다 9개의 anchor box를 생성하므로, RPN 이후와 최종 detection 단계에서 이 NMS 과정이 적용된다. 이 논문에서는 IoU가 0.7 이상인 proposal 영역들을 중복된 영역으로 판단해서 제거하였다.
Faster R-CNN은 RPN을 도입함으로써 CNN 내부에서 region proposal을 생성하고 classification 을 동시에 처리할 수 있게 되었다. 그래서 이전의 모델들보다 훨씬 빨라졌고, 전체 모델이 더 잘 최적화되고 성능이 향상되었다.
2 stage detctor 모델은 크게 backbone, neck, head로 구성된다.
더 발전된 2 stage detector에 대한 것은 이 포스팅을 참고