본문 바로가기
딥러닝/CV 논문

[Object Detection] Faster R-CNN

by 혜 림 2022. 7. 27.

예전에 쓰다가 지웠는데 그러지 말껄..

 

Faster R-CNN: Towards Real-Time Object Detection

with Region Proposal Network

 

 

 

이 논문의 주요 관심사는 어떻게 하면 region proposal 단계의 시간을 절약할 수 있을까!

 

Fast R-CNN의 경우 "region proposal" 에 소요되는 시간을 제외하면 실시간에 사용할 수 있을만큼 빨리 훈련할 수 있다고 한다. 하지만 test-time 에는 반드시 "region proposal" 단계를 겪어야 하므로 사실상 실시간으로는 사용하지 못한다는 한계가 있다. 그래서 Faster R-CNN 에서는 region proposal 단계의 소요 시간을 줄이고 나아가서 이 과정 역시 convolution layer로 학습하게 해서 end-to-end를 구현하려고 했다. 이 구현을 위한 네트워크가 "region proposal network(이하 RPN)" 이다. 

 

 

  그런데 어떻게 이 모듈을 구현할 것인가, 어떻게 다양한 사이즈의 bounding box 후보를 추출할 수 있을 것인가? 본 논문에서는 anchor box를 소개한다. 사실 YOLO랑 비슷한 느낌을 많이 받았다. 

 

 

 기존에는 다양한 사이즈와 비율(aspect ratio)를 다루기 위해서 처음부터 여러 사이즈의 feature map을 만들어서 pyramid를 쌓거나, 여러 크기의 필터를 이용해서 pyramid를 만들거나 했는데 본 논문에서는 하나의 feature map, 하나의 커널을 이용하는 대신 anchor box라고 하는 reference를 이용한다. 다음 섹션에서 더 자세하게 다루겠다. 

 

이 object detection 시스템은 크게 두 가지 모듈을 이용하는데 region proposal 하는 FCN (fully convolutional layer)과 object detection 하는 Fast R-CNN 이 그 두가지다. 논문에서는 이 FCN 과정에서 이용하는 RPN 이 attetion 처럼 작용한다고 볼 수 있다고 한다. 엄청 개념만 보면 그런 것 같다

그러니까 다시 말하자면, Fast R-CNN 에서 input으로 받았던 기존 이미지와 ROI 이미지 중, ROI 이미지는 RPN을 통해서 추출한다고 생각하면 된다. 딱 그 단계만 대체가 된 거다. 뒤에 훈련 방식의 변화도 조금 있기는 하다. 

 

 

 어쨋든 그럼 RPN을 먼저 보자. 

 

 RPN의 입력값은 pretrain 된 CNN 을 거쳐 나온 feature map이고, output은 object proposal set 이다. 이때, 이 set에는 각 proposal 별로 objectness score도 함께다. objectness score는 해당 region에 사물이 얼마나 있음직한지 그 확률값이다. 

 

 feature map 이 나오면 거기에 n*n(여기서 n=3) 의 sliding window를 이용해서 모든 영역을 훑으면서 두 가지 sub-task 가지로 뻗어갔다. objectness score를 계산하는 cls 가지(branch) 와 bbox regression 가지! 이 두 가지는 모두 FC layer로 연결된다. 또한 이때, sliding window를 이용해서 두 branch 계산이 이루어지기 때문에 모든 영역을 훑을 때 다 parameter가 공유된다는 점도 주목할 만하다. 

 

 

 그런데 그럼 어떻게 sliding window를 통해서 region proposal을 만들어내는가? 아까 말했던 anchor box! reference로 이용한다던. 

k 개의(본 연구에서는 9) anchor box를 이용해서 region proposal을 냈다고 한다: 다양한 사이즈 3 * 다양한 비율 3 = 9 

이 anchor box는 translation invariant 하다. 그래서 기존의 region proposal 방법에 비해서 파라미터 수가 훨씬 덜 필요하다고 한다. 

 

 

이 RPN 의 "한 이미지 당" loss 함수는 이렇게 생겼다. i는 미니 배치 내에서 anchor index 를 의미한다. $p_{i}$는 단순히 object 가 얼마나 있음직한지 확률값으로, object class와는 무관하다. 

 

한 배치당 positive 와 negative 비율을 최대 1:1 로 구성했다고 한다. 

 

전체 whole network를 훈련할 때는

 

1) RPN 훈련

2) RPN ouput을 input으로 이용해서 Fast R-cnn 훈련

(이때는 1과 2가 연산을 공유하지 않음)
3) 연산이 공유되는 layer를 뺀 나머지 RPN layer만 훈련(이때 Fast R-CNN layer로 다시 initialize 한다고 함)

4) 마찬가지로 연산이 공유되는 layer를 뺀 unique 한 Fast R-cnn layer만 훈련

 

과정을 통해 연산을 공유하도록 했다고 한다. 

 

detail은 관심 있음 보시라!

 

 

성능은 이랬다고 함. 

 

정수만 담았다!

'딥러닝 > CV 논문' 카테고리의 다른 글

[Generation]GAN - 2부  (0) 2022.08.09
[Instance Segmentation] Mask R-CNN  (0) 2022.08.01
[Classification] ResNet 요약  (0) 2022.07.10
[Object Detection] CenterNet2 요약  (0) 2022.03.21
[GAN] pix2pix HD  (0) 2022.02.10

댓글