MLDL - (3) :FAST R-CNN 리뷰

­이승환·2022년 1월 18일
0

MLDL

목록 보기
3/5

Overview


Fast R-CNN은 이전 R-CNN의 한계점을 극복하고자 나왔다. 잠깐 복습해보자면 R-CNN의 단점은 아래와 같다.

  1. RoI (Region of Interest) 마다 CNN연산을 함으로써 속도저하
  2. multi-stage pipelines으로써 모델을 한번에 학습시키지 못함 (중요)

Fast R-CNN에서는 다음 두 가지를 통해 위 한계점들을 극복했다.

  1. RoI pooling
  2. CNN 특징 추출부터 classification, bounding box regression까지 하나의 모델에서 학습 (중요)

Fast R-CNN

  • Fast R-CNN의 순서는 다음과 같다.
  1. R-CNN에서와 마찬가지로 Selective Search를 이용해 RoI를 찾는다.
  2. 전체 이미지를 CNN에 통과시켜서 Feature Map을 추출한다.
  3. Selective Search로 찾앗었던 RoI를 Feature Map크기에 맞춰서 Projection 시킨다.
  4. Projection 시킨 RoI 에 대해서 RoI 풀링을 진행하고, 고정된 크기의 feature vector를 얻는다.
  5. feature vector는 FC layer를 통과한 뒤, 구 브랜치로 나눈다.
    6-1. softmax를 통과해서 RoI에 대해 Object Classification 을 수행한다.
    6-2. bounding box regression 을 통해서 selective seasrch로 찾은 box의 위치를 조절한다.
  • 위 과정을 통해 pipeline 단일 모델로 만들어 학습시킬 수 있다.
  • Fast R-CNN의 가장 핵심 아이디어는 RoI Pooling 이다.
  • CNN Output이 FC Layer에 들어가기 위해서는 동일한 사이즈를 맞춰줘야하는 것을 잊어서는 안된다.
  • 착각하면 안 되는 부분은 FC Layer의 Input이 고정이고, CNN 시컨스의 데이터 인풋이 동일해야하는 것이 아니다.

Spatial Pyramid Pooling (SPP)

  • 먼저 이미지를 cnn에 통과 시켜서 Feature Extraction(Map 추출)
  • 미리 정해진 4 x 4, 2 x 2, 1 x 1 영역의 피라미드로 feature map을 나눠준다.
  • 피라미드 한칸(Bin) 내에서 map pooling을 적용해서 각 bin 마다 하나의 값을 추출하고, 최종적으로 피라미드 크기만큼 max 값을 추출하여 3개의 피라미드 결과를 쭉 이어 붙이면 1 x len(pyramid pool result) 결과를 남긴다.
  • 결과 vector를 FC Layer의 Input으로 넣는다.
  • CNN을 통과한 feature map에서 2천개의 region proposal을 만들고 region proposal마다 SPPNet에 집어넣어 고정된 크기의 feature vector를 얻어낸다.
  • 이 작업을 통해 모든 2천개의 region proposal마다 해야했던 2천번의 CNN연산이 1번으로 줄었다.

RoI Pooling

  • 실제로 Fast R-CNN에서 1개의 피라미드를 적용시긴 SPP로 구성되어 있다.
  • 각 피라미드 사이즈는 7x7이다.
  • Fast R-CNN에서 적용된 1개의 피라미드 SPP로 고정된 크기의 feature vector를 만드는 과정을 RoI Pooling 이라고 한다.

  • Fast R-CNN에서 먼저 입력 이미지를 CNN에 통과시켜 feature map을 추출한다.
  • 그 후 이전에 미리 Selective search로 만들어놨던 RoI(=region proposal)을 feature map에 projection시킨다.
  • 위 그림의 가장 좌측 그림이 feature map이고 그 안에 hxw크기의 검은색 box가 투영된 RoI이다.

(1) 미리 설정한 HxW크기로 만들어주기 위해서 (h/H) * (w/H) 크기만큼 grid를 RoI위에 만든다.
(2) RoI를 grid크기로 split시킨 뒤 max pooling을 적용시켜 결국 각 grid 칸마다 하나의 값을 추출한다.

  • 원래 이미지를 CNN에 통과시킨 후 나온 feature map에 이전에 생성한 RoI를 projection시키고이 RoI를 FC layer input 크기에 맞게 고정된 크기로 변형할 수가 있다

End To End Trainable

  • R-CNN의 문제는 multi-stage pipeline을 통해 3가지 모델을 따로 학습해야 했던 문제이다.
  • R-CNN은 CNN을 통과 후, SVM, BOUNDING BOX REGRESSION 으로 바로 들어갔지만, fast r-cnn의 경우 RoI Pooling 과정을 거치면서 one-stage로 변동되었다.

Loss FUnction

  • Fast R-CNN의 경우 Loss function은 위와 같이 사용한다.

정리

RoI Pooling을 하나 추가함으로써

(1) CNN후에 region proposal 연산 - 2000xCNN연산 → 1번의 CNN연산
(2) 변경된 feature vector가 결국 기존의 region proposal을 projection시킨 후 연산한 것이므로

해당 output으로 classification과 bbox regression도 학습 가능의 성과를 이룰 수 있었다.
그러나 여전히 Fast R-CNN에서도 R-CNN에서와 마찬가지로 RoI를 생성하는 Selective search알고리즘은 CNN외부에서 진행되므로 이 부분이 속도의 bottleneck이다.

profile
Mechanical & Computer Science

0개의 댓글