안녕하세요.

 

지난번 리뷰했던 R-CNN에 이어서 후에 발표된 R-CNN 계열 논문들을 간단하게 리뷰하고자 합니다.

순서는 타이틀과 같이 SPP-Net, Fast R-CNN, Faster R-CNN 순으로 진행하겠습니다.

 

1. SPP-Net

- R-CNN 한계점

  1) 기존 CNN Architecture의 고정된 입력 size에 맞게 이미지를 Crop/Warping 과정에서 왜곡 현상 발생

  2) Selective Search의 결과에 대한 최대 2000번의 순차적 CNN 연산

입력 이미지로부터 Region Proposal(Selective Search)로 생성된 데이터들이 2000개가 나오면 2000번의 CNN 과정을 수행해야 하는 비효율성을 해소하기 위해 등장한 것이 SPP-Net입니다.

 

SPP-Net은 R-CNN의 수행 과정 중 Region Proposal과 CNN 순서를 바꿨습니다.

 

<그림 1> R-CNN과 SPP-Net

R-CNN이 Region Proposal을 하고 crop/warping한 후 CNN 연산을 수행했다면

SPP-Net은 이미지 전체에 대하여 CNN 연산 수행하고 추출된 feature map을 기반으로 Region Proposal을 수행함으로써 2000번의 연산을 1번으로 줄여 시간을 단축시켰습니다.

 

또, R-CNN에서 이미지를 Crop/Warping 과정에서 왜곡 현상이 발생하는 것을 방지하기 위해

SPP-Net은 입력 이미지의 크기에 제약이 없는 conv layer를 거친 후 Spatial Pyramid Pooling layer 추가하여 고정된 입력 크기를 갖는 fc layer의 입력에 들어갈 수 있게 하였습니다.

 

SPP(Spatial Pyramid Pooling)

SPP는 conv layer(conv 5)로부터 추출된 feature map에 SS(Selective Search)를 적용하고 선별된 candidate bounding box를 입력 받아 Spatial bin(1*1, 2*2, ... feature map)을 획득하는 pooling 연산을 수행하는 과정입니다.

 

예를 들어, 13x13 feature map으로부터 max pooling 연산을 수행하여 3x3 feature map을 획득하려 합니다.

<그림 2> Spatial Pooling Pyramid

이때 pooilng 연산을 진행할 window(kernel)의 조건 설정은 아래 방법으로 구했습니다.

<그림 3> Pooling 연산을 수행할 window 조건 설정

 

<그림 4> SPP layer 수행 과정

SPP-Net 논문은 ROI feature로 4x4, 2x2, 1x1 spatial bin들을 얻고 이들 각각을 일렬로 flatten한 벡터들을 모두 합쳐 1차원 feature vector를 생성합니다.

그리고 이 feature vector를 fc layer의 input으로 넣어줍니다.

 

SPP-Net이 Obejct Detection을 수행하는 과정을 보면 다음과 같습니다.

1. 전체 이미지를 CNN에 통과시켜 feature map을 추출

2. SS로 찾은 각 ROI에 SPP(Spatial Pyramid Pooling)를 적용하여 고정된 크기의 feature vector를 추출

3. FC layer 통과

4. 클래스 별로 Binary SVM Classifier 및 Bounding Box Regression 수행

 

<그림 5> SPP-Net 수행 과정

2. Fast R-CNN

- SPP-Net 한계점

  1) 3단계 Train 파이프라인 존재(SS, CNN, SVM)

  2) 4x4, 2x2, 1x1 spatial bin으로 인한 Overfitting 발생 가능

  3) SVM 학습으로 인한 대용량 저장 공간 필요

<그림 6> Overfitting 발생
<그림 7> feature map 정보를 가져오는 과정

SPP-Net은 SS, CNN, SVM에 해당하는 각 파라미터로 학습을 진행하는 3단계 Train 파이프라인 형태를 갖고  4x4, 2x2, 1x1 spatial bin으로 인해 특정 Scale에 집중적으로 학습해 Overfitting이 발생하여 그림 6처럼 같은 class여도 다른 모양을 가진 눈이 입력되어도 다르다고 판단할 수 있습니다.

또, Region Proposal로 생성된 candidate bounding box에 해당하는 각 feature map을 하드디스크로부터 가져오는 과정에서 오랜 시간이 소요되는 문제점이 있습니다.

 

이 문제점들을 해결하기 위해 Fast R-CNN이 등장했습니다.

 

Fast R-CNN은 전체 네트워크를 하나의 loss function에 대해 동시에 훈련 가능한 End-to-End 모델(1-stage)로 수정하여 Backpropagation이 가능해졌고, 기존 SPP-Net의 SPP-layer 대신 7x7 Single Spatial bin을 획득하는 Pooling layer를 추가했으며 무겁고 독립적인 SVM을 대신 softmax, bbox regressor를 사용하여 Classification을 수행합니다.

<그림 8> End-to-End model의 Fast R-CNN

Fast R-CNN이 Obejct Detection을 수행하는 과정을 보면 다음과 같습니다.

1. 전체 이미지를 CNN에 통과시켜 feature map을 추출

2. SS로 찾은 각 ROI에 Pooling 수행해 7x7 feature map(Spatial bin)추출한 뒤, 고정된 크기의 feature vector 추출

3. FC layer 통과하고 두 개의 Branch로 분리

   (생성된 feature에 대해 softmax로 ROI Classification과 bbox Regression 수행

<그림 9> 7x7 Spatial bin pooling layer 및 Pooling 연산을 수행할 window 조건 설정

Loss Function

<그림 10> Fast R-CNN loss function

Fast R-CNN의 loss function은 classfication lossbbox regressor loss(localization loss)를 섞어 종합적인 loss를 획득해 backpropagation을 수행해 전체 모델을 학습합니다.

 

Classification loss는 softmax로 얻어낸 확률값과 정답값에 대한 loss이고

Localization loss는 x,y,w,h에 대한 예측값과 groundtruth 조절값을 받아 계산하고 smooth L1 함수를 통과한 값입니다.

<그림 11> smooth l1 loss function

여기서, smooth L1 함수를 선택한 이유로는 error의 값이 충분히 작은 경우 맞는 것으로 판단해 loss를 빠른 속도로 0으로 수렴하는 특성을 살려 학습 속도를 증가시키기 위해 선택된 것으로 보입니다.

 

3. Faster R-CNN

- Fast R-CNN 한계점

  1) Region Proposal dependency

<그림 12> R-CNN, SPP-Net, Faster R-CNN result table

Fast R-CNN은 R-CNN과 SPP-Net에 비해 뛰어난 성능을 보이지만 Test time 결과를 확인해봤을 때,

총 test time 중 Region Proposal에서 Selective Search 알고리즘을 수행할 때 하드디스크에 저장된 CNN의 feature map을 가져오는데 time 비중을 많이 차지하는 문제점이 있습니다.

 

그래서 Faster-RCNN은 Region Proposal도 GPU를 통한 학습을 하게끔 RPN(Region Proposal Network)를 추가했습니다.

<그림 13> Faster R-CNN 전체적인 구조

RPN(Region Proposal Network)

Pretrain된 CNN으로부터 획득한 feature map은 ZFNet 기준 256d, VGG 16 기준 512d를 갖습니다.

<그림 14> Region Proposal Network(Backbone: ZFNet), Anchor box

이 feature map에 k개의 anchor box를 통해 영역을 정하고 classification layer와 bbox regression을 거쳐 object의 존재 여부를 확인합니다.

anchor box는 Sliding window를 기준으로 각 중심 좌표를 중심으로 9(k)개의 anchor box를 생성합니다.

(임의의 Scale 3개, Ration 3개로, 총 9개가 만들어집니다.)

<그림 15> Sliding Window 중 임의의 이미지에 대한Anchor box 예시

그림 15와 같이 anchor box들이 생성됐을 때, anchor가 object를 포함하고 있는지 classfication을 수행합니다.

(Classification Anchor들과 Groundtruth의 IoU를 모두 계산하여 IoU가 0.7보다 크면 1(Positive), 작으면 0(Negative)로 설정합니다. )

 

<그림 16> RPN에서 Classification, bbox regression 수행 과정

위 과정을 통해 9개 anchor box에 대한 Classification branch에서 Objectness을 수행한  256x9x2 벡터를, Bbox regression branch에서 Localization을 수행한 256x9x4 벡터를 획득하게 되며 bbox의 위치와 class를 prediction 완료하게 됩니다.

 

그리고 앞서 얻은 값들로 ROI 앞서 얻은 값들로 RoI를 계산합니다.

먼저 Classification을 통해서 얻은 물체일 확률 값들을 정렬한 다음, 높은 순으로 K개의 앵커만 추려냅니다.

그 다음 K개의 앵커들에 각각 Bounding box regression을 적용하고 Non-Maximum-Suppression을 적용하여 ROI를 구합니다.

 

 

그리고 이렇게 Prediction한 값으로 입력 이미지의 Groundtruth와 함께 loss function을 통해 RPN을 학습하게 됩니다.

 

Faster R-CNN이 Obejct Detection을 수행하는 과정을 보면 다음과 같습니다.

1. (데이터 양(VOC)이 적은 것을 고려하여)ImageNet에 대한 Feautre Extraction Model 학습(Feature Extraction pre-trained model)

2. VOC 데이터로 RPN Network를 학습하여 bbox 설정 기준에 대해 학습(RPN pre-trained model)

3. VOC 데이터로 1,2번 pre-trained model와 fc layer, bbox regression, classification을 Finetuning

 

4. Conclusion

최종 정리를 하면

R-CNN에 SPP-layer를 추가하여 여러 종류의 크기를 갖는 이미지를 학습하는 SPP-Net,

End-to-End model로 변경하여 전체 파라미터에 대한 loss를 학습하는 Fast R-CNN,

Region Proposal을 GPU로 처리할 수 있는 RPN을 추가하여 학습하는 Faster R-CNN 순으로 진화한 R-CNN 계열의 Object Detection 모델들을 살펴 볼 수 있었습니다.

 

<Reference>

https://89douner.tistory.com/91?category=878735