R-CNN

detectron2를 이용한 코드를 보고 분석하는 과정에서 detectron2가 mask RCNN 기법을 사용했기에 기본이 되는 object detection부터 r-cnn까지 개념 정리를 해보았습니다~

object Detection


Object Detection : Multiple objects에서 각각의 Single object에 대해 object의 위치를 bounding box로 찾고(Localization) 클래스를 분류하는 문제이다. (Classification)

  • Instance Segmentation
    Object Detection과 유사하지만, 다른점은 object의 위치를 bounding box가 아닌 실제 edge로 찾는 것이다.

Object Detection 방법

  • 2-stage detector
  1. Selective search, Region proposal network와 같은 알고리즘을 및 네트워크를 통해 object가 있을만한 영역을 우선 뽑아낸다. 이 영역을 “RoI(Region of Interest)” 라고 한다.
  2. 각 영역들을 convolution network를 통해 classification, box regression(localization)을 수행한다.
    기법 예시) R-CNN, Fast R-CNN, Faster R-CNN

  • 1-stage detector : RoI 추출하지 않고 전체 image에 대해 CNN으로 Classification, box regression(localization)을 수행한다.




R-CNN(regions with CNN)

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

  • Region Proposal : "Object가 있을법한 영역"을 찾는 모듈. 기존의 Sliding window방식의 비효율성을 극복하기 위한 것이다.

    Sliding window 방식 : 이미지에서 물체를 찾기 위해 window의 (크기, 비율)을 임의로 마구 바꿔가면서 모든 영역에 대해서 탐색하는 것이다. -> 시간이 너무 오래 걸린다.

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을 진행하여 결과를 얻는다.

위 과정 진행하기 위해 세가지 모듈을 설정한다.



세가지 모듈 순서

  • 순서는 사진의 밑에서부터 올라간다.
  1. Region Proposal : "Object가 있을법한 영역"을 찾는 모듈 (기존의 Sliding window방식의 비효율성 극복)
    Region Proposal (영역찾기) 위해 “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시킨다.

  1. CNN : 각각의 영역으로부터 고정된 크기의 Feature Vector를 뽑아낸다.
    고정된 크기의 output을 얻기위해 warp 작업을 통해 크기를 찌그러뜨려서 동일 input size로 만들고 CNN에 넣는다.
    Wrap 작업 끝난 region proposal을 CNN 모델에 넣는다. 최종적으로 CNN을 거쳐 region proposal로부터 각각의 feature vector를 뽑아내고 고정길이의 Feature Vector를 만들어낸다.

  2. 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의 과정은 다음과 같다.

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

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

  3. localization error를 줄이기 위해 CNN feature를 이용하여 Bbox reg 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 로 학습할 수 없다.


    즉, bounding box regression은 CNN을 거치기 전의 region proposal 데이터가 input으로 들어가고 SVM은 CNN을 거친 후의 feature map이 input으로 들어가기에 연산이 겹치지 않는다.
    R-CNN에서는 CNN을 통과한 후 각각 서로다른 모델인 SVM(classification), bounding box regression(localization) 안으로 들어가 forward됐기 때문에 연산이 공유되지 않았다.

“이 두가지 문제를 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

좋은 웹페이지 즐겨찾기