본문 바로가기
DL/Object detection

Faster R-CNN

by hits_gold 2024. 1. 5.
반응형

Introduction

R-CNN에서는 region proposal, classification, bounding box regression을 따로 수행했고, Fast R-CNN에서는 region proposal을 CNN에 통과시켜 classification, bounding box regression을 통합했다.

그러나 여전히 region proposal에 해당하는 selective search 알고리즘은 CNN 외부에서 연산하여 속도저하를 일으킨다. (Selective search 알고리즘은 CPU 상에서 동작하고 이로 인해 네트워크에서 병목현상이 발생하게 된다.) 따라서 Faster R-CNN에서는 detection에 쓰인 Conv feature를 region proposal network에도 공유하여 RoI 생성 역시 CNN에서 수행하도록해 속도를 향상시킨다.

 

Idea

Faster R-CNN = region proposal network + Fast R-CNN이다. Faster R-CNN은 Fast R-CNN구조에서 Conv feature map과 RoI Pooling 사이에 RoI를 생성하는 RPN(region proposal network)가 추가된 구조이다.

또한 Faster R-CNN에서는 RPN 네트워크에서 사용할 CNN과 Fast R-CNN에서 classification, bounding box regression을 위해 사용한 CNN 네트워크를 공유한다는 개념에서 나왔다.

결과적으로 위 그림과 같이 CNN을 통과하여 생성된 Conv feature map이 RPN에 의해 RoI를 생성한다. 이 RoI는 feature map에서의 RoI가 아닌 original image에서의 RoI이다. 이 RoI는 Conv feature map의 크기에 맞게 다음과 같이 rescale된다.

이렇게 feature map에 RoI가 projection되면 FC layer에 의해 classification과 bounding box regression이 수행된다.

(RoI Pooling에 의해 FC layer의 input size가 고정되긴 하지만, 모델의 성능을 극대화시키기위한 input size로 대부분 맞춰준다.)

-> (요즘은 input size와 관계없이 1 value로 average pooling하기에 filter개수만 고정되어있는 GAP을 많이 쓰는 추세이다.)

 

RPN(Region Proposal Network)

(RPN 자세한 내용 https://herbwood.tistory.com/10)

RPN의 input은 CNN에서 뽑아낸 feature map이다. Region Proposal을 생성하기 위해 feature map 위에 non window를 sliding window시킨다. 이 때 object의 크기와 비율을 k개의 anchor box가 되도록 미리 정의한다. 이 anchor box가 bounding box가 될 수 있는 것이고 미리 가능할만한 box모양 k개를 정의해놓는 것이다. 여기서 가로세로길이 3종류x비율3종류 = 9개의 anchor box를 이용한다.

이 단계에서 9개의 anchor box를 이용하여 classification과 bounding box regression을 먼저 구한다. 먼저 CNN에서 만든 feature map에 3x3 convolution filter 256개를 연산해 depth를 256으로 만든다. 그리고 1x1 conv filter 두 개를 이용해 각각 classification과 bounding box regression을 수행한다.

input 차원이 nxnx4라고 할 때 1x1 Conv 연산을 두 번 사용하면 위 그림과 같은 연산을 하는 것이고 결국 FC layer와 같다.

RPN에서 1x1 Conv연산을 통해 classification과 bounding box regression을 연산하는데 이 때 네트워크를 가볍게 하기 위해 binary classification으로 bouding box에 물체가 있나 없나 판단한다. 어떤 물체인지에 대해서는 마지막 classification 단계에서 한다.

RPN단계에서 classification과 bounding box regression을 하는 것은 학습하기위함인데, 이 단계로부터 positive/negative examples를 뽑아내는데 다음 기준을 따른다.

IoU가 0.7보다 크거나, 한 지점에서 모든 anchor box중 가장 IoU가 큰 anchor box는 positive ex로 만든다. IoU가 0.3보다 작으면 object가 아닌 background를 뜻하므로 negative ex로 만들고 이 사이에 있는 IoU에 대해서는 애매한 값으로써 학습 데이터로 이용하지 않는다.

IoU : Intersection over Union, object detection에서의 성능지표로, 다음과 같다.

 

Non-Maximum Suppression

모델의 학습이 완료된 후 RPN모델을 예측시키며 한 객체당 여러 proposal값이 나올텐데, 이 문제를 해결하기 위해 NMS알고리즘을 사용해 proposal의 개수를 줄인다. 알고리즘은 다음과 같다.

  1. box들의 socre를 기준으로 정렬한다.
  2. score가 가장 높은 box부터 시작해 다른 모든 box들과 IoU를 계산해 0.7이상이면 같은 객체를 detect한 box라고 생각해 해당 box는 지운다.
  3. 최종적으로 각 object별로 score가 가장 높은 box 하나씩만 남게된다.

Bounding box regression

Bounding box regression에는 4개의 좌표값을 쓰는데, t라는 값 자체가 4개의 좌표값을 갖고있는 하나의 벡터라고 보면 되며 다음과 같은 값을 갖는다.

 

Loss Function

Final Loss = Classification Loss + Regression Loss

Bounding box regression Loss

반응형

'DL > Object detection' 카테고리의 다른 글

FPN (Feature Pyramid Networks for Object Detection)  (0) 2024.01.17
YOLO v2  (1) 2024.01.15
YOLO v1  (1) 2024.01.05
Fast R-CNN  (0) 2024.01.05
R-CNN  (0) 2024.01.05