I'm Lim

[논문 정리] Fast R-CNN 본문

Object Detection

[논문 정리] Fast R-CNN

imlim 2023. 2. 19. 16:21

Paper

  Girshick, R. (2015). Fast r-cnn. In Proceedings of the IEEE international conference on computer vision (pp. 1440-1448).

Abstract

  Fast R-CNN 모델은 기존의 R-CNN, SPP-Net, Overfeat과 달리 Classification과 Regression을 동시에 학습을 진행합니다. 또한, SPP-Net과 유사하게 학습시 입력으로 한장의 이미지만을 사용합니다. 그 결과, VGG-16을 기준으로 R-CNN에 비해 학습시간이 9배 빨랐고, SPP-Net에 비해 3배 빨랐다고합니다. 성능적인 측면에서도 mAP를 66%를 기록하면서 R-CNN보다 좋은 성능을 보였습니다.

R-CNN and SPP-Net

1. 여러단계의 학습 과정

  R-CNN은 우선 ImageNet으로 학습된 모델을 fine-tuning시키고, SVM을 통해 classifier를 정의한 후 bounding box regressor를 학습시킵니다.

2. 학습 시간 및 메모리

  SVM과 bounding box regressor의 학습을 위해 selective search를 통해 얻은 모든 proposal들을 메모리에 올려야합니다. 이는 대략 수백 기가바이트에 달한다고 합니다. 또한, VOC 07기준 2.6일이 소요됩니다.

3. Object detection is slow

  테스트 시, R-CNN은 한장을 처리하는 데 대략 47초가 걸린다고 합니다.

 

 

SPP-Net은 모든 proposal들을 입력으로 사용하는 것이 아니라, 한장의 이미지만을 입력으로 사용함으로써 R-CNN에 비해 테스트 시간을 10배에서 100배정도 단축시켰습니다. 하지만, SPP-Net은 R-CNN의 구조를 그대로 사용하였기 때문에 Classifier와 Regressor를 따로 학습시킵니다. 또한, SVM과 Regressor의 학습이 CNN 네트워크에 영향을 끼치지 못한다는 단점이 존재합니다.

 

 

  Fast R-CNN은 다음과 같은 장점을 가지고 있습니다.

 

  1. R-CNN과 SPP-Net보다 성능이 좋습니다.
  2. Classifier와 Regressor를 동시에 학습합니다.
  3. 학습이 모든 네트워크에 영향을 미칩니다.
  4. 디스크 용량이 요구되지 않습니다.

Fast R-CNN architeture and training

Fast R-CNN architecture

 

  Fast R-CNN의 학습과정은 다음과 같습니다.

 

  1.  전체 이미지를 입력으로 이용하여 CNN 네트워크에 통과시킵니다.
  2.  Region proposal을 통해 얻은 proposal들을 이용하여 고정된 길이의 feature vector를 추출합니다.
  3.  feature vector를 두개의 fc layer의 입력으로 사용하여 classifier를 위한 출력 값과 regressor를 위한 출력값을 추출합니다.

The ROI pooling layer

  ROI pooling layer는 CNN network와 fc layer 사이에 위치합니다. ROI pooling layer의 출력은 fc layer의 입력으로 사용되는데, 이 크기를 맞춰주기 위한 변환작업이라 생각할 수 있습니다.

 

ROI pooling layer의 처리과정은 다음과 같습니다.

 

  1.  입력 이미지를 CNN network에 통과시켜 feature를 추출합니다.
  2.  Region proposal을 통해 얻은 proposal들을 이용하여 feature의 경계를 제한합니다.
  3.  경계를 가지는 feature에 max-pooling을 적용하여 feature map 크기를 고정된 H x W로 변환시킵니다.
  4.  이 feature를 fc layer의 입력으로 사용합니다.

※ ROI pooling layer는 Spatial Pyramid Pooling의 특수한 경우로 볼 수 있습니다.

Initializing from pre-trained networks

  Fast R-CNN은 Backbone 모델로 VGG 16을 사용하고, 학습을 위해서 모델을 변형시킵니다.

 

  1.  마지막 max pooling을 ROI pooling layer로 교체합니다. VGG 16 fc layer의 입력은 feature map 크기가 7 x 7이어야 하므로 이에 맞게 H와 W를 7 x 7로 고정시킵니다.
  2. fc layer의 마지막 단을 classifier (K+1차원 벡터)와 regressor ((K+1) x 4차원 벡터)로 교체합니다.
  3. VGG-16의 입력이 두가지 데이터를 입력으로 받도록 교체합니다 (전체 이미지, proposals).

Fine-tuning for detection

  앞서 SPP-Net은 CNN 네트워크가 학습시 업데이트 되지 못한다고 하였습니다.

 

1. SPP-Net과 R-CNN이 학습하는 방식은 너무 비효율적입니다.

 

  이 모델들은 학습 샘플들을 구성할때, 각기 다른 이미지들로부터 하나의 ROI 샘플들을 추출하여 입력으로 사용합니다. 이를 해결하기 위해, Fast R-CNN은 N개의 이미지를 정하고, ROI를 R / N개를 추출하여 학습에 사용한다고 합니다.

 

정리하자면, 기존 SPP-Net과 R-CNN은 N = 128, R = 128인 반면, Fast R-CNN은 N = 2, R = 128로 지정하여 학습 샘플을 추출하였습니다.

 

우선, 이 방식은 계산량을 줄입니다. R-CNN은 128개의 이미지 모두 selective search를 진행하고, 하나의 ROI를 추출하는 것에 비해, Fast R-CNN은 2개의 이미지에 한해 selective search를 진행하고, 64개의 ROI를 추출하기 때문에 계산량이 줄어듭니다. 이 방식은 기존의 방식보다 Fast R-CNN이 64배 정도 빠르다고 합니다.

 

예를 들어, 128개의 이미지가 있고, ROI를 64번 학습시키는 데 드는 계산량을 구해보겠습니다. (Selective search 계산량 : a)

N = 2, R = 128인 Fast R-CNN의 경우, 128개의 이미지 전체를 학습하는 데 걸리는 계산량은 2 x a x 64 가 됩니다 (Selective search x 배치 이미지 개수 x (전체 이미지 개수 / 배치 이미지 개수)).

그에 반해, R-CNN은 128 x a x 64가 됩니다 (Selective search 개수 x 배치 이미지 개수 x (64 / ROI 개수)).

 

아마, 이러한 논리로 Rast R-CNN이 64배정도 더 빠르다고 하지 않았나 추측하고 있습니다.

 

2. Fast R-CNN은 한번에 학습합니다.

 

  세 단계로 이루어진 (Fine-tuning, SVM 학습, regressor 학습) R-CNN과 달리 Fast R-CNN은 이를 한번에 처리합니다. 따라서, CNN network들이 업데이트가 가능해집니다.

 

Mutli task loss

 

  한번에 학습하기 위해서, Fast R-CNN은 classifier와 regressor의 loss를 아래와 같이 하나로 합칩니다.

 

 

$L_{cls} (p, u)$는 Classifier의 loss로써 cross entropy loss로 생각하면 됩니다.

 

$L_{loc} (t^u, v)$는 Regressor의 loss로써 MSE loss를 생각하면 됩니다. ( 자세히 말하면, MSE와 MAE를 둘다 사용 )

 

$\lambda$는 Regressor를 얼만큼 반영할 것인가에 대한 파라미터인데 논문에서는 그냥 1을 사용했다고 합니다.

 

마지막으로, $[u \ge 1]$는 해당 입력이 positive라면 1을, negative라면 0을 줌으로써 background class의 경우 regressor 학습을 진행하지 않도록 합니다. 

 

※ Positive : ground truth와의 IOU가 0.5이상인 것. (미니 배치 중 25%) // Negative : ground truth와의 IOU가 [0.1, 0.5)인 것. (미니 배치 중 75%)

Fast R-CNN detection

1. Training Fast R-CNN

  종합해보자면, Fast R-CNN은 아래와 같은 과정으로 학습을 진행합니다.

 

1 ) Hierarchical sampling

 

  위에서 설명한대로 N : 2과 R : 128로 하이퍼 파라미터를 설정한 후, 2개의 이미지에 대해 selective search를 통해 이미지 당 64개의 proposal들을 추출합니다. 이후, positive sample과 negative sample로 나눈 후, 미니 배치를 구성합니다.

 

2 ) Feature extractor

 

  위의 미니 배치를 수정된 VGG 16의 입력으로 사용하여 ROI Pooling layer까지 통과시키고, feature를 추출합니다.

 

3 ) The ROI pooling layer

 

  proposal들을 이용하여 추출한 feature의 경계를 정하고, ROI pooling layer를 통과시켜 7 x 7 feature map을 얻습니다. (VGG 기준)

 

4 ) Fully connected layer

 

  7 x 7 feature map을 flatten 시키고, fc layer에 통과시킵니다. 이를 통한 출력은 K+1 차원의 벡터 (classifier)와 (K+1) x 4차원의 벡터 (regressor)입니다.

 

5 ) Multi task loss

 

  이후, 이 값들을 가지고 위에서 설명한 multi task loss를 구하여 학습을 진행합니다.


Discussion

  Fast R-CNN은 R-CNN과는 달리 원본 이미지를 학습에 사용합니다. 이는 SPP-Net과 유사합니다. 하지만, SPP-Net은 R-CNN의 구조를 그대로 사용하여 fine-tuning, SVM, Regressor가 모두 따로 학습되고, 이는 CNN 네트워크가 학습 시 업데이트가 되지 못하는 구조를 가집니다. 이를 해결하기 위해, Fast R-CNN은 fine-tuning, classifier, regressor를 한번에 업데이트 시킵니다.

'Object Detection' 카테고리의 다른 글

[논문 정리] SPP-Net  (0) 2023.02.09
[논문 정리] Overfeat  (0) 2023.02.05
[개념 정리] Non Max Suppression  (0) 2023.01.24
[논문 정리] R-CNN  (0) 2023.01.24
[개념 정리] Object Detection Region Proposal  (0) 2022.12.27
Comments