딥러닝/Paper Review

[Paper Review] Rich feature hierarchies for accurate object detection and semantic segmentation

CoGam 2025. 1. 20. 04:00
728x90

이번에 리뷰하는 논문은 CVPR 2014에서 발표한, Object Detection의 초기 모델이라고 할 수 있는 R-CNN을 제안한 논문이다. Object Detection은 이미지에서 object의 위치를 찾고, 이것을 분류하는 작업을 의미한다. 이와 관련된 논문들은 크게 2 stage와 1 stage 방법으로 나뉘게 된다. 2 stage가 의미하는 것은 detection의 단계를 localizationclassification 두 단계로 나누는 것을 의미한다. 반면 1 stage는 이 과정을 한 번에 진행하게 된다. 오늘 리뷰하는 R-CNN은 2 stage의 대표적인 모델이다.

 

 

 

문제 정의

사실 해당 논문은 큰 문제점을 고친다기보다는 object detection 분야의 성능 향상을 목표로 한 논문이다. 당시 성능이 좋은 모델이 기존 모델들의 사소한 변형 혹은 앙상블로 정확도를 향상시켰다는 한계점이 존재했다. 더불어 벤치마크 점수에서 큰 향상이 없던 시기였다. R-CNN은 독창적인 방법과 눈에 띄는 mAP의 향상으로 object detection task 연구에 큰 영향을 끼치게 되었다. 특히 VOC2012에서 30%가 넘는 성능 향상을 이뤄냈다.

 

비슷한 시기에 성능이 좋았던 OverFeat의 경우 object의 영역을 찾기 위해 sliding window를 사용하였다. sliding window를 사용하면 전체 이미지를 window로 지나가며 연산을 진행하기 때문에 불필요한 연산이 늘었다는 단점이 존재하였다. 논문에서는 이후 업데이트를 통해 OverFeat과의 비교 결과도 정리하였다. (OverFeat이 대회에는 먼저 등장하였지만, 논문은 R-CNN이 먼저 나옴, 또한 더욱 뛰어난 성능 보여줌)

 

 

 

해결 방법 및 원리

- R-CNN (Region proposals with CNNs)

논문의 저자들은 detection 성능의 향상을 위해 당시까지 사용되지 않던 2 stage model을 고안한다. 모델의 전체적인 구조는 위의 사진과 같다. 조금 더 구체적인 단계를 살펴보자.

  1. Selective search 알고리즘으로 2000개의 region을 제안한다. 이것을 227x227 크기로 warp한다. (CNN input size)
  2. Warp 된 제안된 region 이미지를 CNN에(여기서는 AlexNet 주로 사용) 넣어서 2000x4096의 feature vector를 추출한다.
  3. Feature vector를 각각 linear SVM, bounding box regressor에 넣어서 class에 대한 confidence score와 bounding box 위치를 얻는다. 여기서 SVM은 class의 수 + 1 개를 사용하는데, 그 이유는 배경 class를 추가하기 위해서이다.
  4. 여러 bounding box 중 최적의 box를 얻기 위해 non-maximum suppression 알고리즘을 적용한다.

 

 

이들이 말하는 R-CNN의 특징은 1) region proposal 이후에 high capacity를 가지는 CNN에 연결하여 feature를 추출한다는 점, 그리고 2) labeled data가 부족할 때는 classification과 같은 auxiliary task로 pretrain하고 이후 detection 작업에서 fine-tuning하면 성능면에서 큰 향상을 이룰 수 있다는 점이다. 이것은 결과에서 살펴볼 수 있다.

 

 

1. Region proposal (Selective search)

Object detection의 연구 초반에는 regression problem으로 이것을 해결하려는 노력이 있었다. 하지만 실험 결과 mAP가 30.5%정도로 좋지 않은 결과를 얻었다. 이후 sliding window와 같이 이미지 전체를 탐색하며 영역을 제안하는 방법이 사용되었다. 하지만 하나의 window가 이미지 전체를 탐색해야하는 이유로 계산량이 크다는 단점이 있었다. 따라서 R-CNN은 Selective search 알고리즘으로 2000개의 region proposal을 수행한다 (현재 연구에서는 deep learning으로 대체). 논문에서 구체적으로 언급되어 있지는 않아서 어떤 방법인지 찾아보았다.

 

  1. 이미지가 주어지면 segmentation을 통해 엄청나게 많은 영역으로 segmentation을 진행한다. 
  2. 영역 merging 수행하여 비슷한 색상, 텍스처, 크기, 모양 등을 가지는 영역을 합친다.
  3. 2번 과정을 반복적으로 수행하며 다양한 크기와 모양의 region을 제안한다. 이 과정에서 객체 존재 가능성이 있는 모든 영역을 포함하게 만들어진다.

Selective search 알고리즘은 객체가 있을법한 영역을 제안하기 때문에 계산이 효율적이라는 장점을 가진다. 또한 알고리즘 내부적으로 유사성을 가지는 영역끼리 병합을 진행하였기 때문에 다양한 객체에 대해서 일반화가 가능한 장점을 가진다.

 

하지만 이것 또한 실시간 detection에 적용하기에는 계산량이 많았고, 생성된 영역이 정확히 객체를 포함하지 않을 수 있다는 한계점이 존재한다. 따라서 최근 모델들에서는 이 부분을 Region Proposal Network(RPN)이라는 딥러닝 방법으로 대체하기도 한다.

 

Selective Search 논문 : http://www.huppelen.nl/publications/selectiveSearchDraft.pdf

 

 

2. CNN feature extractor

다음 단계는 이렇게 제안된 2000개의 region을 227x227 사이즈로 warping한 뒤, CNN(AlexNet이 기반이 됨) 네트워크에 대입하여 feature vector로 변환한다. CNN 네트워크는 auxiliary task에 대해서 pretrain 시킨 뒤 detection task에 fine tuning을 하게된다.

 

한 가지 주의해야할 점이 있는데 positive, negative sample을 다루는 방법이 CNN fine tuning과 이후 추가한 SVM에서 다르다는 것이다. CNN fine tuning에서는 selective search로 구한 영역이 ground truth boudning box와 IoU가 0.5 이상인 경우는 positive, 나머지 경우는 negative로 두었다고 한다. Mini-batch 1개에는 32개의 positive windows와 96개의 negative windows로 총 128개로 구성했다고 한다. SVM의 경우는 3번에서 살펴보자.

 

 

나는 feature extraction 부분을 읽을 때 fine tuning시 feature vector 4096 size를 최종 출력하는 것이라고 이해했었다. 그런데 논문의 fine-tuning 부분에서 class의 수+1(배경 class 추가)를 classification하는 layer를 마지막에 추가해야한다고 하여, 그러면 CNN의 최종 output이 뭐가 되야하는건가 하는 헷갈림이 있었다. 아래 그림이 이해의 도움을 주었다. (당시 CNN feature extractor만 생각하고 있어서 classification을 위해 fc layer까지는 생각하지 않고 있었다)

 

첫 번째 그림은 CNN 모델을 pretrain 시키는 과정이다. 두 번째 사진에서 파란색 부분이 fine-tuning시 변경해주는 layer이다. 뒤에 있는 softmax 혹은 SVM은 아직 설명하지 않았으니 무시한다. 여기에서 final conv feature map이라고 쓰여져 있는 부분이 CNN으로 출력한 feature vector 2000x4096(R-CNN에서는)이다. 이제 class 분류를 위해서는 classifier가 필요하고 이것을 fc layer와 softmax(여기서는 SVM)으로 구현하는 것이 일반적인 방법이다. 따라서 논문에서는 CNN 이후 fc layer로 class를 분류하는 것까지를 언급한 것이다.

 

추가적으로 당시 많은 detection 논문에서 pretraining을 위해 unserpervised method를 사용했던 반면에, R-CNN의 저자들은 image-level prediction을 하는 ILSVRC2012 classification data를 가지고 pretrain을 진행한다.

 

R-CNN이 당시 다른 network보다 효율적인 이유가 있다. 먼저 CNN parameter들을 모든 category에 대해서 공유한다는 점이다. 또한 feature vectors가 다른 모델들에 비해서 low-dimensional하다는 점이다.

 

 

3. Support Vector Machine (SVM)

이제 우리는 propose된 region을 얻었고, 해당 영역에 무엇이 담겨있는지 classification을 마무리하기만 하면 된다. 이것은 위해 논문에서는 linear SVM을 적용한다. SVM은 각각의 class에 대해 1개씩 만든다. 즉 n개의 class를 학습한다면, 배경을 포함하여 n+1개의 SVM을 학습시켜야하는 것이다.

 

2번에서 언급했듯이 SVM의 학습 과정에서 positive, negative sample을 나누는 방법은 CNN의 fine tuning 때와는 다르다. SVM 학습을 위해 다시 dataset에 selective search를 적용하여 영역(bounding box)를 받는다. 이때 정확하게 ground truth만을 positive sample로 처리하고 IoU가 0.3 미만인 bounding box만을 negative sample로 처리한다. 0.3 이상인 sample들은 무시한다.

 

이렇게 sample을 정의하고  SVM은 학습을 진행하는데, 데이터가 너무 커서 효율적으로 학습하기 한 번 학습 한 이후에는 hard negative mining을 적용한다.

 

Hard negative mining이란 negative sample들 중 학습에 중요한 동시에 어려운(쉽게 틀리는) sample을 선택적으로 골라 학습하는 기법이다. 데이터 전체를 사용하지 않기 때문에 일반화를 위한 효율적인 학습을 위해 사용하게 된다. 여기에서 negative 중 쉽게 틀린다는 말이 무엇일까?

 

위의 표는 머신러닝 분류 평가 지표인 confusion matrix이다. FP를 생각해보자. False positive, 즉 정답은 negative지만 모델이 positive라고 예측해준 데이터들을 의미한다. 바로 이것이 모델이 어려워하는 negative sample들이 될 것이다. 이러한 문제는 주로 object detection과 같이 배경(negative)의 비중이 object(positive)의 비율보다 높은 경우 발생한다. SVM에서는 ground truth box만을 positive로 받아들이기 때문에 overlap된 이미지를 특정 object라고 분류하는 FP가 생길 수 있다는 것이다. 직관적으로 생각해도 negative의 숫자가 월등히 많으니 모델의 예측이 FP가 될 확률이 증가하는 것이다. 이때 hard negative mining이 효과적인 해결 방법이 될 수 있는 것이다.

 

추가적으로 SVM 학습 부분에서 다른 분들의 해석을 보며 새롭게 배운 것이 있어서 정리했다.

1. CNN fine tuning과 SVM 학습에서 positive, negative sample의 IoU 기준이 다른 이유

 논문의 저자는 CNN이 overfitting되는 것을 막고자 하였다고 한다. 따라서 많은 데이터가 필요했다. IoU 기준을 0.5로 했을 때는 ground truth bounding box만 positive로 정의할 때보다 30배 많은 학습 데이터를 얻을 수 있었고 CNN의 overfitting을 방지할 수 있었다고 한다.

 

2. 마지막 분류 과정에 Softmax를 사용하지 않고 SVM을 학습시킨 이유

 결과론적으로 softmax를 사용한 경우는 50.9%, SVM을 사용한 경우는 54.2%의 mAP를 가진다고 한다. 아마 그 이유로는 만약 softmax를 바로 적용했다면 R-CNN 모델은 비교적 정확하지 않은 bounding box를 positive로 처리한 상태로 class 분류를 진행할 것이다. 그렇다면 제안된 영역에 따라서 분류 학습을 더욱 복잡하게 만드는 경우가 생길 수 있다. 따라서 SVM에서 ground truth bounding box만을 positive로 학습시키며 정확도를 상승시켰다고 생각할 수 있다.

 

 

4. Bounding Box Regressor

이 부분은 논문의 Appendix C에서 설명하고 있다. 모델의 성능을 향상시키는 부분이라 중요하다고 생각했는데 좀 의외였다. 이 regressor는 region proposal에서 부정확하게 제안하는 영역들과 ground truth box의 차이를 학습하여 더 정확한 box를 얻을 수 있게 해주는 역할을 한다.

 

나는 사실 해당 regressor를 보면서 한 가지 의문점들었다. 이미 SVM에서 사용하는 sample을 나눌 때 ground truth box만 positive에 남도록 걸러준거 아닌가? 하는 의문이었다. 생각해보니 중요한 점을 놓치고 있었다. Ground truth는 inference 단계에서는 없다. 즉 SVM class 분류 성능 향상을 위하여 학습 과정에서만 사용했을 뿐이지 inference에서 bounding box는 순전히 selective search에만 의존하고 있는 것이다. 또한 SVM과 bounding box regressor는 독립적으로 학습하는 것이지 같이 하는 것이 아니다. 즉 sample을 나누는 기준은 달라져도 된다.

 

따라서 추론 단계를 위해 별개의 regressor를 학습시켜준다. 물론 당연하게도 positive/negative sample은 다시 나누어야한다. 아까도 말했듯이 ground truth box만 positive로 사용한다면 regressor를 학습하는 의미가 없지 않은가.

 

위와 같은 과정으로 regressor의 학습을 진행한다. 논문에서는 IoU 0.6 이상을 positive sample로 분류하고 이들을 후보로 선정한다. 이보다 작은 IoU는 실제로 다른 객체이거나 관계가 없을 확률이 높고 또한 모델로 학습시키기 어렵기 때문이다. 최종적으로 regressor는 {x,y,w,h} 4개의 값을 출력한다.

 

이것을 수식으로 표현하면 다음과 같다.

여기서 P는 selective search로 제안된 box의 좌표 정보이다. G는 ground truth box를 의미하고, G햇은 selective search로 뽑아낸 box의 정보를 regressor에 넣어서 얻은 예측된 ground truth box이다. 즉 regressor는 selective search의 예측인 P와 ground truth 정보인 G 사이의 transformation을 학습하는 모델이 된다.

 

이때 ridge regression을 적용하여 파라미터를 업데이트한다.

 

여기서 ti는(i에는 x,y,w,h) 결국 regressor가 학습하고자 하는 목표가 되며, 위의 식에서 di(P)와 동일하다고 생각하면 된다.

 

 

5. Non-maximum Suppression

Non-maximum suppression에 대해서는 Canny detection을 공부하며 접한 적이 있었다. 당시에도 edge 검출 정확도 향상을 위해 Sobel gradient에서 얻은 두꺼운 pixel 영역에서 최대 gradient 영역만 골라내고 나머지 부분은 억제하는 non-maximum suppression을 사용했다.

 

이와 같이 detection task에서 주로 사용되는 방법으로, 추론 단계에서 region proposal로 얻어진 많은 bounding box 중 가장 신뢰도가 높은 box만 남기는 후처리 기법이다.

 

NMS의 작동 원리는 아래와 같다.

1. 한 클래스에 대해서 confidence score로 box를 정렬한다. (이 단계에서 threshold를 설정해 너무 낮은 score를 가지는 box를 제거할 수도 있다)

2. 신뢰 점수가 가장 높은 box를 선택한다.

3. 선택한 box와의 IoU를 계산하고, 설정한 threshold 이상인 상자를 제거한다. (같은 class를 나타내는 것으로 간주)

4. 남은 상자에서 이 과정을 반복하고(다음으로 점수가 높은 box 기준), 처리할 상자가 없으면 끝난다.

 

R-CNN에서 사용한 방법을 보면 각각 학습을 마친 모델의 추론 과정에 NMS를 추가한다. Bounding box regressor와 Linear SVM를 통해 얻어진 box 정보와 class confidence score를 통해 NMS를 수행하여 결과를 간단하게 나타낸다.

 

NMS는 최종 box 결과가 간결하고 정확해진다는 장점을 가진다. 또한 계산이 복잡하지 않다는 장점이 있다.

 

하지만 고정된 IoU에 의존한다는 문제를 피할 수 없고 detection 클래스가 많은 경우 각각의 class에 대해서 개별적으로 적용해야한다는 단점이 있다는 것에 주의해야한다.

 

 

 

결과

VOC 2010 test 결과이다. 기존 다른 모델들의 성능을 압도하는 것을 알 수 있는데, 그 중에서도 특히 selective search를 적용한 UVA와 Regionlets보다도 더욱 좋은 성능을 낸다는 점이 눈에 띄는 것 같다. Bounding Box regressor를 적용한 R-CNN BB가 기존의 R-CNN보다 성능이 향상됨도 확인할 수 있다.

 

대회에 참여하진 않았지만, ILSVRC2013 detection test set의 점수를 살펴보아도 OverFeat을 포함한 다른 모델들보다 좋은 성능을 보여주고 있다.

 

추가로 VOC 2007 데이터 셋에서 fine tuning의 유무로 성능을 비교한 결과이다. 첫 3줄은 fine tuning없이 test한 결과이고 R-CNN FT가 fine tuning으로 학습한 결과이다. 당연하게도 fine tuning을 하고 bounding box regressor까지 사용한 모델이 가장 성능이 좋은 것을 확인할 수 있다.

 

그 아래 Table 3에서는 CNN architecture를 바꾸었을 때 성능 향상에 대해서 다루고 있다. 실제로 OxfordNet(VGG)를 사용하였을 때 mAP가 66%로 기존 AlexNet기반 모델을 사용하였을 때보다 성능이 향상됨을 확인할 수 있다.

 

 

 

결론

이 논문이 object detection의 초기 논문이라는 점을 고려하면 한계점도 많이 존재했을 것이다.

 

먼저 현재 발전한 모델들에 비해서 상대적으로 시간이 오래 걸린다. 각 제안 영역역을 반복해서 CNN으로 학습시켜야하고 selective search 알고리즘 자체가 CPU를 사용하기 때문도 있다. 또한 2000개의 이미지를 CNN에 넣고 학습을 해야한다는 점도 학습시간이 길어지는 이유가 된다. 따라서 오늘날은 딥러닝 기반의 region proposal을 사용하고있다.

 

다음으로 multi-stage 학습 방법으로 인해 SVM과 BB regressor로 CNN을 update 하지 못한다는 단점이 존재한다.

 

이러한 점들을 개선하기 위해 이후 연구들이 진행되어 SPPnet, Fast R-CNN, Faster R-CNN같은 모델들이 고안되었다.

 

한계점이 존재하긴 하지만 당시 object detection에 deep learning을 도입하려고 노력하였다는 점, 실제로 큰 성능향상을 이뤄냈다는 점 등 이 분야의 시작을 알린 논문으로써 가치가 있다고 생각한다. 나 또한 처음 읽는 object detection 논문으로 새로운 개념들을 많이 배울 수 있었던 것 같다.

 

 

 

참고: https://www.youtube.com/watch?v=SMEtbrqJ2YI

참고: https://herbwood.tistory.com/5

참고: https://developer-lionhong.tistory.com/31

참고: https://nuggy875.tistory.com/21#comment14274211

 

반응형