본문 바로가기
AI & CS 지식/인공지능 Q&A

[AI Q&A] R-CNN 계열 모델 정리하기

by rahites 2024. 12. 26.

Object Detection을 공부하다 보면 가장 먼저 배우는 모델이 바로 R-CNN이다. 처음 이 모델에 대해 접했던 건 학부 3학년 정도로 핵심적인 개념과 대충 이렇구나~ 정도만 외워 넘어간 것 같은데, 지금 다시 강의를 들으며 공부해보니 내가 잘 알지 못했던 부분이 많아  나중에 또 까먹을 것이 뻔하기에 이렇게 정리해두려 한다.

 

R-CNN 계열의 모델 디자인이 당연히 추후 개량되어 등장하였겠지만, 여기서는 가장 대표적인 R-CNN, Fast R-CNN, Faster R-CNN에 대해 정리하려 한다. 글의 흐름은 내가 이 세가지 모델을 이해한 지식의 흐름에 따랐다.


우선 본격적으로 R-CNN 모델에 대해 이해하기 전, 우리는 딥러닝에서 어떻게 Object Detection이라는 Task가 이루어질 수 있는지 생각해보아야 한다.

 

일반적으로 처음 딥러닝을 공부할 때 우리는 Classification 또는 Regression Task를 해결하는 방법에 대해 배운다. Classification Task에서는 내가 찾고자하는 클래스의 수만큼의 노드를 마지막에 가질 것이고 Regression의 경우에는 예측해하 하는 값의 개수만큼의 노드를 가질 것이다. 즉, 딥러닝 모델은 예측해야하는 것의 개수만큼을 마지막 노드로 가진다.

 

그렇다면 Object Detection에서 우리가 예측해야하는 것은 무엇일까? 이 Task에 대해 한번이라도 들어봤다면, 우리는 Object Detection이 특정 객체의 Bounding Box와 그 객체의 Class Label을 예측하는 Task라는 것을 알고있다. 이 때 만약 내가 알고싶은 Class가 10개이고, Bounding Box는 일반적으로 4개(xyxy, xywh ..)이니 우리는 총 14개의 값을 예측하고 싶은 것이라고 말할 수 있다. 그럼 우리는 Class에 대한 10개의 노드, Bounding Box에 대한 4개의 노드를 마지막 layer에 위치하도록 구성하여 Object Detection을 수행할 수 있을 것이다.

 

물론 해당 노드들에 대해서는 일반적으로 다른 Loss(Class에는 Softmax, Box에는 L2)를 사용하거나, 두 갈래로 갈라지는 구조로 모델을 설계하지만, 이는 위의 개념을 알고 나서 왜 그렇게 발전하였는지 생각하는 것이 더 이해가 잘 된다고 생각한다(처음에는 일반적인 Classification Task처럼 구성하였다가 성능이 안나오니, 목표가 다른 두 가지 노드를 분리하여 계산하는 것이 당연히도 성능이 높아진다는 등..)

 

R-CNN(Regions with Convolutional Neural Networks Features)

출처: CS231n Slide

자, 그럼 R-CNN 모델에 대해 알아보자.

 

R-CNN 모델은 Image를 입력으로 받는다. 그리고는 Selective Search를 써서 내가 주목하고 싶은 Regions of Interest(RoI)를 찾는다. 여기서 Selective Search는 Segmentation을 이용하여 객체가 있을 법한 영역을 찾아내는 알고리즘으로, 이렇게 이미지 내에서 객체가 있을 가능성이 높은 영역을 찾는 과정을 Region Proposal이라고 한다.

 

R-CNN에서 사용한 Region Proposal 기법인 Selective Search는 다음과 같이 기능한다.

(1) 이미지를 작은 영역으로 분할하고

(2) 인접한 영역들과의 유사도를 계산하여

(3) 유사도가 높은 영역끼리 합쳐가며 최종적으로 주목할만한 영역을 추천한다.

사실 처음 Selective Search에 관련된 내용을 공부할 때는 그런가보다하고 넘어갔었는데, 디테일하게는 아니더라도 조금이나마 아는 것이 Object Detection을 이해하는데에 도움이 되는 것 같다.

 

Selective Search 알고리즘 참고

https://blog.naver.com/laonple/220925179894

 

[Part Ⅶ. Semantic Segmentation] 2. Selective Search [2] - 라온피플 머신러닝 아카데미 -

     Part I. Machine Learning  Part V. Best CNN Architecture  P...

blog.naver.com

 

Selective Search를 통해 우리가 주목해야할 RoI들을 찾았다면 해당 영역을 딥러닝 모델에 넣기 위해 고정된 크기를 가진 Bounding Box 형태로 변환한다. 그리고는 각 Box들을 ConvNet에 통과시키는데 이때 마지막 Layer를 Feature Vector로 사용하여 SVM(Support Vector Machine)의 입력으로 사용한다. 결국 이 SVM 모델이 Class라벨을 예측(Classification)하고, Region Proposal로 Bounding Box를 조정하여 최종 BBox를 예측한다.

 

SPPNet

https://www.robots.ox.ac.uk/~tvg/publications/talks/fast-rcnn-slides.pdf

R-CNN에서 Fast R-CNN으로 넘어가기 전 SPPNet이 있었다. 이후 등장하는 Fast R-CNN의 Motivation이 된 것으로 보이며 Bounding Box 형태로 변형하지 않고 ConvNet으로 만든 Representation에 RoI를 찾아 더 빠르게 모델을 작동할 수 있도록 만들었다. 이러한 구조는 R-CNN에서 수천 개의 Region Proposal을 CNN에 넣어 생기는 학습 속도 문제를 완화하였다.

 

SPPNet 리뷰

이전에 리뷰를 진행한 적이 있는데 지금 다시보니 창피한 수준이다. 지금의 글도 나중에는 그렇게 보이겠지

 

Fast R-CNN

기본적인 R-CNN을 이해했다면, 사실 여기서부터는 이해하기 쉽다. Fast R-CNN은 말그대로 기존 R-CNN을 더 빠르게 작동할 수 있게 만든 모델이다. 이전 R-CNN, SPPNet 모델이 가지는 구조가 Softmax Classifier, SVM, Box Regression이 모두 따로 학습하는 Ad-hoc 구조를 가진다는 단점이 있어 이를 하나의 Stage에서 이루어질 수 있도록 설계하였다.

Fast R-CNN paper

핵심적인 개념은 ConvNet으로 뽑아낸 Representation에서 Region Proposal을 추출하고, 고정된 크기의 Input size를 만들기 위해 R-CNN에서 사용했던 Warp 방법 대신 RoI Pooling을 사용했다는 것이다(Single Level SPP). 그 결과를 FC layer에 통과시켜 Class와 BBox를 예측하는 구조를 설계하였고 그 결과 전체 모델에서 Convolution Model을 한번만 통과시킬 수 있게 구성하였다.

RoI Pooling
: 각 RoI 영역에 Max Pooling을 진행하여 고정된 크기의 Feature Vector를 만듦

 

Faster R-CNN

앞서 전체 이미지에 CNN을 적용해 만든 Representation에서 RoI를 찾는 식으로 계산량을 많이 줄였지만, 그럼에도 이 Region Proposal을 찾는 과정이 CPU에서 이루어져 속도가 느리다는 단점이 존재하였다. 따라서 Region Proposal Network(RPN) 모델을 사용하여 전체 모델을 End-to-End로 학습시킬 수 있는 Faster R-CNN 모델이 제안되었다.

출처: CS231n

핵심적인 개념은 CNN을 통해 얻은 Representation에서 RoI를 찾는 방식이 딥러닝 모델을 통해 이루어진다는 것이다.

 

Region Proposal Network 모델은 다음과 같이 동작한다.

(1) 입력받은 Feature Map의 모든 픽셀에 대해 다양한 크기와 비율(Aspect Ratio)에 따른 Anchor Box를 생성한다.

(2) 각 Anchor가 객체를 포함하고 있는지(Foreground) 포함하지 않는 배경인지(Background) 분류한다.

RPN 모델에서 예측하는 Classification loss(세부적인 Class 분류x)

(3) Anchor의 위치를 조정하여 더욱 정확한 Region Proposal을 생성한다.

(4) Non-Maximum Suppression(NMS)를 수행하여 최종 Proposal을 선택한다.

 

RPN 모델을 통과하여 나온 Proposal을 가지고 RoI Pooling을 통해 고정된 크기의 Feature를 생성하고 이를 FC Layer에 통과시켜 Classification과 BBox Regression을 수행한다.

사실 RPN 모델의 연산량을 상상해보았을 때 상당히 많을 것으로 예상되는데 CPU에서 계산되는 Selective Search의 연산량이 만만찮게 큰 것으로 예상된다.

 

짧게 정리하자면

R-CNN 등장
-> 속도가 너무 느려서 CNN 모델을 입력 이미지에 적용시켜 얻은 Representation에서 RoI를 구해 예측하자(SPPNet, Fast R-CNN)
-> 그래도 느리니까 RoI 구하는 방식을 GPU에 올릴 수 있도록 딥러닝 모델로 설계하자(Faster R-CNN)

이 되겠다.


지금까지 소개한 모델들은 모두 Region Proposal을 생성하고 Classification/Regression이 진행되는 2-stage 모델이다. R-CNN과 Fast R-CNN은 Selective Search로, Faster R-CNN에서는 RPN 모델로 Region Proposal을 진행하는데 그러기에 현재로써는 속도가 많이 느린 모델로 분류된다. 이에 YOLO, SSD와 같이 빠른 속도를 가진 1-stage 모델이 등장하였고 현재 상용화에서는 이런 모델들이 강세를 보이고 있다. 이에 대한 내용도 추후 시간이 된다면 정리해 보도록 하겠다.

 

작성한 글은 제가 공부해온 내용을 바탕으로 추론한 개인적인 생각이 들어가 있습니다. 잘못 된 점이 있다면 언제든 수정하여 알려주시면 감사하겠습니다.

댓글