Faster R-CNN 개요

  • Fast R-CNNR-CNN에 비해 속도와 성능을 향상시켰지만, 여전히 Region Proposal(Selective Search)에 시간이 많이 걸리는 한계가 있으며 이를 해결하기 위해 Faster R-CNN은 RPN(Region Proposal Netwrok)을 도입해 속도를 대폭 개선함.

  • RPN은 Region proposal을 보다 정교하게 추출하기 위해 다양한 크기와 가로세로비를 가지는 bounding box인 Anchor box를 도입함.

  • Paper : Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks


Key-Points

Anchor box

  • Anchor box는 feature map의 각 위치에서 미리 정의된 다양한 크기와 비율의 박스로, RPN이 이 anchor를 기준으로 물체 존재 여부와 박스 좌표를 학습 및 보정하기 위해 사용된다.
  • 다양한 크기의 객체를 감지하기 위해 지정한 위치에 사전에 정의한 서로 다른 크기(scale)와 가로세로비(aspect ratio)를 가지는 bounding box인 Anchor box를 생성하여 다양한 크기의 객체를 포착하는 방법을 제시함.
  • 이때, anchor box는 네트워크가 bbox regression을 예측할 기준(anchor) 일 뿐, 원본 이미지에서 해당 박스를 투영하여 픽셀을 가지고와 연산에 사용하거나 하지 않음. (anchor의 좌표는 단지 회귀 수식의 기준값(anchor reference) 으로 쓰임)

  • 논문에서는 3가지 sacle과 aspect ratio를 가지는 총 9개의 서로 다른 Anchor box를 사전에 정의함.
  • 여기서 scale은 anchor box의 width, height의 길이를, aspect ratio는 width, height의 길이의 비율을 의미하며,  aspect ratio가 1:1일 때의 anchor box의 넓이를 유지한 채 나머지 ratio를 설정함.

+full

  • anchor box는 원본 이미지의 각 grid cell의 중심을 기준으로 생성하며, 원본 이미지에서 sub-sampling ratio를 기준으로 gird를 구성하고, anchor box를 생성하는 기준점인 anchor를 고정한다.
  • 예를 들어, 원본 이미지의 크기가 600x800이고 sub-sampling ratio가 1/16이라 할 때, 생성되는 anchor의 수는 아래와 같다.
    • grid cell 개수 : 600/16 x 800/16 = 1900
    • anchor box (9종) 개수 : 1900 x 9 = 17100

RPN (Region Proposal Network)

+full

  • RPN은 객체가 있을 법한 영역(Region proposal)을 찾는 네트워크로, 아래와 같이 동작한다.
  1. Feature Map 추출
    • 입력 이미지를 CNN(예: VGG16)에 통과시켜 feature map을 얻는다.
    • 예 8x8x512 feature map
  2. Anchor Box 생성
    • feature map의 각 위치(cell)에 대해 다양한 크기와 비율의 anchor box를 원본 이미지에 설정함.
    • Feature Map의 한 셀 → 원본 이미지의 9개 후보 박스 : 8x8x9 = 576개 anchor box.
    • anchor box는 외부에서 미리 정의되어 테이블로 가지고 있다가, bounding box를 예측하고 loss를 계산할 때 사용됨.
  3. class score 계산
    • 위에서 얻은 feature map에 대하여 3x3 conv 연산을 적용하며, 이때 feature map의 크기가 유지될 수 있도록 padding을 추가한다.
    • 3x3 conv 연산의 출력에 1x1 conv 연산을 적용하여 객체가 포함되어 있는지 여부를 출력함.
    • 예: 8x8x512 feature map 을 입력받아 8x8x2(객체 여부)x9(후보 anchor box)이 출력됨.
  4. box 보정값 계산
    • 3x3 conv 연산의 출력에 1x1 conv 연산을 적용하여 anchor box에 따른 box 보정 좌표 4개를 얻는다.
    • 예: 8x8x512 feature map 을 입력받아 8x8x4(box 보정 좌표)x9(후보 anchor box)이 출력됨.
  • RPN을 통해 출력된 grid cell 마다 anchor 개수만큼의 region proposal들은 이후 class score에 따라 상위 N개만 추출하여 NMS를 적용 후 최적의 proposal만을 Fast R-CNN에 전달하게 된다.

Multi-task loss

  • RPN은 Fast R-CNN에서 제안된 multitask loss 구조를 활용하여, anchor별로 objectness 분류와 박스 회귀를 동시에 학습함.
  • Fast R-CNN 파트에서는 기존 Fast R-CNN 에서 제안한 multitask loss를 그대로 이용하여 학습함. (Fast R-CNN : Multi-task loss)
  • RPN에서는 객체의 존재 여부만을 분류하는 반면, Fast R-CNN에서는 배경을 포함한 class를 분류한다는 점에서 차이가 있음.
  • : mini-batch 내의 anchor box의 index
  • : anchor 에 객체가 포함되어 있을 확률 (score)
  • : 정답 라벨 (1 = 객체 있음, 0 = 배경)
  • : 예측된 bounding box 회귀값 (anchor 대비 offset)
  • : GT box 좌표
  • : mini-batch 내 anchor의 개수
  • : positive anchor의 개수
  • : 두 손실 간 가중치 (논문에서는 10)
  • : 분류 손실
    • anchor가 객체인지 배경인지 예측함
    • binary cross-entropy (log loss)
  • : 회귀 손실
    • positive anchor의 위치 보정 (bounding box regression)
    • Smooth L1 loss :

Faster R-CNN 구조 및 학습

  • Faster R-CNN의 학습 과정은 두 개의 네트워크(RPN + Fast R-CNN)를 순차적으로, 그리고 부분적으로 공유하며 학습하는 방식이다. +full

1) Feature extraction

  • pre-trained된 VGG16 모델에 800x800x3 크기의 원본 이미지를 입력하여 50x50x512 크기의 feature map을 얻는다.
  • 여기서 sub-sampling ratio는 1/16이 된다.

2) Generate Anchors

  • region proposals를 추출하기에 앞서 원본 이미지에 대하여 anchor box를 생성하는 과정이 필요하며, feature extraction으로 부터 나온 50x50의 grid cell을 기준으로 원본 이미지에 50x50개의 grid cell이 생성되고, 각 cell 마다 9개의 anchor box가 생성된다.
  • 이 과정은 Anchor generation layer에서 수행되며, 총 22500(50x50x9)개의 anchor box가 생성된다.

3) Class score and Bounding box regressor

  • RPN은 feature map을 입력 받아 anchor에 대한 class score, bounding box regressor을 반환한다.
  • class score는 50x50x2x9 사이즈가 되고, bounding box regressor는 50x50x4x9 사이즈가 반환된다.

4) Select anchors for training RPN

  • Anchor target layer에서 RPN이 학습하는데 사용할 수 있는 anchor를 선택한다.
  • 2번 과정에서 생성한 총 22500(50x50x9)개의 anchor box에서 원본 이미지의 경계를 벗어나지 않는 anchor box를 선택하고, ground truth box와 IoU값이 0.7 이상인 경우를 positive sample로, 0.3 이하인 경우 negative sample로 구성한다.
  • IoU값이 0.3~0.7인 anchor box는 무시하며, 이러한 과정을 통해 RPN을 학습시키는데 사용할 데이터셋을 구성하게 된다.

5) Region proposal

  • Proposal layer에서 2번 과정에서 생성된 anchor box들과 RPN에서 반환한 class scores와 bounding box regressor를 사용하여 region proposals를 추출하는 작업을 수행한다.
  • NMS를 적용하여 필터링을 적용한 후 class score 상위 N개의 anchor box를 추출한다.
  • regression coefficients를 anchor box에 적용하여 anchor box가 객체의 위치를 더 잘 감지하도록 조정한다.

6) Select anchors for training Fast R-CNN

  • Proposal target layer에서 proposal layer에서 나온 region proposals 중에서 Fast R-CNN 모델을 학습시키기 위한 sample을 선택한다.
  • region proposals와 ground truth box와의 IoU를 계산하여 0.5 이상일 경우 positive, 0.1~0.5 사이일 경우 negative sample로 label 된다.
  • 여기서 선택된 region proposals는 1번 과정을 통해 출력된 feature map에 RoI pooling을 수행하게 된다.

7) Max pooling by RoI pooling

  • 1번 과정에서 얻은 feature map과 6번 과정을 통해 얻은 sample을 사용하여 RoI pooling을 수행한다.
  • RoI pooling 참고: Fast R-CNN : RoI Pooling
  • 이를 통해 고정된 크기의 feature map (7x7x512) 이 출력된다.

8) Train Fast R-CNN by Multi-task loss

  • 나머지 과정은 Fast R-CNN 과 같이 7x7x512의 feature map을 flatten한 후 fc layer에 입력하여 fc layer를 통해 4096 크기의 feature vector를 얻는다.
  • 이후 feature vector를 Classifier와 Bounding box regressor에 입력하여 각각 (K+1), (K+1) x 4 크기의 feature vector를 출력하고, 출력된 결과를 사용하여 Multi-task loss를 통해 Fast R-CNN 모델을 학습시킨다.

Alternating Training

  • 저자는 Faster R-CNN 모델을 학습시키기 위해 RPN과 Fast R-CNN을 번갈아가며 학습시키는 Alternating Training 방법을 사용한다.
  • 아래 그림에서, 빨간색 영역이 학습되는 영역, 보라색 영역이 freeze된 영역이다.
  1. Anchor generation layer에서 생성된 anchor box와 원본 이미지의 ground truth box를 사용하여 Anchor target layer에서 RPN을 학습시킬 positive/negative 데이터셋을 구성하고, 이를 활용하여 RPN을 학습 시킨다. 이 과정에서 pre-trained VGG16 역시 학습된다.
  2. RPN은 freeze 시키고, RPN의 결과를 이용하여 추출된 positive/negative 데이터셋(Proposal target layer)을 통해 Fast R-CNN을 학습 시킨다. 이 과정에서 pre-trained VGG16 역시 학습된다.
  3. 앞서 학습시킨 RPN과 Fast R-CNN에서 RPN에 해당하는 부분만 학습(fine tune) 시킨다.
  4. 학습시킨 RPN을 활용하여 추출한 region proposals를 활용하여 Fast R-CNN을 학습(fine tune) 시킨다.

Inference

+full

  • 실제 inference 시에는 Anchor target layer와 Proposal target layer는 사용되지 않음. (두 layer 모두 네트워크를 학습시키기 위한 데이터셋을 구성하는데 사용되기 때문)
  • Fast R-CNN은 Proposal layer에서 추출한 region proposals를 활용하여 detection을 수행하며, 최종적으로 얻은 predicted box에 Non maximum suppression을 적용하여 최적의 bounding box만을 결과로 출력한다.

정리

+full


참고