R-CNN 이 등장하기 전까지는 Sliding Windows와 CNN을 이용하여 Object Detection을 진행했었습니다.

하지만 Sliding Windows를 이용하면 연산량이 많고 Bounding Box (객체를 나타내주는 box)가 정확하지 않았습니다.

그래서 Region Proposals과 CNN을 결합한 R-CNN이 나오게 됐습니다.

 

R-CNN

 

R-CNN의 구조입니다.

       1. Input image에 Selective Search라는 알고리즘을 이용하여 Region Proposal 2000개를 추출합니다.

       2. 추출한 2천개의 영역을 각각 resize하여 CNN의 Input Data로 넣어줍니다.

       3. Output으로 4096개의 특징값을 뽑아줍니다.

       4. 특징값들을 SVM을 이용하여 class를 분류합니다.

       5. Bounding Box Regression을 적용하여 Bounding Box의 위치를 조정합니다.

 


Region Proposal

Region Proposal은 객체가 있을만한 위치를 추측하는 방법입니다.

R-CNN에서는 Selective Search라는 알고리즘을 이용하여 Region Proposal을 진행합니다.

 

Selective Search

    1. 아래의 4가지를 고려하여 초기 후보 영역을 다양한 크기와 비율로 생성합니다.

       - Color: 이미지의 색깔

       - Texture: 주변 픽셀값들의 변화량

       - Size: Region들의 사이즈

       - Fill: Bounding Box의 크기

 

    2. 그리디 알고리즘을 통해 비슷한 영역을 반복적으로 통합합니다.

       - 처음에 모든 영역에 대해 유사도를 계산하여 similarity set S를 생성합니다.

       - S에서 가장 큰 유사도값을 가진 영역 ri, rj에 대해 통합합니다.

       - ri, rj의 유사도 값은 S로부터 제거합니다.

       - 통합된 새로운 영역(rt)과 인접한 영역들(its neighbours)에 대해 유사도(St)를 계산합니다.

       - S와 R에 유사도(St)와 통합된 새로운 영역(rt)을 추가합니다.

 


Bounding Box Regression

Selective Search로 찾은 Box 위치는 정확하지 않기 때문에 Bounding Box Regression이 필요합니다.

즉, Predicted Box와 Ground Truth Box와의 차이를 줄여주는 Linear Regression Model입니다.

 

R-CNN의 학습하는 부분

       1. 이미지 넷으로 이미 학습된 모델을 가져와 fine tuning 하는 부분

       2. SVM Classifier를 학습시키는 부분

       3. Bounding Box Regression

 

 

 

 

 

참고:

 - https://nuggy875.tistory.com/21
 - Bounding Box Regression:

                1. https://towardsdatascience.com/bounding-box-prediction-from-scratch-using-pytorch-a8525da51ddc

                2. https://yeomko.tistory.com/13

 

- 코드 구현:

                1. https://wolfy.tistory.com/250

                2. https://herbwood.tistory.com/6

+ Recent posts