object detection을 위한 R-CNN과 Fast R-CNN의 원리

1. R-CNN motivation

 

2012 AlexNet이 image classification에서 큰 성공을 거두면서 이것을 바로 object detection에 응용해보았다

 

AlexNet처럼 object detection의 전통적인 방법에 비해 압도적인 성능차이를 보이면서 혜성같이 등장

 

2. R-CNN 구조

 

먼저 주어진 이미지에서 selective search법으로 물체 후보 bounding box인 region proposal을 2000개 정도 구함

 

각 region proposal을 모두 잘라 patch로 만든다.

 

pre-train한 CNN에 region proposal patch를 넣는다

 

CNN의 마지막 단은 fully connected layer인 SVM classifier를 붙여서

 

CNN을 통과하고 나온 feature map을 이용하여 bounding box의 classification을 함

 

ground truth와의 loss가 최소가 되도록 SVM을 학습시킨다

 

R-CNN의 기본구조

 

3. R-CNN에서 주목할 점

 

pre-train CNN에 마지막 단인 classifier만 학습시키는  fine-tuning 구조

 

region proposal을 자르고 마지막 단에서 fully connected layer를 사용하므로 기본적으로 patch size는 모두 동일해야한다

 

pre-train CNN은 AlexNet을 사용했는데 input size가 224*224여서 patch size도 224*224

 

 

4. R-CNN 한계점

 

1개의 이미지 내에서 region proposal을 2000개나 구하는 과정이 오래 걸린다

 

selective search를 사용한 region proposal은 학습이 불가능한 최적 알고리즘이 아니라 전체적인 성능 향상에 한계가 있음

 

2000개의 region proposal 각각을 CNN에 넣으므로 2000번이나 하나의 CNN을 돌려야한다는 점에서 너무 오래걸린다

 

 

5. Fast R-CNN motivation

 

R-CNN에서 2000개의 region proposal을 각각 넣어서 구별하는, 즉 2000번이나 모델을 돌려야하는 문제점을 개선하고자 했다.

 

CNN에 고정된 이미지 크기를 넣었지만 사실 CNN의 input은 고정된 크기일 필요가 없는데 마지막 fully connected layer때문에 그렇게 했다는 것도 문제다.

 

이미지 전체의 feature map을 한번 추출하여 이후 detection에 계속해서 재활용했다

 

 

6. Fast R-CNN 구조

 

selective search를 이용해 이미지 내 region proposal을 먼저 구한다

 

region proposal이 미리 그려진 전체 이미지를 CNN에 넣어 feature map을 추출

 

region proposal 영역을 feature map에 그대로 projection 시킨다. 그러니까 feature map에 bounding box의 위치를 표시하겠다 이거다.

 

feature map에 그려진 bounding box는 모두 서로 다른 크기로 그려져있을 것

 

ROI pooling을 통해서 서로 다른 크기의 bounding box 이미지를 max pooling을 통해 모두 동일한 크기의 feature map으로 바꿔준다

 

fully connected layer를 두번 통과시키면서 고정된 크기의 feature vector를 얻는다

 

이제 2개의 branch인 object softmax classification branch와 정밀한 bounding box위치를 찾기 위한 bounding box regression branch로 나뉜다.

 

 

for each roi >>> 여러개 ROI 각각에 대해 feature vector가 나오는듯?

 

이상한 생각하지말고 리스트로 저장해서 하면 되니까 한번에 가능하잖아

 

 

7. Fast R-CNN 주목할 점

 

2000번의 CNN을 돌렸던 R-CNN에 비해 단 1번만 CNN을 돌려서 전체 feature map을 뽑는다

 

모형 1번만 딱 돌리면 각각 ROI의 classification이랑 box regression이 가능하다는 것

 

input size가 고정되었던 R-CNN과는 달리 CNN을 통과시키고 ROI pooling으로 서로 다른 크기의 region을 고정된 크기의 feature로 모두 바꾸어서 이제는 input size가 달라도 된다

 

이것만 했더니 기존 R-CNN보다 18배 이상 빨랐다

 

 

R-CNN에서는 미리 학습한 CNN을 사용했지만 이번에는 모든 구조가 학습이 가능하다는 end-to-end 구조로 이루어져있다(성능 향상에 좋음)

 

하지만 selective search로 region proposal을 사전에 미리 여러개 구해야한다는 점이 여전히 시간이 오래걸리는 문제다.

 

TAGS.

Comments