본문 바로가기
논문 리뷰

Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks(2015) Review

by rltjq09 2024. 1. 25.
728x90
 

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

State-of-the-art object detection networks depend on region proposal algorithms to hypothesize object locations. Advances like SPPnet and Fast R-CNN have reduced the running time of these detection networks, exposing region proposal computation as a bottle

arxiv.org

 

0. 핵심 요약

Object Detection에 대한 full-image convolution features를 공유하는 RPN(Region Proposal Network) 제안

RPN은 fully convolution network이며, object bound와 object score를 예측

RPN + Fast R-CNN 인 Faster R-CNN 제안

1. BackGround

- 기존 Region Proposal 생성 방법

기존에는 크게 2가지 방법의 생성 방법이 존재

1. grouping super-pixel(ex. Selective Search)

2. sliding window(ex. EdgeBoxes)

 

위의 두 방법은 모두 CPU에서 작동하는 방법이기 때문에 GPU에서 학습하는 것보다 속도가 떨어졌음

따라서 이를 개선하기 위해 해당 알고리즘을 GPU에서 작동하도록 하는 방법들이 발전되어 왔음

하지만 이로 인해서 기존보다 활용하기가 어려워졌다는 단점이 발생

 

따라서 논문 저자들은 아예 GPU에 특화된 알고리즘을 새로 개발하기로 결정

GPU는 Convolution 계산에 특화되어 있기 때문에 이를 활용하기로 함

따라서 해당 아이디어를 발전시켜 기존의 convolution feature map을 활용하는 방법을 개발

- Fast R-CNN

해당 논문에서는 Detection을 위해 Fast R-CNN 모델을 활용

해당 모델에 대한 자세한 내용은 이전 논문 리뷰를 참고

https://rltjq09.tistory.com/13

 

Fast R-CNN Review

0. 핵심 요약 기존의 R-CNN 보다 train 시 약 9배, test 시 약 213배 빠른 속도를 가짐 SPPNet과 비교했을 때 train 시 약 3배, test 시 약 10배 빠른 속도를 가짐 Object Detection에서 최초로 Single-stage 모델인 Fast R

rltjq09.tistory.com

- Multi-scale 활용 방법

기존에는 multi-scale을 활용하기 위해 (a), (b)의 방법을 활용

(a)는 이미지를 scaling 하는 방법으로, 이미지의 크기 자체를 변형하면서 scale을 다양하게 하는 방법

(b)는 filter의 size를 여러 버전을 사용하는 방법이며, 이는 주로 (a)와 같이 활용

 

두 방법 모두 좋은 방법이지만, 학습하는데 시간이 오래 걸린다는 단점이 존재

따라서 해당 논문에서는 (c) 방법인 하나의 filter에서 multiple references를 생성하는 방식을 사용

이렇게 하면 filter와 image는 1개만 사용하지만 여러 개를 사용하는 것 같은 효과를 누릴 수 있음

2. 논문 핵심 내용

- RPN

RPN은 해당 논문에서 가장 중요하고 가장 핵심적인 내용

해당 이미지는 Faster R-CNN의 전체적인 architecture를 표현한 그림

 

RPN이 작동되는 전체적인 방식을 설명하면 다음과 같다

우선 입력으로 Fast R-CNN의 Conv Net의 마지막 layer의 feature map을 입력 받는다

그런 뒤, RPN을 위해 새로 만들어진 Convolution layer에 해당 feature map을 거치게 되면 총 2가지가 출력

1. proposal box coordinates → 객체가 존재한다고 판단되는 박스의 좌표

2. objectness score 해당 박스에 실제로 객체가 존재할 확률

2가지의 출력을 다시 Fast R-CNN의 RoI Pooling Layer로 전달

 

이때 Convolution Layer는 3 x 3 conv와 2 개의 1 x 1 conv 로 구성되어 있다

3 x 3 conv 가 수행하는 역할은 feature map을 sliding 하면서 "anchor" 를 생성하는 것이고 2개의 1 x 1 conv는 최종 출력을 결정하는 역할을 수행

 

위에서 anchor 라는 단어가 나왔는데, anchor가 의미하는 바는 다음과 같다

해당 이미지를 보면 총 k개의 anchor boxes가 표현되어 있다

3 x 3 conv는 filter가 feature map을 sliding 하면서 해당 지역을 보게 되는데 이때 한 지역마다 총 k개의 서로 다른 box를 생성한다

이때 하나하나의 박스를 anchor라고 하며, 논문에서는 한 지역 당 총 9개의 anchor를 생성한다

9개의 기준은 서로 다른 3개의 scale과 3개의 ratio로 구성

 

최종 출력을 보면 2k score와 4k coordinates가 있는데 이는 anchor 마다 score는 O or X 2개가 출력되고, 좌표는 (x, y, w, h) 4개가 출력된다(이때 x, y는 중심 좌표)

 

즉, feature map의 크기를 H x W 라고 가정하면, 총 anchor는 H x W x k 개가 생성되는 것

 

이렇게 보면 anchor는 기존과 다르게 추가적인 parameter나 layer를 요구하지 않는다

이는 cost-free로 box를 생성할 수 있다는 것이고 그만큼 속도 측면에서 매우 많은 이득을 얻을 수 있었다

- translation-invariant

해당 개념은 CV 분야에서 매우 중요하게 생각하는 개념으로써, 이미지 내에서 객체의 위치가 변해도 해당 객체를 동일하다고 인식하는 것을 의미한다

 

논문에서는 이 개념이 있냐 없냐에 따라 모델의 성능이 크게 바뀐다고 주장

기존의 다른 모델에서는 이러한 개념이 모델에 존재하지 않아 이를 파악하기 위해 그만큼의 parameter가 더 필요했음

하지만 Faster R-CNN은 기존의 conv net을 share 하기 때문에 이러한 성질을 가지고 있고, 이로 인해서 모델의 크기도 더욱 감소시킬 수 있었다 함

 

Faster R-CNN의 output layer의 parameter size는 $2.8 \times 10^4$이지만 MultiBox의 output layer는 $6.1 \times 10^6$ 이라고 한다

- Loss Function

Loss function을 정의하기 전, 논문에서는 각 anchor 마다 해당 anchor가 positive인지 negative 인지를 구분

positive가 되는 기준은 ground-truth와 IoU를 계산했을 때 가장 값이 큰 것

negative가 되는 기준은 IoU가 0.3 이하인 것

 

논문에서 정의한 Loss function은 다음과 같다

$L(\{p_i\}, \{t_i\}) = {1 \over N_{cls}} \sum_{i} L_{cls}(p_i, p_i^*) + \lambda {1 \over N_{reg}} \sum_{i} p_i^*L_{reg}(t_i, t_i^*)$

$i$ : anchor의 index를 의미, $p_i$ : 객체가 존재하는 지 아닌지에 대한 확률, $p_i^*$ : 객체가 있으면 1, 아니면 0

$t_i$ : 모델이 예측한 좌표값, $t_i^*$ : ground-truth 좌표값

$L_{cls}$ : 확률 값에 대한 loss이며, log loss를 사용

$L_{reg}$ : $R(t_i - t_I^*)$ 이며, 이때 R은 Fast R-CNN에 나온 smooth L1 을 사용

$N_{cls} = 256, N_{reg} \simeq 2400$ : 정규화 항이며, 필수는 아니라고 함

$\lambda$ : 10으로 설정했으며, cls 값과 reg 값을 최대한 비슷하게 만들기 위해 적용했다고 함

 

다음 식들은 각 좌표들을 설정하는 식이다

$t_x = (x - x_a)/w_a, ~~t_y = (y-y_a)/h_a$

$t_w = log(w/w_a), ~~t_h = log(h/h_a)$

$t_x^* = (x^* - x_a)/w_a, ~~t_y^* = (y^*-y_a)/h_a$

$t_w^* = log(w^*/w_a) , ~~t_h^* = log(h^*/h_a)$

*가 있는 것은 ground-truth, 아무것도 없는 것은 예측 값, a가 아래첨자에 존재하는 것은 anchor 박스를 의미

- training RPNs

SGD를 통해 학습했으며, mini batch는 1개의 이미지에서 256개의 anchor box로 구성

이때 positive와 negative의 구성은 최대한 1:1로 유지하려고 했으며, 만약 128개가 안되면 다른거에서 추가

- training method

RPN은 기존의 Fast R-CNN과 parameter를 공유하는 것이 핵심

따라서 학습 방법 역시 매우 중요한데, 논문에서는 총 3가지의 학습 방법을 소개

 

1. Alternating training

해당 방법은 실제 논문에서 채택한 학습 방법으로써, RPN을 먼저 학습하고 Fast R-CNN을 학습하는 것처럼 순차적으로 학습하는 것

2. Approximate joint training

RPN과 Fast R-CNN을 동시에 학습하는 방법, 성능은 1번 방법보다 떨어지지만 학습 시간은 더 빠르다고 언급

3. Non-approximate joint training

2번과 다른 것은 back propagation시 기울기 전파에 관련

2번은 RPN이 예측한 박스 좌표값에 대해서는 기울기 전파 x, 하지만 3번은 기울기를 전파하여 학습을 진행하는 방법

 

최종적으로 1번을 채택했으며, 해당 방법은 총 4 단계가 존재

1. 앞서 설명한 training RPNs 방법을 통해 RPN을 학습, 이때 conv net은 ImageNet으로 pre-trained된 모델

2. 앞에서 학습한 RPN이 생성하는 proposal로 Fast R-CNN을 학습, 이때 conv net은 1번과는 다른 pre-trained 모델

3. 2번에서 학습한 conv net을 이용하고, RPN에 관련된 layer만 fine tuning을 진행

4. 3번에서 학습한 RPN layer는 고정하고 나머지 Fast R-CNN과 관련된 conv net을 fine tuning

 

다음 단계를 따르면서 학습을 진행하면 자연스레 1개의 conv net이 region proposal과 detection 모두에 fine tuning이 가능

이를 통해 두 task가 결합된 1개의 모델을 생성할 수 있었다고 언급

3. Model Architecture

앞서 봤던 해당 그림이 Faster R-CNN을 표현하는 그림

해당 architecture의 흐름은 다음과 같다

1. full image 입력

2. conv net을 거쳐 feature map 생성

3. 해당 feature map을 RPN에 입력

4. RPN을 거쳐 나온 proposal과 score를 Fast R-CNN의 RoI Pooling으로 입력

5. Fast R-CNN을 거쳐 최종 bbox와 class 출력

 

또한, 학습을 할 때 anchor 가 image의 경계를 넘어가는 경우도 있는데, 해당 anchor는 제외하였음

test 시에는 유지

 

anchor가 너무 많이 생기는 것을 방지하기 위해 NMS 도 적용하였으며, 기준은 IoU가 0.7 이상인 

 

학습 시 hyper parameter

SGD, batch size 256

learning rate : 0.001, 20k 반복마다 0.0001 감소

momentum : 0.9

weight decay : 0.0005

4. Experiment

PASCAL VOC 2007에 대한 결과

SS는 Selective Search를 의미하며, EB는 EdgeBoxes를 의미

즉, region proposal 생성할 때 다른 기법을 적용하는 것 보다 RPN을 적용하는 것이 더 성능이 좋다는 것을 보여줌

 

왼쪽 : PASCAL VOC 2007, 오른쪽 : PASCAL VOC 2012

학습 시 데이터를 어떻게 사용했는 지를 보여준 표

학습 데이터가 많아지면 많아질 수록 성능이 향상되는 모습을 보임

 

다음은 모델의 속도를 보여주는 표

기존에 비교했을 때 fps 가 매우 향상된 것을 볼 수 있음

 

위 : 2007, 아래 : 2012

전체 mAP와 각 class 별 mAP를 보여주는데, 역시 RPN이 모든 class에서 우세한 것을 보여준다

 

anchor를 생성할 때 k를 어떻게 설정할 지에 대한 표

논문에서 채택한 방식이 가장 좋은 성능을 보임

 

Loss Function에서 $\lambda$ 값에 따른 성능 차이를 봤을 때 10이 가장 높은 것을 볼 수 있다

 

해당 그래프는 proposal 생성 개수에 따른 IoU와 Recall을 표현한 그래프

RPN을 사용한 모델은 proposal에 따라 그래프가 크게 변하지 않지만 다른 기법들은 proposal 개수가 적을 때 그만큼 성능이 안나오는 것을 볼 수 있다

5. Contribution

효율적이고 정확한 영역 제안 생성을 위해 RPN(Region Proposal Network)을 제시

convolutional features를 공유함으로써, region proposal 단계는 거의 cost가 들지 않음

+ Comment

RPN이라는 아주 획기적인 네트워크를 만들어냈다는 것에 인상깊다

이후에 나오는 모델 중에서 anchor-free 모델이 나오기 전까지는 detection에서는 매우 중요한 알고리즘이였다

728x90