Faster R-CNN 리뷰

Fast R-CNN

R-CNN, Fast R-CNN 논문 리뷰를 먼저 보시는 것을 추천드립니다!!


간단한 소개

Faster R-CNN은 R-CNN의 region proposal에서의 시간을 획기적으로 줄이기 위해서 RPN(Region Proposal Networks)을 적용한 모델입니다.

Faster R-CNN의 원리에 대해 알아보겠습니다.


Introduction

Region proposal을 만들 때, selective search 방법이 있습니다. selective search 방법은 segmentation을 여러 번 진행하여 해당 segmentation에 맞는 region proposal만을 선택하는 형태로 진행합니다. R-CNN은 이런 region proposal을 2000개 만들고 각 proposal에 CNN을 적용합니다. 2000번의 CNN 연산을 진행하니 당연히 느리겠죠.

OP code

<그림 1. selective search>

좀 더 빠르게 하고자 나온 모델이 Fast R-CNN, SPPnet입니다. Fast R-CNN은 RoI pooling layer로, SPPnet은 Spatial Pyramid Pooling layer로 CNN연산을 2000번에서 1번으로 줄여 연산 결과를 공유하는 식으로 모델 성능을 올렸죠. 하지만 Fast R-CNN이나 SPPnet은 항상 region proposal을 사용할 때, selective search를 이용해야 한다는 점이 있고 이는 시간적 소모가 많이 든다는 단점이 있었습니다.

따라서 이 region proposal을 얻을 때의 방법을 개선하여 성능을 높인 모델이 Faster R-CNN입니다.

Faster R-CNN은 Region Proposal Network(RPN)을 만들어 연산한 값을 공유하는 방식으로 성능을 향상시켰습니다. 여기서 anchor box라는 새로운 방법을 도입했는데 한 번 알아보겠습니다.


Faster R-CNN

OP code

<그림 2. Faster R-CNN 구조>

Faster R-CNN은 두 개의 모듈이 있는데, 하나는 region 생성을 위한 deep fully convolutional network와 다른 하나는 Fast R-CNN detector입니다. Fast R-CNN을 보시고 이해하시는 것을 추천드립니다.

<그림 2>에 나와있는 대로 RPN(Region Proposal Network) 모듈은 Fast R-CNN 모듈이 어디를 봐야하는지 알려주는 Network입니다. 이 때 Attention machanism (1)을 이용합니다.


Region Proposal Networks(RPN)

OP code

<그림 3. Faster R-CNN 구조(2)>

RPN은 어느 size의 image든 그 image를 input으로 받고 output으로 사각형 형태의 object proposal을 만듭니다. 이 과정을 fully convolutional network으로 진행하였습니다. 궁극적 목표는 Fast R-CNN network와 연산한 값을 공유하는 것이며 이를 위해 convolution layer를 RPN과 Fast R-CNN이 공유하게 됩니다.

이 과정에서 5개의 공유 가능한 Convolutional layer을 가진 Zeiler와 Fergus 모델인 ZF와 13개의 공유 가능한 Convolution layer를 가진 Simonyan과 Zisserman 모델의 VGG-16을 이용합니다. 이 모델을 사용해 feature map을 생성하고 RPN의 input으로 사용합니다. ZF는 256-d, VGG는 512-d의 channel을 갖습니다.


Anchors

OP code

<그림 4. Anchor 생성>

VGG 모델을 사용했다고 가정하고 h x w x 512의 input이 들어갔다고 생각해보겠습니다. RPN에서 n x n(논문에서는 n = 3) convolution을 진행한 뒤, 두개의 sibling 1x1 convolution layer를 거칩니다. 이 때, 사용하는 bounding box 기법이 anchor 입니다. anchor은 <그림 4>처럼 scale과 비율을 정해, 해당 픽셀에서 k개의 bounding box를 만듭니다.

OP code

<그림 5. Anchor 생성(2)>

Classification & Box Regression

Anchor들을 생성하여 해당 anchor에 대한 두 개의 layer를 만듭니다. 하나는 classification layer, 다른 하나는 regression layer입니다. classification layer은 해당 anchor에 객체가 존재하는 지에 대한 여부를 나타낸 것으로, 2개의 size를 가집니다. regression layer은 anchor box가 ground-truth box와 잘 맞도록 하는 layer입니다. box의 center의 x,y위치와 width, height를 가져 총 4개의 size를 가집니다.

OP code

<그림 6. Cls layer와 Reg layer>

Classification layer와 Regression layer를 각각 거치면 Feature map 사이즈는 각각 hxwx2x9(객체 존재 여부), hxwx4x9(box위치와 너비, 높이)가 됩니다. 이를 활용하여 Region Proposal을 만들고 RoI Pooling을 거쳐 7x7x512의 feature map이 만들어지죠.


Fast R-CNN

RPN을 거쳐 Region proposal을 만들고 RoI pooling으로 7x7x512 Feature map을 만들었으면 이를 Fast R-CNN의 input으로 넣습니다. Fast R-CNN을 거쳐 Non Maximum Suppression을 거쳐 object에 대한 최종 classifcation과 bounding box를 산출합니다.


결과

결과는 다음과 같습니다.

OP code

<그림 7. Faster R-CNN과 Fast R-CNN 비교>

region proposal을 만드는 부분에서 시간이 1510 -> 10초로 감소된 것을 볼 수 있네요. Region Proposal Network의 효과가 나오는 것 같습니다.

OP code

<그림 8. R-CNN, Fast R-CNN, Faster R-CNN>

OP code

<그림 9. R-CNN, Fast R-CNN, Faster R-CNN 성능 정리>

R-CNN이 점차 발전되는 것을 볼 수 있네요!


참고 사이트

selective search(1)

selective search(2)

selective search(3)

Faster R-CNN 논문 리뷰

그리고 ChatGPT


추가설명

(1) Attention machanism

  • 스퀀스(sequence) 데이터를 처리할 때, 특정 위치의 입력값에 더 많은 가중치를 부여하여 해당 위치가 출력값에 미치는 영향력을 강화하는 방법임.

Leave a comment