🌌 Deep Learning/Overview

[Overview] R-CNN 계열 Object Detection 정리 (Two-stage detector)

복만 2021. 1. 8. 14:52

순서:

1. R-CNN (2014)

2. SPP-Net (2015)

3. Fast R-CNN (2015)

4. Faster R-CNN (2016)

5. FPN (2017) (추가예정)

 

참고: yeomko.tistory.com/category/%EA%B0%88%EC%95%84%EB%A8%B9%EB%8A%94%20Object%20Detection?page=1

 

 

 


 

1. R-CNN (2014)

 

Girshick, Ross, et al. "Rich feature hierarchies for accurate object detection and semantic segmentation." Proceedings of the IEEE conference on computer vision and pattern recognition. 2014.

 

Paper: arxiv.org/pdf/1311.2524.pdf

Official code: github.com/rbgirshick/rcnn

 

Selective Search를 이용해 Region Proposal을 진행하고, CNN을 통해 feature vector을 추출 후 SVM으로 Classification 진행

 

 


1. Extract region proposals
Selective Search 를 이용해 물체가 있을 것으로 예상되는 region(box) 2000개를 추출한다. = Region Proposal
*Selective Search: 주변 pixel 간의 유사도를 기준으로 box 후보를 추론하는 Rule-based algorithm


2. Warp region
모든 box를 동일한 크기로 resize 한다. (CNN에 넣기 위해)

3. Compute CNN features
ImageNet으로 pretrain 후 fine-tuning한 CNN을 이용해 4096-dim feature vector 추출

4. Classify regions
추출된 vector를 pretrained SVM Classifier를 이용해 각 region의 class 판단


5. Non-maximum suppresion
동일한 물체에 여러 개의 box가 쳐져 있는 것이라면, 가장 score이 높은 box만 남기고 나머지는 제거
IoU를 이용해 판단한다. IoU가 0.5보다 크면 동일한 물체를 가르키는 box라고 판단, Non-maximum suppresion을 적용.

6. Bounding box regression
bounding box regression을 적용해 box의 위치 조정
Selective search를 이용해 찾은 box 위치는 부정확하다. 따라서 이를 조정해줌.
이는 prediction box P^_i의 위치를 GT box G의 위치로 이동시켜주는 선형 회귀 d를 학습시켜 주는 것.

(bounding box는 결국 시작점의 (x,y) 좌표와 width, height의 순서쌍이므로 이를 matching시켜주는 선형회귀를 학습시켜 준다)

 

 

 

 


 

2. SPP-Net (2015)

 

He, Kaiming, et al. "Spatial pyramid pooling in deep convolutional networks for visual recognition." IEEE transactions on pattern analysis and machine intelligence 37.9 (2015): 1904-1916.

 

Paper: ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=7005506

 

Selective Search를 통해 Region proposal을 한 후 CNN을 통해 feature map 추출, SPP를 적용한 후 SVM으로 Classification

 

 

 

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

2. Selective Search를 통해 찾은 크기가 서로 다른 ROI를 feature map에 projection

 

출처: https://youtu.be/kcPAGIgBGRs

 

3. feature map ROI에 *SPP를 적용, 고정된 크기의 feature vector 추출

4. FC layer (Train)

5. Binary SVM classifier (Train)

6. Bounding box regressor (Train)

 

 

*SPP (Spatial Pyramid Pooling)

CNN은 Input size가 고정되어야 한다. 이는 Convolutional layer 때문이 아닌 이후의 FC layer 때문이다.

따라서 FC layer 통과 전에 feature map들을 동일한 크기로 조절해주는 pooling을 적용함으로써, CNN에 다양한 크기의 Input을 사용할 수 있다.

 

 

- CNN을 통과한 Input feature을 미리 정해져 있는 Grid로 나눔. (ex: 4*4, 2*2, 1*1)

- 각 Grid로 나눈 이미지들을 Pyramid 라고 부르며, Pyramid의 한 칸을 bin이라고 부름.

- 각 bin에서 max pooling을 수행해 그 결과를 쭉 이어 붙혀 vector로 만듦. (bin마다 하나의 output이 추출됨)

- Input의 channel 개수를 k, bin의 총 개수를 M이라고 할 때 SPP의 최종 output은 kM dim vector.

- Input size에 관계없이 항상 동일한 크기의 output을 얻게 된다. (fixed-length representation)

- 이를 FC layer에 넣으면 됨.

 

 

SPP-Net의 한계점 :

    (1) 여전히 end-to-end 학습 불가능. 

    (2) 여전히 최종 클래시피케이션은 binary SVM, Region Proposal은 Selective Search를 이용

    (3) SPP 이전의 conv. layer은 학습시키지 못하고 이후의 FC layer만 학습 가능.

 

 

 


 

3. Fast R-CNN (2015)

 

Girshick, Ross. "Fast r-cnn." Proceedings of the IEEE international conference on computer vision. 2015.

 

Paper: openaccess.thecvf.com/content_iccv_2015/papers/Girshick_Fast_R-CNN_ICCV_2015_paper.pdf

Official code: github.com/rbgirshick/fast-rcnn

 

Selective Search를 통해 Region proposal을 한 후 CNN을 통해 feature map 추출, ROI pooling을 적용한 후 FC로 Classification

 

 

 

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

2. Selective Search를 통해 찾은 크기가 서로 다른 ROI를 feature map에 projection

3. feature map ROI에 *ROI pooling 적용, 고정된 크기의 feature vector 추출

4. FC layer 통과하여 두 개의 branch로 나뉨

5-1. 하나의 branch는 FC-softmax (Classifier)를 통과, 해당 ROI의 classification 진행 (SVM 사용x)

5-2. 다른 branch는 FC-bounding box regression을 통해 Selective search로 찾은 box의 위치 조정

 

 

R-CNN vs. SPP-net & Fast R-CNN

 

 

*ROI Pooling

 

 

- Input feature map을 미리 정해놓은 H*W 크기에 맞게끔 grid를 설정
- 각 칸에서 max pooling 실시하면 H*W 크기의 feature map이 출력됨. 이를 Vector로 만들어(flatten) feature vector 추출.
- 이는 SPP에서 Pyramid level이 1인 경우와 동일

 

 

Fast R-CNN의 한계점 :

    (1) 여전히 region proposal에 selective search를 이용 (slow) 이는 CPU를 이용함

 

 

 


 

4. Faster R-CNN (2016)

 

Ren, Shaoqing, et al. "Faster r-cnn: Towards real-time object detection with region proposal networks." IEEE transactions on pattern analysis and machine intelligence 39.6 (2016): 1137-1149.

 

Paper: ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=7485869

Official Code: github.com/shaoqingren/faster_rcnn

 

CNN으로 feature map 추출, RPN으로 ROI 얻고 ROI pooling 후 classification

 

 

 

1. Conv layer을 통해 feature map 추출

2. *RPN을 통해 ROI 얻음 (Selective search 사용 x)

3. ROI pooling

4. Classifier

 

 

*RPN (Region Proposal Network)

 

 

1. Input feature map에 3*3 conv. 수행 (Intermediate layer). 이 때 feature map 크기는 보존.

2. 이를 이용해 Classification result와 Bbox regression result를 만든다.

2-1. Classification Result: anchor box or not

    - anchor: 미리 정해진 size의 box

    - 1*1 conv. 수행하여 channel 수를 2(object or not)*9(# of anchor box)개로 만든다. Feature map 크기 보존

    - Feature map의 각 pixel은 anchor box의 좌표를 의미

    - 각 channel은 해당 좌표를 anchor로 삼아 9개의 anchor box가 object 인지 아닌지에 대한 예측 값을 담고 있다.

    - 이 값에 Softmax를 적용해 각 anchor가 object일 확률 값을 얻는다.

2-2. Bounding box regression result: bounding box 위치 보정

    - 1*1 conv. 수행하여 channel 수를 4(dx, dy, dw, dh)*9(# of anchor box)개로 만든다. Feature map 크기 보존

    - 각각의 Anchor box의 위치 보정에 사용되는 값이다.

3. Classification result에서 확률이 높은 순으로 k개의 anchor만 추려내어 이들에 각각 bbox regression을 적용한다.

4. Non-maximum-suppresion을 적용해 ROI를 추린다.

 

 

*RPN의 목적은 ROI를 추리는 것.

3.과 4.를 통해 선정한 ROI를 feature map에 projection한 후, ROI pooling을 적용하고 다른 R-CNN들과 마찬가지로 classification을 진행한다.

반응형