젠틀맨리그7 2021. 11. 4. 18:36

Faster-CNN 이란?

Fast R-CNN연산에서 가장 많은 시간을 차지 하는 부분이  Region proposal을 추출하는 Selective search 알고리즘입니다. Selective search 알고리즘은 CPU에서 실행되기 때문에 속도가 느립니다. Region proposal 네트워크를 CPU에서 동작하는 Selective search 대신 GPU에서 동작하는 RPN(Region Proposal Network)으로 대체한것이 Faster R-CNN입니다.

 

Fast R-CNN에 RPN이 추가된 Faster R-CNN

Faster R-CNN = RPN(Region Proposal Network) + Fast R-CNN

다시 말해서 Fast R-CNN 구조에서 CNN Feature map과 RoI Pooling  사이에 RoI를 생성하는 RPN(Region Proposal Network)이 추가된 구조입니다. Selective search는 2000개의 RoI를 계산하는데 비해 RPN은 800정도만 계산하면서도 더 높은 정확도를 가지고 있습니다. 모든 Network가 GPU에서 작동하며 속도가 빠르며 진정한 end to end 방식의 모델이라고 할 수 있습니다.

RPN과 Detector의 CNN 공유

 

Faster R-CNN에서는 CNN, RPN, Classification, Bounding box regression이 모두 GPU에서 동작해서 CNN 네트워크를 공유가 가능합니다.

위의 그림에서 처럼 이미지가 CNN을 통과하여 획득한 Feature map을 입력으로 사용하여 RPN이 RoI를 추출합니다.

여기서  RoI는 Feature map이 아닌 원본 이미지에서의 RoI 입니다.

그래서 코드 상에서도 Anchor box와 Scale은 원본 이미지 크기에 맞춰서 같이 생성하고,  Anchor box와 Network 출력 갑사 사이의 오차를 계산하여 네트워크를 훈련 시킵니다.

따라서 원본 이미지 위에서 생성된 RoI는 CNN의 Feature map의 크기에 따라 Rescaling 됩니다. 이렇게 Feature map에 RoI가 투영되고 나면 FC(Fully Connected) Layer에 의해 Classification과 Bounding box regression이 수행됩니다.

 

ROI pooling

위 그림에서 FC Layer를 사용하기에 입력 사이즈를 맞춰 주기 위해 RoI pooling을 사용합니다. SPP Net과 Fast R-CNN처럼 RoI Pooling을 사용하니 원본 이미지의 입력 사이즈도 달라져도 됩니다.

원본 이미지를 Resize 할 때 손실되는 특성이 존재하듯이 Feature map을 RoI pooling에서 max pooling을 통해 Resize 할 때 손실되는 특성 또한 존재합니다.

따라서 이때 손실되는 데이터와 입력 이미지 자체를 Resize할때 손실되는 특성 사이의 Trade off가 각각  VGG가 224x224, ResNet은 600~1024 이기 때문에 입력 사이즈를 고정 시킨 것입니다.

1. RPN (Region Proposal Network)

 

RPN (Region Proposal Network)의 구조
RPN의 동작 구조

이미지를 CNN으로 통과 시켜 Feature map을 추출한 다음 Feature map을 RPN으로 입력합니다.

Feature map위에 n x n window를 sliding window 시켜 Region proposal을 생성합니다. Region proposal을 생성할때 미리 K개의 Anchor box를 정의 해놓습니다. 왜냐하면 Object의 크기 및 비율이 알수 없기 때문에 Anchor box가 Bounding box가 될 수 있습니다. ( [가로 x세로 3종류] x [비율 3종류] = 총 9개의 Anchor box 생성)

생성된 9개의 Anchor box를 이용하여 Classification과 Bounding box regression을 먼저 구한 다음 CNN에서 추출한 Feature map에 대해 3x3 conv filter 256개를 연산하여 Depth를 256으로 만듭니다. 그리고 난 뒤에 1x1 Conv layer 두개 이용하여 각각 Classification과 Bounding box regression을 계산합니다.

RPN에서 1X1 Convolution을 사용하여 Classification과 Bounding box regression을 계산하는데 이때 네트워크를 가볍게 만들기 위해 Binary classification으로 Bounding box에 물체의 유무를 판단합니다.

 

RPN 단계에서 Classification과 Bounding box regression을 하는 이유는 결국 학습을 위한것인데 위 단계로 부터 Positive/Negative examples들을 뽑아내는데 다음 기준을 따릅니다.

 

위의 수식의 뜻은

  • IoU(Intersection over Union)가 0.7보다 크거나(또는 한지점에서 모든 Anchor box중 가장 IoU가 큰 Anchor box)는 Positive example로 생성합니다.
  • IoU가 0.3 보다 작으면 Object가 아닌 Background를 의미하므로 Negative example로 만듭니다.
  • Positive와 Negative 사이의 애매한 값들은 학습 데이터로 사용하지 않습니다.

2. RPN - Multi task loss function

Multi task loss

RPN은 Classification과 Bounding box regression을 수행할때의 Loss 함수는 이 두가지 테스크의 로스를 묶은 Multi task loss 형태 입니다.

Loss의 p_i는 classification을 통해서 얻은 해당 앵커가 Object일 확률를 의미하며 ti는 Bounding box regression 을 통해서 얻은 박스 조정값 벡터를 의미합니다.

 

Bouding box regression loss

Bouding box regression loss의 경우 Fast R-CNN에서 소개되었던 smooth l1함수를 사용합니다.

R-CNN/Fast R-CNN에서는 모든 RoI(Region of Interest)가 크기와 비율에 관계없이 Weight를 공유 했으나 Faster R-CNN에서는 기존과 다르게 K개의 Anchor에 해당하는 K개의 Regressor를 갖게 됩니다.

3. 결론

 

장점

  • R-CNN보다 속도가 250배 향상되었고 성능도 향상되었습니다.
  • Faster R-CNN이 발표된후 수많은 모델이 Faster R-CNN 기반으로 만들어졌고 ciatation이 15,000이 될 정도로 유명한 모델이 되었습니다.

단점

  • 이미지 한장 처리 하는데 5 FPS(0.2 second) 정도 걸리기 때문에 Real time detector가 되기에는 느립니다.
  • RoI Pooling 과정에서 픽셀 손실이 있을 수 있어 높은 정확도가 요구되는 Object detection task에는 좀더 개선이 필요합니다.