본문 바로가기
논문 리뷰/Object Detection

[논문 리뷰] R-CNN (2014) 설명

by inhovation97 2022. 11. 2.

위 계보대로 Obj Detection 모델들의 논문을 리뷰해볼까 합니다. 

Yolo시리즈부터는 조금 자세히 쓰고 그 이전 모델들은 너무 옛날이라 작동방식 정도만 리뷰합니다.

처음부터 공부하시는 분들은 가장 많이 쓰는 최신모델 Yolo만 공부하지 왜 다 읽나? 싶을 수 있는데

우선 저는 그냥 위 순서대로 공부했고, 아마 백그라운드 없이 최신 YoLo부터 보시면 이게뭐야~ 하면서 탑다운으로 쭉 내려와 2-stage detection모델부터 볼 확률이 높습니다 ㅎㅎ..

특히 YoLov4 논문은...

 

2-stage detection모델인 R-CNN(2014)부터 리뷰합니다. 

1. 1-stage detectior & 2-stage detectior
2. Abstract

3. R-CNN 구조 & 동작 원리
4. 문제점

 

 

 

1. 1-stage detectior & 2-stage detectior

 

위 사진을 보면 1-stage detector와 2-stage detector로 갈래가 나뉘는 것을 볼 수 있습니다. 

Object Detection모델은 말 그대로 객체를 탐지하는 모델입니다. 따라서 알고리즘 내부에 2가지를 목표로 모델이 학습을 해나가는데, 

 

1. 영상 내 객체 위치 탐지

입력된 영상 내에서 관심있는 객체의 위치에 대해 Bounding Box를 생성합니다. 이를 Resion Proposal이라고 합니다.

 

2. Bounding Box 내 객체 Class 분류

영상 내 객체가 있을 확률이 높은 Bounding Box를 얻었다면, 해당 box 내의 객체를 식별합니다.

 

위 두 가지를 목표로 Obj Detection모델이 학습을 해 나가며, 2-stage detection모델은 Resion Proposal을 진행한 뒤 해당 box에 대한 Class를 분류합니다.

1-stage detection모델은 두 과정을 한번에 진행합니다.

따라서 1-stage detection모델이 2-stage detection모델에 비해 속도측면에서는 훨씬 빠르지만, 정확도는 떨어지는 trade-off의 관계가 있습니다. ( 현재까지 나온 최신 모델들의 비교로는 모르겠음. )

 

2-stage detection모델인 R-CNN을 살펴봅니다. 

 

 

 

2. Abstract

 

당시까지 개발된 obj detection모델들은 매우 복잡한 구조였으며, Hog같은 고전적인 모델이었습니다. 해당 논문에서는 훨씬 심플한 구조이면서 VOC2012 데이터 셋에서 mAP 30%이상 향상시킨 모델을 제시합니다. 

제시하는 모델은 객체를 탐지하기위해 region proposal한 영역에 ConvNet을 적용합니다. 이때 ConvNet을 쓰기때문에 finetuning이 되는 장점이 있습니다. 

proposal된 영역에 대해 CNN을 이용하기 때문에 R-CNN : Resions with CNNfeatures라고 저자들이 이름을 붙였습니다. 

 

 

3. R-CNN 구조 & 동작 원리

 

우선 그림을 보면서 알고리즘 학습 과정을 순서대로 봅니다. 

Selective Search, CNN, SVM 총 3개의 알고리즘이 쓰입니다.

(Selective Search까지 깊이 알 필요는 없을 것 같아서 적당히 보고 넘어가며,

당시에는 FC layers대신 SVM을 많이 이용했음.)

 

test time에서는 NMS(Non Maximum Suppression)를 이용하여, 최종 예측한 bounding box를 제안합니다. 

(NMS는 따로 포스팅할 예정)

*RoI, b-box, bounding box 전부 같은 의미로 봅니다.

 

1. Selective Search라는 알고리즘으로 2,000개의 RoI(Resion of Interest)후보군을 생성합니다.

2. 생성된 RoI에 대해(crop된 이미지) 전부 해상도나 비율에 관계없이 224x224로 리사이징 합니다. 

3. 고정된 사이즈의 2,000개 RoI 이미지가 전부 CNN을 통과합니다.

4. CNN을 통과한 feature(이때 모든 feature는 4096으로 사이즈가 같음)를 각각 SVM에 넣어 이미지 클래스를 분류하고, RoI 좌표는 회귀를 진행합니다. 

 

 

 

Trainig time

학습부터 어떻게 되는지 시퀀스대로 봅니다. 

예측 모델이 SVM과 Regressor 2개라고 생가하면 편합니다.

각각의 알고리즘을 설명하고, 학습 조건을 설명합니다.

 

Selective Search

https://www.geeksforgeeks.org/selective-search-for-object-detection-r-cnn/

가장 먼저 위 이미지에서 빨간 부분만 보면, Selective Search가 유사한 픽셀끼리 그룹화하여 2,000개의 바운딩 박스를 생성해냅니다. 

이때 Selective Search는 Test time에서도 2,000개를 생성해내기 때문에 학습 대상이 아닙니다.

 

 

CNN for feature extractor

앞서 생성한 2,000개의 크롭한 이미지를 전부 224*224 고정사이즈로 만들어 CNN 아키텍쳐에 입력합니다. 

이때 쓰인 CNN 모델은 사전학습된 Alex Net으로 4096 사이즈의 1차원 벡터로 feature를 인코딩합니다. 

(논문 내에 AlexNet의 어떤 layer에서 뽑는지 실험한 table도 있음.)

 

해당 모델은 end-to-end가 아니라서 이렇게 인코딩한 벡터를 전부 따로 저장해야합니다. 

따라서 CNN모델이 그냥 feature extractor역할만 하며, 나중에 CNN모델을 Positive로 나온 이미지들로 finetuning을 할 수도 있습니다. 

 

 

SVM

이 당시 논문들을 좀 보면, 여러개의 FC Layer를 쌓기보다는 SVM을 많이 이용하더군요. 

자신의 데이터셋에 맞는 Class 개수에 맞게 SVM을 학습시킵니다. 

이때 Back ground 클래스를 하나 더 추가시켜 배경인지 객체인지도 학습합니다.

 

 

Linear Regression

저도 이건 처음에 이해가 잘 안 됐는데, Selective Search로 생성해내고 최종 선택한 bounding box가 label인bounding box와 정확히 일치하는 일은 거의 없을 겁니다. 따라서 최종 선택한 b-box를 좀 더 정확하게 수정해주는 역할을 해줄겁니다. 논문 내에서도 mislocalizations을 확실히 줄여주었다고 합니다.

(CNN으로부터 나온 feature를 intput으로 쓰기때문에 객체의 위치 정보가 포함될 수 있음. 따라서 input의 좌표도 class 개수만큼 들어감.)

 

SVM에서 Positive로 예측한 b-box에 대해서 학습을 진행합니다.

간단히 설명하면, label의 b-box의 좌표와 너비,높이인 x, y, w, h를 0, 0, 0, 0으로 두어 예측한 bounding box의 좌표를 이와 비교하여 오차를 줄이는 방식으로 학습해나갑니다. 

이는 YoLo에서 좀 더 자세히 다룹니다.

 

 

학습조건

https://www.researchgate.net/figure/Intersection-over-Union-IOU-calculation-diagram_fig2_335876570

평가 지표는 IoU( Iintersection of Unioun )를 이용합니다. 간단합니다!

IoU는 label의 b-box와 예측한 b-box의 합집합을 분모로하고, 교집합을 분자로합니다. 

 

train time에서 IOU를 기준으로 라벨 b-box와 0.5이상인 제안된 b-box를 Positive class로 두고, 0.5이하인 b-box는 Back groundclass로 두어 Positive 이미지에 대해서 CNN을 추가학습시킵니다.

 

SVM은 오직 label의 b-box를 Positive class로 하여 feature들을 학습시키고, Negative는 IoU가 0.3이하인 b-box를 학습시킵니다. 

 

 

Testing time

Test도 앞서 말한 순서대로 진행되는데, 

SVM이 2,000개의 b-box에 대해 분류하면 Positive b-box들은 같은 객체에 대해서도 조금씩 다른 위치와 크기로 수십 혹은 수백 개일 겁니다. 여기서 최종적으로 1객체에 대해서는 1개의 b-box만 제안 해야합니다. 

이때 NMS(Non Maximum Suppression)라는 알고리즘이 1개의 객체에 대해 1개만을 추려줍니다.

최종적으로 선택된 b-box는 b-box regression으로 박스의 크기나 위치를 최종적으로 수정하여 예측을 완료합니다. 

 

NMS(Non Maximum Suppression)

NMS(Non Maximum Suppression)는 최종적으로 1객체에 대해 1개의 b-box만을 제안하기 위해 IoU가 가장 높은 b-box 1개만을 제안하는 알고리즘입니다. 

NMS 관련해서는 YoLo 논문 포스팅 전에 YoLo task에 맞는 NMS를 따로 포스팅하려 합니다.

 

 

4. 문제점

 

1. 1개의 이미지에 대해 2,000개나 crop 하여 CNN을 통과하기 때문에 시간이 너무 오래 걸린다.

2. end to end가 아니라서 feature들을 저장하여 알고리즘들을 각각 따로 학습시켜야 한다. 

3. 각각 학습을 하기 때문에 CNN 알고리즘도 svm과 regressor의 결과와 독립적으로 학습되어 아쉽다.

댓글