Fast R-CNN

김태규·2024년 12월 14일
0

비전 논문리뷰

목록 보기
6/15

이번 포스팅에서는 Fast R-CNN과 Faster R-CNN을 정리합니다.
기존 R-CNN의 단점은 속도가 매우 느리다는 점이었습니다. 이를 보완하기 위해 Fast R-CNN, Faster R-CNN이 개발되었습니다. 모델명에서 Fast가 붙은 만큼 기존의 모델보다 속도면에서 큰 개선을 보였습니다.


Fast R-CNN

preview

기존의 R-CNN 모델은 Selective Search를 통한 2000개의 region proposal 각각을 CNN에 넣어 많은 시간이 소요됩니다. Fast R-CNN은 이러한 문제를 개선하여 단 1장의 이미지만 받습니다. Fast R-CNN은 Selective Search를 이용한다는 것을 동일하지만 전체 이미지를 CNN에 넣은 후 ROI(region of interest) Pooling을 통해 고정된 크기의 vector를 FCN에 전달합니다. 또한 multi-task loss를 사용하여 모델을 개별적으로 학습시킬 필요 없이 한번에 학습시킵니다. 이를 통해 학습 및 detection시간이 크게 감소하였습니다.

ROI(region of interest) Pooling

RoI Pooling은 region proposal 영역을 CNN 모델을 통과한 feature map에 투영시키는 방법입니다.

  1. CNN 모델로 VGG net을 사용했다고 했을때 feature map이 나옵니다.
  2. 이후 selective search를 적용한 region proposal이 500x700으로 나왔을때 region proposal에 해당하는 관심영역, 즉 RoI를 input이미지와 feature map의 비율인 sub-sampling ratio를 이용해서 투영시켜줍니다. (이를 RoI Projection이라고 함)
  3. feature map의 projection된 영역을 지정된 grid로 나눠주고 max pooling을 합니다. -> 고정된 크기의 vector가 나오게 된다. (2x2)

이처럼 미리 지정된 sub-window에서 max-pooling을 수행하다보니 Region proposal의 크기가 모두 달라도 고정된 크기의 feature map을 얻을 수 있습니다.


Multi-task loss

Fast R-CNN에서는 multi-task loss를 사용하여 Classifier와 Bounding box regressor를 동시에 학습시킵니다. 이처럼 두 모델을 한번에 학습시키기 때문에 R-CNN과 같이 각 모델을 독립적으로 학습시켜야 하는 번거로움이 없다는 장점이 있습니다.
multi-task loss는 아래와 같습니다.

  • p=(p0,.....,pk)p = (p_0, ....., p_k): k+1 개의 class score
  • uu: ground truth class score
  • tut^u = (txu,tyu,twu,thu)(t^u_x, t^u_y, t^u_w, t^u_h): 예측한 bounding box좌표를 조정하
    는 값
  • vv = (vx,vy,vw,vhv_x, v_y, v_w, v_h): 실제 bounding box의 좌표값

λ\lambda(가중치 조정): classification loss와 localization loss의 균형을 맞추기 위해 사용하는 가중치 스칼라값. 일반적으로 λ\lambda = 1로 설정되지만, 특정 데이터셋에 따라 조정될 수 있음.

Smooth L1 Loss

Lloc(tu,v)=i{x,y,w,h}SmoothL1(tiuvi)L_{loc}(t^u, v) = \sum_{i \in \{x, y, w, h\}} \text{Smooth}_{L1}(t^u_i - v_i)

SmoothL1(x)={0.5x2if x<1,x0.5otherwise.\text{Smooth}_{L1}(x) = \begin{cases} 0.5x^2 & \text{if } |x| < 1, \\ |x| - 0.5 & \text{otherwise.} \end{cases}

수식의 의미

  1. 객체가 어떤 class인지 정확히 분류 (LclsL_{cls})
  2. 객체의 정확한 위치를 예측 (LlocL_{loc})
  • multi task loss는 0.8~1.1% mAP를 상승시키는 효과가 있다고 합니다.

model 작동방식

  1. 하나의 이미지에 대해서 CNN model(VGG)를 통과함, Region proposal을 함.
  2. Region proposal한 이미지의 RoI영역을 sub-sampling ratio를 통해서 feature map에 RoI projection을 함.
  3. projection된 RoI영역에 대해서 사전에 지정된 grid로 나눈 후 max pooling을 함.
  4. bounding box regression과 classification수행

의문점 해결
처음에 이미지에 대해서 Classification을 하면 확률 분포값이 하나가 나오는 줄 알았다.
하지만 RoI영역 하나에 대해서 Classification과 Regression을 하기 때문에 상관이 없는 것이었다.


Hierarchical Sampling

Fast R-CNN을 training 시키기 위해 저자는 hierarchical sampling을 수행했다고 한다.
학습에는 각 mini-batch에서 RoI-Pooling을 통해 생성된 RoI의 일부를 샘플링하여 사용했다.
규칙은 다음과 같다.

  1. 양성(positive) 샘플 선정
    RoI 와 ground truth간의 IoU값이 0.5 이상인 경우에 이 샘플을 positive 샘플로 간주한다. 전체 training data의 25%를 positive 샘플로 사용했다고 한다.
    이때 multi-task loss의 [u>1][u>1]의 값은 1이다.
  2. 음성(negative) 샘플의 선정
    RoI와 ground truth값의 IoU값이 0.5이하인 경우에 이 샘플을 negative 샘플로 간주한다. 전체 training data의 75%를 negative 샘플로 사용했다고 한다.
    이때 multi-task loss의 uu의 값은 0이다. (배경이라 bounding box를 고칠필요가 없기 때문)

Truncated SVD

Fast R-CNN 모델은 detection시, RoI를 처리할때 fc layer에서 많은 시간을 잡아먹는다. 논문의 저자는 detection 시간을 감소시키기 위해 Truncation SVD를 사용하여 fc layer를 압축했다고 한다.

Training Fast R-CNN

Fast R-CNN을 학습시키는 과정은 다음과 같다.

1) Initializing pre-trained network

feature map을 추출하기 위해 VGG16 모델을 사용한다.
detection task에 맞게 모델을 변경하는 과정이 필요하다.

  1. VGG16 모델의 마지막 max pooling layer를 RoI Pooling으로 대체합니다.
    이때 RoI Pooling을 통해 출력되는 feature map의 크기인 H, W는 후속 fc layer와 호환이 가능하도록 7x7로 설정해줍니다. (지정된 grid가 7x7임)

  2. 네트워크의 마지막 fc layer를 2개의 fc layer로 대체합니다. 첫번째 fc layer는 각 class k개와 배경을 포함한 (K+1)의 output을 가집니다. (각각의 unit은 확률값임), 두 번째 fc layer는 각 class별로 bounding box의 좌표를 조정하여 (k+1)*4개의 output을 가집니다. (bounding box regressor)

  1. conv layer3 까지의 가중치는 freeze하고 나머지 weight들을 fine-tunning합니다. 저자는 fc layer만 fine-tunning한 것보다 conv layer까지 포함하여 학습을 시켰을때 성능이 더 좋았다고 합니다.

2) region proposal by Selective search

먼저 원본 이미지에 대하여 selective search알고리즘을 이용하여 region proposals를 추출합니다.

  • input: image
  • process: selective search
  • output: 2000개의 region proposal

3) Feature extraction ( 1~13 layer까지) by VGG16

VGG16모델에 224x224x3의 원본 이미지를 입력을 하고 layer 13까지 진행한 feature map을 추출합니다.

  • input: 224x224x3 사이즈의 이미지
  • process: feature extraction by VGG16 (13 layer까지)
  • output: 14x14x512 사이즈의 feature map

4) Max pooling by RoI Pooling

이전에 언급을 했듯이 VGG16의 output feature map과 region proposals를 RoI Projection시킵니다. 이 과정을 거쳐 7x7x512의 feature map을 추출합니다.

  • input: 14x14x512 feature map
  • process: RoI pooling
  • output: 7x7x512 feature map

5) Feature vector extraction by FC layers

다음으로 region proposal별로 추출된 7x7x512 feature map에 대해 flatten한 후 fc layer에 입력하여 fc layer를 통해 4096크기의 feature vector를 얻습니다.

  • input: 7x7x512 feature map
  • process: fc layer
  • output: 4096 feature vector

6) Class prediction by Classifier

다음은 추출된 4096크기의 feature vector를 사용하여 k+1의 output unit을 가진 FC layer에 통과시키는 것입니다. 하나의 입력이미지에 대해서 하나의 region proposal에 대한 class의 확률 분포값을 계산합니다.

  • input: 4096 feature vector
  • process: class prediction fc layer
  • output: (k+1)개의 vector(class 확률 분포값)

7) Detailed localization by Bounding box regressor

4096크기의 feature vector를 사용하여 (k+1)x4개의 output unit을 가진 FC layer에 통과시킵니다. (좌표값 예측) 하나의 이미지에서 하나의 region proposal에 대한 class별로 조정된 bounding box 좌표값을 추출합니다.

  • input: 4096 feature vector
  • process: Bounding box regressor
  • output: (k+1)x4 size vector

Multi-task loss를 사용하여 하나의 region proposal에 대한 classifier와 bounding box regressor의 loss를 back-propagation 가중치를 학습시킵니다.

  • Input : (K+1) sized vector(class score), (K+1) x 4 sized vector
  • Process : calculate loss by Multi-task loss function
  • Output : loss(Log loss + Smooth L1 loss)

Detection Fast R-CNN

실제 Detection시, Fast R-CNN모델의 동작은 다음과 같습니다. Traing때와 다른 점은 RoI pooling이후 fc layer대신에 Truncated SVD를 적용했다는 점입니다. 또한 예측한 bounding box에 대하여 NMS(non maximum supression)알고리즘을 적용하여 최적의 bounding box만을 출력하게 됩니다.

Conclusion

Fast R-CNN 모델은 R-CNN 모델보다 학습 속도가 9배 이상 빠르며, detection 시, 이미지 한 장당 0.3초(region proposals 추출 시간 포함)이 걸립니다. PASCAL VOC 2012 Challenge에서 mAP 값이 66%를 보이면서 detection 성능 역시 R-CNN 모델에 비해 향상된 모습을 보입니다. 이외에도 multi-task loss를 사용하여 single stage로 여러 모델을 학습시킬 수 있다는 점과, 학습으로 인해 네트워크의 가중치값을 Backpropagation을 통해 update할 수 있다는 장점이 있습니다.

profile
발전하는 개발자입니다!

0개의 댓글