본문 바로가기

인공지능 AI/논문리뷰 and 재구현

(논문리뷰) R-CNN 설명 및 정리

<Introduction>

컴퓨터비전에서의 문제들은 크게 다음 4가지로 분류할 수 있다. 

1. Classification

2. Object Detection

3. Image Segmentation

4. Visual relationship

 

이중에서 4. Visual relationship은 나중에 다루고 먼저 위 3개의 차이를 살펴보자.

 

1. Classification / 2. Object Detection / 3. Image segmentation

 

  • Classification : Single object에 대해서 object의 클래스를 분류하는 문제이다.
  • Classification + Localization : Single object에 대해서 object의 위치를 bounding box로 찾고 (Localization) +
    클래스를 분류하는 문제이다. (Classification)
  • Object Detection : Multiple objects에서 각각의 object에 대해 Classification + Localization을 수행하는 것이다.
  • Instance Segmentation : Object Detection과 유사하지만, 다른점은 object의 위치를
    bounding box가 아닌 실제 edge로 찾는 것이다.

Object detection에는 1-stage detector, 2-stage detector가 있다.

2-stage detector

위 그림은 2-stage detector의 동작과정이다.

Selective search, Region proposal network와 같은 알고리즘을 및 네트워크를 통해 object가 있을만한 영역을

우선 뽑아낸다. 이 영역을 RoI(Region of Interest)라고 한다. 이런 영역들을 우선 뽑아내고 나면

각 영역들을 convolution network를 통해 classification, box regression(localization)을 수행한다.

 

1-stage detector

1-stage는 2-stage와 다르게 RoI영역을 먼저 추출하지 않고 전체 image에 대해서 convolution network로

classification, box regression(localization)을 수행한다.

당연히 특정 object 하나만 담고있는 RoI에서 classification, localization을 수행하는 것보다 

여러 noise 즉, 여러 object가 섞여있는 전체 image에서 이를 수행하는게 더 정확도는 떨어진다.

그러나 간단하고 쉬운만큼 속도가 빠르다는 장점이 있다.

 

 

이 글에서는 Object Detection에서 2-stage Detector 중 대표적인 R-CNN, Fast R-CNN, Faster R-CNN중에
먼저 R-CNN계열의 시초이자 근본인 R-CNN에대해 다룬다.

(2-stage detector에 대한 개념은 아래 글에서 확인할 수 있다.)

[딥러닝] 1-Stage detector와 2-Stage detector란?

 

[딥러닝] 1-Stage detector와 2-Stage detector란?

직선을 기준으로 위가 2-Stage Detector들이고 아래가 1-Stage Detector들이다. <2-Stage Detector> Regional Proposal과 Classification이 순차적으로 이루어진다. Regional Proposal 이란? 기존에는 이미지에서..

ganghee-lee.tistory.com


<R-CNN>

 

R-CNN은 Image classification을 수행하는 CNN과 localization을 위한 regional proposal알고리즘을 연결한 모델이다.

R-CNN의 수행 과정은 다음과 같다.

 

"R-CNN 프로세스"

1. Image를 입력받는다.

2. Selective search알고리즘에 의해 regional proposal output 약 2000개를 추출한다.

추출한 regional proposal output을 모두 동일 input size로 만들어주기 위해 warp해준다.

(*왜 동일 input size로 만들어줄까? : 사실 Convolution Layer에는 input size가 고정이지 않다.

그러나 마지막 FC layer에서의 input size는 고정이므로 Convolution Layer에 대한 output size도 동일해야한다.

따라서 Convolution Layer에 입력에서부터 동일한 input size로 넣어주어서 output size를 동일하게 하는 것이다.)

3. 2000개의 warped image를 각각 CNN 모델에 넣는다.

4. 각각의 Convolution 결과에 대해 classification을 진행하여 결과를 얻는다.

"R-CNN 프로세스"

 

위의 과정을 수행하기 위해 R-CNN은 세 가지 모듈로 나누어 놓았다.

 

  • 1. Region Proposal : "Object가 있을법한 영역"을 찾는 모듈 (기존의 Sliding window방식의 비효율성 극복)

  • 2. CNN : 각각의 영역으로부터 고정된 크기의 Feature Vector를 뽑아낸다.
    (고정된 크기의 output을 얻기위해 warp 작업을 통해 크기를 찌그러뜨려서 동일 input size로 만들고 CNN에 넣는다.)

  • 3. SVM : Classification을 위한 선형 지도학습 모델 
    (* 왜 Classifier로 Softmax를 쓰지 않고 SVM을 사용했을까? : CNN fine-tuning을 위한 학습 데이터가 시기상 많지 않아서 Softmax를 적용시키면 오히려 성능이 낮아져서 SVM을 사용했다.)

위 세 가지 구조를 차례대로 파악해보자.


<1. Region Proposal (영역 찾기)>

R-CNN 구조 (1. Region Proposal)

R-CNN에서는 가장 먼저 Region Proposal 단계에서 "물체가 있을 법한 영역"을 찾는다.

이는 위에서 말했듯이 기존의 Sliding window방식의 비효율성을 극복하기 위한 것이다.

먼저 기존의 Sliding window가 무엇인지 살펴보자.

 

Sliding window

Sliding window방식은 이미지에서 물체를 찾기 위해 window의 (크기, 비율)을 임의로 마구 바꿔가면서
모든 영역에 대해서 탐색하는 것이다.

<Sliding Window> 좌 : 모든 영역에 대해 탐색 / 우 : 크기와 비율을 변형

이렇게 임의의 (크기, 비율)로 모든 영역을 탐색하는 것은 너무 느리다.

따라서 R-CNN에서는 이 비효율성을 극복하기 위해 Selective search 알고리즘을 사용한다.

 

Selective search

Selective Search

1. 색상, 질감, 영역크기 등.. 을 이용해 non-object-based segmentation을 수행한다.

이 작업을 통해 좌측 제일 하단 그림과 같이 많은 small segmented areas들을 얻을 수 있다.

2. Bottom-up 방식으로 small segmented areas들을 합쳐서 더 큰 segmented areas들을 만든다.

3. (2)작업을 반복하여 최종적으로 2000개의 region proposal을 생성한다.

 

Selective search알고리즘에 의해 2000개의 region proposal이 생성되면 이들을 모두 CNN에 넣기 전에
같은 사이즈로 warp시켜야한다. (CNN output 사이즈를 동일하게 만들기 위해 - For FC layer)


<2. CNN>

 

R-CNN 구조 (2. CNN)

Warp작업을 통해 region proposal 모두 224x224 크기로 되면 CNN 모델에 넣는다.

여기서 CNN은 AlexNet의 거의 구조를 그대로 가져다 썼다.

최종적으로 CNN을 거쳐 각각의 region proposal로부터 4096-dimentional feature vector를 뽑아내고,

이를 통해 고정길이의 Feature Vector를 만들어낸다.


<3. SVM>

 

R-CNN 구조 (3. SVM)

CNN모델로부터 feature가 추출되면 Linear SVM을 통해 classification을 진행한다.

위에서 설명했듯이 Classifier로 softmax보다 SVM이 더 좋은 성능을 보였기 때문에 SVM을 채택했다.

SVM은 CNN으로부터 추출된 각각의 feature vector들의 점수를 class별로 매기고, 객체인지 아닌지,
객체라면 어떤 객체인지 등을 판별하는 역할을 하는 Classifier이다.

 


<3-1. Bounding Box Regression>

R-CNN 구조 (3-1. Bounding Box Regression)

Selective search로 만든 bounding box는 정확하지 않기 때문에 물체를 정확히 감싸도록 조정해주는

bounding box regression(선형회귀 모델)이 존재한다.

boundingn box regression 수식


<요약>

R-CNN의 과정은 다음과 같다.

1. R-CNN은 selective search를 통해 region proposal을 먼저 뽑아낸 후 CNN 모델에 들어간다.

2. CNN모델에 들어가 feature vector를 뽑고 각각의 class마다 SVM로 classification을 수행한다.

3. localization error를 줄이기 위해 CNN feature를 이용하여 bounding box regression model을 수정한다.

 

단점

1. 여기서 selective search로 2000개의 region proposal을 뽑고 각 영역마다 CNN을 수행하기 때문에

CNN연산 * 2000 만큼의 시간이 걸려 수행시간이 매우 느리다. 

 

2. CNN, SVM, Bounding Box Regression 총 세가지의 모델이 multi-stage pipelines으로 한 번에 학습되지 않는다.

각 region proposal 에 대해 ConvNet forward pass를 실행할때 연산을 공유하지 않기에
end-to-end 로 학습할 수 없다.

R-CNN에서의 학습과정 (출처 : https://blog.lunit.io/2017/06/01/r-cnns-tutorial/)

따라서 SVM, bounding box regression에서 학습한 결과가 CNN을 업데이트 시키지 못한다.

 

"그리고 이 두가지 문제를 RoI pooling으로 해결한 Fast R-CNN이 나오게 된다."

 

다음글 : (논문리뷰) Fast R-CNN 설명 및 정리

 

Fast R-CNN 설명 및 정리

이전글 : Object Detection, R-CNN 설명 및 정리 Object Detection, R-CNN 설명 및 정리 컴퓨터비전에서의 문제들은 크게 다음 4가지로 분류할 수 있다. 1. Classification 2. Object Detection 3. Image Segmenta..

ganghee-lee.tistory.com