detectron2를 이용한 코드를 보고 분석하는 과정에서 detectron2가 mask RCNN 기법을 사용했기에 기본이 되는 object detection부터 r-cnn까지 개념 정리를 해보았습니다~
Object Detection : Multiple objects에서 각각의 Single object에 대해 object의 위치를 bounding box로 찾고(Localization) 클래스를 분류하는 문제이다. (Classification)
Image classification을 수행하는 CNN과 localization을 위한 regional proposal 알고리즘을 연결한 모델이다.
Region Proposal : "Object가 있을법한 영역"을 찾는 모듈. 기존의 Sliding window방식의 비효율성을 극복하기 위한 것이다.
Sliding window 방식 : 이미지에서 물체를 찾기 위해 window의 (크기, 비율)을 임의로 마구 바꿔가면서 모든 영역에 대해서 탐색하는 것이다. -> 시간이 너무 오래 걸린다.
Image를 입력받는다.
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를 동일하게 하는 것이다.)
2000개의 warped image를 각각 CNN 모델에 넣는다.
각각의 Convolution 결과에 대해 classification을 진행하여 결과를 얻는다.
위 과정 진행하기 위해 세가지 모듈을 설정한다.
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 : 각각의 영역으로부터 고정된 크기의 Feature Vector를 뽑아낸다.
고정된 크기의 output을 얻기위해 warp 작업을 통해 크기를 찌그러뜨려서 동일 input size로 만들고 CNN에 넣는다.
Wrap 작업 끝난 region proposal을 CNN 모델에 넣는다. 최종적으로 CNN을 거쳐 region proposal로부터 각각의 feature vector를 뽑아내고 고정길이의 Feature Vector를 만들어낸다.
SVM : Classification을 위한 선형 지도학습 모델
CNN모델로부터 feature가 추출되면 Linear SVM을 통해 classification을 진행한다.
(* 왜 Classifier로 Softmax를 쓰지 않고 SVM을 사용했을까? : CNN fine-tuning을 위한 학습 데이터가 시기상 많지 않아서 Softmax를 적용시키면 오히려 성능이 낮아져서 SVM을 사용했다.)
SVM은 CNN으로부터 추출된 각각의 feature vector들의 점수를 class별로 매기고, 객체인지 아닌지, 객체라면 어떤 객체인지 등을 판별하는 역할을 하는 Classifier이다.
*사진에서 보이는 Bbox reg(bounding box regression) : Selective search로 만든 bounding box는 정확하지 않기 때문에 물체를 정확히 감싸도록 조정해주는 bounding box regression(선형회귀 모델)이 존재한다.
R-CNN의 과정은 다음과 같다.
R-CNN은 selective search를 통해 region proposal을 먼저 뽑아낸 후 CNN 모델에 들어간다.
CNN모델에 들어가 feature vector를 뽑고 각각의 class마다 SVM로 classification을 수행한다.
localization error를 줄이기 위해 CNN feature를 이용하여 Bbox reg model을 수정한다.
“이 두가지 문제를 RoI pooling으로 해결한 Fast R-CNN이 나오게 된다.”
Fast R-CNN에서는 다음 두 가지를 통해 위 한계점들을 극복했다.
1) RoI pooling
2) CNN 특징 추출부터 classification, bounding box regression까지 하나의 모델에서 학습하기
참고
[논문] http://www.huppelen.nl/publications/selectiveSearchDraft.pdf
[블로그] https://ganghee-lee.tistory.com/35?category=863370