본문 바로가기
개발/🦾 머신러닝, 딥러닝

[Basics] Object Detection이란? - 2Stage 모델

by 썸머뮤트 2024. 10. 29.

Object Detection이란?

Object detection이란 컴퓨터 비전 task 중에서도 여러 객체에 대해 classification localization을 모두 수행하는 task로, 이미지에 등장하는 객체들의 위치와 클래스를 알아내는 작업입니다.

 

Object Detection

2-Stage vs 1-Stage

Object detection 모델들은 크게 2-stage 기반과 1-stage 기반의 방법으로 분류할 수 있습니다.

 

2-stage 기반의 방법들은 객체가 있을만한 후보 영역을 먼저 추려내고(localization), 해당 영역에 있는 객체의 종류가 무엇인지 알아내는(classification) 순차적인 방법으로 object detection을 수행합니다.

반면 1-stage 기반의 방법들은 2-stage 방법이 느리다는 단점을 해결하기 위해 등장한 방법으로, localization과 classification을 한 번에 수행한다는 특징이 있습니다.

 

대표적인 2-stage 방법으로는 R-CNN 계열의 모델들이 있고, 1-stage 방법으로는 yolo와 DETR 계열의 모델들이 있습니다.

이번 포스트에서는 2-stage 방법을 좀 더 자세히 살펴보도록 하겠습니다.

 

2-Stage 기반 방법

2-stage 기반의 방법들은 localization과 classification을 순차적으로 수행합니다.

대표적인 모델로는 R-CNN, Fast R-CNN, Faster R-CNN 등이 있습니다.

 

R-CNN:  Rich feature hierarchies for accurate object detection and semantic segmentation

R-CNN은 다음과 같은 순서로 object detection을 수행합니다.

  1. Selective search로 물체가 있을만한 후보 패치(RoI-Region of Interest) 검출
  2. 모든 패치를 크롭하고 와핑하여 패치의 CNN feature를 각각추출
  3. 추출한 feature를 사용하여 SVM으로 영역의 class 분류
  4. [optional] 추출한 feature를 사용하여 좀 더 정확한 바운딩 박스 좌표 예측(box regression)

R-CNN의 구조

Selective search

후보 패치 검출에 사용되는 selective search는 휴리스틱 알고리즘으로, 먼저 이미지에 대해서 segmentation을 수행하고

같은 객체라고 생각되는 segment들을 점진적으로 합쳐 object 가 있을만한 영역을 찾아내는 알고리즘입니다.

Selective search

 

R-CNN은 CNN feature를 사용하여 이전 모델들에 비해 우수한 object detection 성능을 보여줬으나,

GPU가 아닌 CPU에서 동작하는 selective search를 사용할 뿐만 아니라, 이를 통해 찾아낸 후보 패치를 하나하나 크롭하고 와핑해서 CNN에 통과시켜 feature를 추출하기 때문에 연산량이 굉장히 많아지고, 추론 속도가 느리다는 단점이 있습니다.

 

Fast R-CNN은 R-CNN의 느린 추론 속도와 많은 연산량 문제를 보완하기 위해 제안되었습니다.

 

Fast R-CNN

Fast R-CNN은 아래와 같은 방법을 통해 object detection을 수행합니다.

  1. Selective search로 물체가 있을만한 후보 패치(RoI) 검출
  2. 이미지 전체의 CNN feature를 추출한 뒤, 후보 패치 영역에 해당하는 feature의 RoI pooling
  3. RoI pooling 된 feature에 대해 FC 레이어를 사용해 해당 RoI의 클래스와 정확한 박스 좌표를 예측(box regression)

 

RoI Pooling

Fast R-CNN의 핵심은 RoI pooling으로, 후보 패치 영역에 해당하는 이미지 feature를 정해진 크기의 그리드로 나눈 뒤, 해당 그리드 영역 내 feature의 최댓값만을 가져와 고정된 크기의 feature를 만드는 연산입니다.

RoI Pooling

Fast R-CNN은 이렇게 만들어진 고정된 크기의 feature를 FC 레이어의 입력으로 사용해서 classification과 박스 위치 regression을 수행합니다.

 

Fast R-CNN은 이미지의 feature를 한 번에 추출하기 때문에 R-CNN보다 속도가 빠르지만, 여전히 CPU에서 연산하는 selective search를 사용하고 있기 때문에 end-to-end 학습이 불가능하고 속도가 느리다는 단점이 존재합니다.

Faster R-CNN은 이런 selective search의 역할을 학습가능한 네트워크로 대체하는 방법을 제안합니다.

 

Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

Fast R-CNN은 아래와 같은 방법을 통해 object detection을 수행합니다.

  1. RPN(Region Proposal Networks)으로 후보 패치 영역 검출
  2. 이미지 전체의 CNN feature에서 후보 패치 영역에 해당하는 feature RoI pooling
  3. ROI pooling 된 feature에 대해 FC 레이어를 사용해 해당 RoI의 클래스 예측

 

RPN

Faster R-CNN과 기존 모델들의 가장 큰 차이점은 selective search를 RPN으로 대체했다는 것입니다.

 

RPN

RPN은 앵커 박스 슬라이딩 윈도우를 활용해서 물체가 있을 만한 후보 패치를 찾아냅니다.

먼저 다양한 가로 세로 비율을 가지고 있는 $k$개의 앵커박스를 미리 정해두고, feature 맵 전체를 슬라이딩 윈도우 형식으로 탐색하면서 해당 윈도우 영역에 앵커박스와 유사한 크기 및 가로 세로 비율의 객체가 있는지 여부와 함께 좀 더 정확한 물체의 위치를 예측(box regression) 합니다.

해당 방식으로 후보 패치를 찾아낼 경우 하나의 윈도우에 최대 $k$개의 후보 패치를 제안할 수 있습니다.

 

후처리 - NMS

이와 같은 방법으로 후보 패치를 찾아내고 나면, 많게는 수천개의 후보 패치가 제안되게 됩니다.

Faster R-CNN에서는 후보 패치의 수를 줄이기 위해 NMS(non-maximum suppression)라는 후처리 방법을 제안합니다.

 

먼저 Faster R-CNN에서는 후보 패치 중 confidence score가 일정 값 이상 되지 않는 후보 패치들은 사용하지 않았다고 합니다.

confidence score는 네트워크가 예상한 후보 패치에 객체가 존재할 확률로,

일반적으로는 classification에 사용되는 logit의 max 값을 의미합니다.

 

이후 남은 후보 패치들을 모두 confidence score 순으로 정렬하여 가장 높은 confidence를 가지는 후보패치 부터 기준으로 삼아 IoU가 일정 수준 이하인 패치들은 후보 패치에서 제외합니다.

이 때 IoU는 두 박스가 얼마나 겹치는가를 평가하는 지표로,  아래 더 자세한 설명이 있습니다.

이렇게 NMS 과정을 거치면 영역이 많이 겹치는 후보 패치들 중에 가장 confidence score가 높은 후보만 남게 됩니다.

NMS는 보다 빠른 학습을 위해 후처리 과정 뿐만 아니라 학습 과정에서도 사용될 수 있습니다.

 

이와 같이 가장 유명한 2-stage 기반의 R-CNN 계열 모델들을 알아보았습니다!