• toc {:toc}

Overview of R-CNN structure

image

image


Fast RCNN

Fast RCNN은 RCNN과 SPPnet이 가지고 있는 문제들을 해결하고자 고안됐다. 각 구조를 살펴보고 발생할 문제를 체크한 후 Fast RCNN에 대해 이해해보자.

RCNN

image

image

Structure of RCNN

  1. 입력 이미지를 Selective Search 통해 RoIs 생성
  2. RoI(Region of Interest) 각각에 대해 Crop, Resize(Wrapping)
  3. CNN 통과하여 특징맵 생성
  4. 생성한 특징맵을 cache로 저장한다.
  5. Classifiers(SVM)을 통해 분류 작업을 한다.
  6. Bounding-box Regressor(Bbox reg)를 통해서 객체 탐지를 한다.

Problems of RCNN

  1. CNN 입력을 위한 Warpping 과정에서 crop, resize로 인해 정보 손실이 발생한다.

  2. Training is a multi-stage pipeline RCNN의 pipeline은 a) Selective Search를 통해서 RoI를 추출, b) CNN을 이용해 특징 추출, c) 각 작업에 따라 분류, 객체 탐지 과정 등 여러 과정이 따로 떨어져서 진행된다. 이런 multi-stage pipeline은 End-to-End 학습을 할 수 없어 한 쪽의 훈련이 되더라도 다른 stage가 학습되지 않는다는 문제점을 갖는다.

  3. Training is expensive in space and time. 각각의 RoI를 CNN에 넣어 나온 특징맵을 전부 모아 SVM, Bbox reg에 사용해야 하기 때문에 특징맵을 저장해둬야 한다. 이는 많은 저장 공간을 필요로 한다.

  4. Object detection is slow. 각 테스트 이미지마다 RoI를 뽑고, RoI마다 CNN에 통과시켜 발생하는 복잡도로 인해 파라미터가 많아지면서 공간적인 비용, 시간적인 비용이 상승하고 속도가 느리다는 문제점을 갖는다.


SPPnet

image

Strucutre of SPPnet

  1. 입력 이미지를 CNN에 넣는다.
  2. CNN으로부터 추출된 특징맵에 Selective Search와 같은 Proposal Method를 사용해 RoI를 선정한다.
  3. 각 RoI에 대해 Spatial Pyramid Pooling layer를 적용한다.
  4. Fully-connected layers를 통과하고 난 결과를 cache로 저장한다.(SVMs와 Bbox reg가 연산을 공유하지 않기 때문)
  5. SVM을 통해 분류 작업을 한다.
  6. Bbox reg와 Non Maximum Suppression을 통해서 bounding box를 구한다.

Improvements of SPPnet over RCNN

  • Spatial Pyramid Pooling(SPP) 방식을 고안한 SPPnet은 RCNN의 다음의 문제를 개선했다.

image

  1. 각각의 RoI에 CNN을 적용하여 많은 비용이 발생하는 문제
  • RCNN Selective Search로 추출한 RoI 각각에 CNN을 적용한다. 매우 큰 복잡도
  • SPPnet 전체 이미지를 CNN에 넣어 추출한 특징맵에 Selective Search 적용한다. 복잡도 감소
  1. Warping(Crop, Resize)으로 인해 정보의 손실이 발생하는 문제
  • RCNN Warping을 사용해 FC layer에 입력될 고정 길이 벡터를 만든다. 정보의 손실, 정확도의 손실 발생
  • SPPnet Spatial Pyramid Pooling(SPP)을 사용하여 warping없이 고정 길이의 벡터를 만든다. 정보 손실 없이, 다양한 위치 정보 담아 사용한다.

Problems of SPPnet

  • RCNN과 마찬가지로 a) CNN 이용해 특징 추출, b) Selective Search로 RoI 추출, c) 각 작업에 따라 분류, 객체 탐지 과정과 같이 여러 pipeline으로 이루어져 있다.
  • SPPnet 또한 각 RoI에 대해 SPP와 FC layer를 거친 이후의 특징을 저장해야 한다는 문제점을 갖는다.

Overall Structure of Fast RCNN

  • Fast RCNN은 RCNN의 문제와 SPPnet의 문제점을 동시에 해결하고자 고안됐다.

image

image

  1. 전체 입력 이미지에 Selective Search를 통해 RoI(이미지)를 추출한다.
  2. 전체 입력 이미지를 CNN에 입력해 특징맵을 추출한다.
  3. CNN을 통과한 특징맵은 크기가 줄어든 형태(e.g. 14x14)이기 때문에 RoI를 줄어든 크기의 특징맵의 위치에 맞게 projection한다.
  4. 이후 projection한 RoI(특징맵)에 RoI Pooling을 적용하여 FC layer의 입력으로 넣기 위한 고정 길이 벡터를 생성해 FC layers를 통과한다.
  5. SVM 대신 분류 작업에 softmax를 사용하여 어떤 물체인지 분류한다.
  6. Bbox reg를 통해서 객체 탐지를 조정한다.
  • Fast RCNN은 CNN으로 VGGNet을 사용했다.
  • FC layers의 마지막 FC layer 하나를 FC layer 2개로 분할하여여 첫 번째 FC layer는 Softmax를 통한 분류, 두 번째 FC layer는 Bbox reg를 통한 객체 탐지로 사용했다.
  • 위 그림에서 연결된 것과 같이 Fast RCNN은 softmax, bbox regressor에 같은 feature vector가 전달되고, 전체적인 구조가 하나의 stage로 이어져 있다.

Main Ideas of Fast RCNN

Fast RCNN이 제안한 아이디어에 대해 알아보자.

RoI Pooling

RoI Pooling이 사용되는 부분은 CNN을 통과한 특징맵에 RoI에 대한 projection이 적용된 상태이다. 즉, 입력되는 이미지(e.g. 224x224)크기의 RoI의 위치를 특징맵(e.g. 14x14)에 일치하도록 연결시켜주는 것을 말한다. 이후 특징맵의 RoI에 RoI Pooling을 적용한다.

image

image

  • 위 그림은 이미지가 VGG를 통과해 RoI Pooling까지 적용한 과정을 예를 들어 보여준다.
  1. 이미지가 VGG를 통과해 8x8의 특징맵을 산출한다.
  2. 원본 이미지에 Selective Search를 통해 추출한 RoI를 projection하여 특징맵에 5x7의 크기로 위치를 설정한다.
  3. RoI Pooling의 출력 크기에 맞도록 Grid로 spliting 한다. 위 그림의 경우 2x2 RoI Pooling인 상태이고, h와 w가 모두 홀수이기 때문에 비대칭적으로 나누어진 것처럼 보인다.
  4. 해당 Grid 안에서 최댓값을 추출하는 MaxPooling을 통해서 고정된 크기의 출력을 만든다.
  • RoI Pooling은 SPP(Spatial Pyramid Pooling)의 특별한 경우이다.
  • Grid는 Projection_height / Pooling_height, Projection_width / Pooling_width 다음과 같이 설정해서 구할 수 있다.

Multi-task loss

  • : K+1 개의 Class Score (K개의 객체 + 배경), Softmax에 의해 계산된다.

  • : 정답 객체 클래스 (0 or 1)

  • : 예측한 K 객체 클래스에 대한 bounding box 좌표 조정값

  • : K 객체 클래스에 대한 bounding box 좌표값

  • : 분류, bbox 손실 함수 사이의 가중치를 조절하는 hyperparameter

  • : 인 경우 u = 1 아니면 u = 0

  • : 분류 점수에 대한 log loss

  • : Bounding box 좌표에 대한 Smooth L1 loss

  • smooth L1을 사용한 이유는 L1 loss는 이상치에 덜 민감하고, L2 loss는 너무 민감해 학습률 조정이 힘들기 때문에 L1 loss의 강건함을 완화하는 방식으로 적용했다.

Mini-batch sampling

  • Fine-tuning 시 각 SGD 배치는 N=2 이미지와 R=128로 이미지 당 R/N 개의 RoI를 샘플링한다.

  • RoI와 GT의 IoU가 0.5 이상인 경우 중 25%의 RoI를 positive, foreground object class 로 설정하고, 인 경우 중 75%를 negative, background object class 로 설정한다.

  • RCNN, SPPnet에서는 샘플링을 어떻게 했는지는 잘 모르겠다.

Backpropagation through RoI Pooling Layers

[image]

  • : RoI Pooling Layer에 입력되는 i번째 activation input
  • : r번째 RoI에 대한 j번째 출력

(Backpropagation, Truncated SVD 추후 정리 예정)

Contributions of Fast RCNN

  1. RCNN, SPPnet보다 더 높은 탐지 성능을 갖는다.
  2. Multi-task loss를 사용해 훈련을 single stage, End-to-End로 진행한다.
  3. 훈련을 통한 backpropagation이 모든 네트워크 층에 도달하여 모든 층이 훈련된다.
  4. 특징을 저장하기 위한 저장공간이 필요하지 않다.

Result

[image]

  • Fast RCNN의 성능이 이전 다른 방식들보다 높은 성능을 보임을 확인할 수 있다.

참고문헌