영어논문 스터디

Faster RCNN 논문 리뷰

잡담연구소 2021. 1. 15. 01:13

0. Abstract 

faster rcnn의 핵심 아이디어 : RPN

RPN은 전체 이미지의 convolutional feature map을 detection network와 공유해 cost 를 줄이며 region proposal을 가능하게 한다. 

fully convolutional network로 각각의 position에 대해서 object bound(region proposal box) 와 objectness scores (classfication) 동시에 예측한다. 

fast - rcnn처럼 end-to-end로 학습되며, 고품질의 region proposal을 생성한다. 

RPN과 FAST R-CNN은 서로 attention 메커니즘을 이용하여 convolutional features를 공유하며 single network로 합쳐진다. 

vgg16 을 사용했을 때. GPU 사용 시 모든 스텝을 포함해 5fps 밖에 걸리지 않고, 이미지 당 300개의 proposals만으로도 PASCAL VOC 2007, 2012 , MS COCO sota를 달성했다.

 

1. Introduction 

faster rcnn = fast rcnn + RPN

  • 시간이 오래걸린다는 기존 RCNN, SPPNET의 단점을 fast-rcnn이 어느정도 보완했지만, region proposal (selective search 사용) 의 시간이 오래 걸려 real-time이라기에는 역부족한 상태 
  • selective search는 cpu환경에서 이미지당 2초 소요됨. 이보다 좀 더 나은 edgebox의 경우 이미지당 0.2초가 걸리지만 그래도 region proposal에 시간이 너무 오래 걸림 
  • selective search와 같은 알고리즘이 느린 이유는 cpu 내에서 실행되기 때문 -> 연산속도를 높히기 위해서 gpu 내에서 region proposal을 하면 어떨까? 

 

  • fast rcnn과 convolutional layers를 공유하는 RPN으로 위와 같은 문제를 해결할 수 있음. 이미지당 10ms밖에 걸리지 않음 
  • detection 과정에 쓰이는 convolutional feature map을 region proposal을 생성하는 데 써보자!  convolutional feature 위에 fc layer를 좀 추가해 RPN을 형성함으로써 사각형 내 각각의 location에서 bbox regression과 objetness scores 를 학습할 수 있다. 
  • RPN은 fully convolutional network의 일종으로 detection proposals를 생성하는 task에 대해 end-to-end로 학습이 가능합니다. 

 

  • RPN은 다양한 스케일 + aspect ration(가로 : 세로 비율) 에 대해 region proposal이 가능하다.

 

 

  • 이전에 사용하던 (a) multi- sclae , (b) pyramid filter 방식과 달리 RPN은 "anchor"boxes를 통해 다양한 스케일과 다양한 비율에 대해서 proposal이 가능하다 
  • train, test 모두 signle -scale 로 (c)를 사용하였을 때 성능도 좋고, 빠르다. 

 

  •  RPN과 FAST RCNN을 통합해 FASTER RCNN을 만들기 위해,  하나의 proposal 에 대해 region proposal을 위한 fine tunning 과 object detection에 대한 finetunning을 번갈아 합니다. 
  • 수렴속도도 더 빨라지고 두 가지 task (region proposal + object detection) 가 공유하는 conv feature를 갖춘 통합 네트워크도 생성할 수 있습니다.

 

  • 결과로는 selective search를 사용하였을 때보다 detection accuracy도 높고 , 전체 running time이 10ms밖에 걸리지 않았다. vgg16과 같은 깊은 모델을 사용했을 때도 GPU에서 전체 과정에 대해 5fps의 성능을 보여주고 accuracy , speed 부문에서 더 실용적임. 
  • RPN은 feature map으로부터 region을 propose하는 법을 배우므로, resnet-101과 같이 더 깊은 feature에서 쉽게 활용할 수 있다.

 

  •  faster cnn은 cost가 효율적이라 실용적일 뿐만이 아니라 detection accuracy도 향상시킬 수 있는 효과적인 방법! 

 👉 요약 

기존 sppnet이나 fast rcnn은 selective search가 딥러닝이 아닌 그냥 알고리즘 + cpu에서 돌아가기 떄문에 속도가 무지하게 느림. -> 그럼 region proposal을 GPU에서 실행하면 어떨까? 이란 생각에서 RPN이 나옴 

RPN은 일종의 FC network로 convolutional feature map에서 region proposal 이 가능!  게다가 "anchor" 라는 개념으로 multi scale + 다양한 ratio에 대해 region을 잡을 수 있음.

RPN + FAST RCNN = FASTER RCNN이 탄생! convolutional feature map을 share함으로 region proposal과 object detection이 한 번에 그리고 동시에 학습 가능! 

이로 인해 acurracy도 높아지고 속도도 빨라짐 

 

2. Related work

생략

3. Faster R-CNN

  •   Faster Rcnn은 두가지의 모듈로이 통합되어 있는 단일네트워크이다.    - attention 메커니즘을 사용하여 detector(fast rcnn)이 어디에 주목해야할지를 알려줌 2.  Fast R-CNN : 제안된 region을 이용해 detection한다. 
  • 1.  RPN : deep fully convolutional network로 region 을 제안한다. 

 

 

3.1. Region Proposal Networks (RPN)

  • input : 크기와 무관하게 feature map   
  • output : 직사각형의 object proposal + objectness score 
  • Feature map위에 n x n spation window가 슬라이드됨. (n = 3)
  • 각각의 sliding windows는 저차원의 feature로 maaping 됨. 
  • 이후 이 feature들은 두개의 fc layers, ( bbox regression layer & box-classification layer) input이 된다. 
  • n x n convolutional layer를 거친 후 2개의 1 x 1 convoutional로 이어진다. 

 

👉 "n x n convolutional layer를 거친 후 2개의 1 x 1 convoutional로 이어진다. " 이 부분이 머릿속에서 잘 그려지지 않아 다른 블로그의 도움을 받았다. 

vgg16의 경우 CNN을 거쳐 나온 featue map의 경우 14 x 14 x 512 이다. 

3 x 3 x 512 convolutional layer  을 거쳐 anchor boxes들을 만든다.  

이때 padding = same , stride = 1로 해주어야 feature map과 같은 사이즈가 가능하다.

이후 두개의 1x1 convolutional layer를 거치는데, 1x1의 기능은 resnet에서 말했던 것과 같다. 

1 x 1 conv layer에서 각각의 task에 맞게 재구성된다. 1 x 1이 하는 기능이 Fc와 비슷하기때문에 RPN에 대해 일종의 FCN이라고 하는 거 같다.

 

https://yeomko.tistory.com/17

 

3.1.1 Anchors

  • 각각의 sliding window에서, 동시에 여러개의 region proposal (anchor)을 예측한다.

 

 

 

👉 하나의 ground-truth box 위에 여러개의 anchor가 있는 상황이 생길 수도 있다. 

 

 

 

Translation-Invariant Anchors

  • anchor와 anchor와 관련된 proposal을 연산하는 기능이 Translation Invariant (물체가 움직여도 변하지 않는 속성) 한 게 중요하다.
  • 만약 이미지 속의 object가 이동한다면 proposal도 움직이고 예측까지할 수 있어야한다. 
  • multibox의 경우 k-means 방식을 사용했기때문에 non-translation Invariant 하다. 
  • Translation Invariant 한 성질때문에 모델의 사이즈도 (4+2) * 9 로 줄일 수 있다. (k=9일 때) 그렇기에 당연히 파라미터 수도 적어서 over fitting을 방지한다고 한다. 

Multi-Scale Anchors as Regression References

  • faster rcnn과 같이 anchor 피라미드를 사용하는 게 cost가 효율적이다.
  • multiple scale & aspect ratio를 가진 achor를 사용하면 single scale의 feature map과 single ratio를 가지는 filter만 사용해도 되므로 추가적인 cost가 필요없어 서로 featrue를 공유하면서도 매우 효율적이다.

📌 anchor를 사용하게 되면 하나의 feature map과 3x3 windeow만을 가지고도 여러개의 scale과 ratio를 가지는 proposals을 만들 수 있다.    

3.1.2 Loss function

  • 각각의 anchor에 object인지 아닌지를 구분하는 binary label을 붙여줍니다.

 

multi task loss

 

  • i : mini-batch 내 anchor의 인덱스 
  • $p_{i}$ : i번째 anchor가 object일 확률
  • ${p_{i}}^{*}$ : ground_truth label (물체가 실제로 있는지, 아닌지)
  • $t_{i}$ : 예측(계산)된 bbox의 offset (좌표)
  • ${t_{i}}^{*}$ : ground-truth bbox with positive label
  • $L_{cls}$ : 물체가 있는 지 없는지 log loss 
  • $L_{reg}$ : 실제 ground truth와의 차이에 대한 smooth L1 loss ( fast-rcnn과 동일 )

📌 $N_{cls}$ , $N_{reg}$ 에 의해 각각 정규화되고 , $lambda$ 에 의해 가중치가 주어져 두 term 사이에 균형을 맞춰준다.

  • $N_{cls}$ : mini-batch 의 사이즈 (논문의 경우 256)
  • $N_{reg}$ : 앵커의 개수 (WHk로 논문의 경우 ~ 2400)
  • $lambda$ : 논문에서는 10을 주어졌지만, 그리 민감하지 않은 걸 보아 크게 중요한 거 같진 않아보인다 (뇌피셜)

 

 

  • x, y : box의 중심좌표   w, h : box의 너비와 높이
  • (fast rcnn에서는 왼쪽위의 좌표 및 너비,높이였는데 faster에서는 center중심의 anchor라서 중심좌표인 듯)
  • $x$ : 예측된 box , $x_{a}$ : anchor box , $x^{*}$ : ground-truth box

📌 k개의 anchor들은 각각 scale + aspect raio를 맡고 있기때문에, regressor 끼리는 가중치를 공유하지 않는다. 

 

3.1.3 Training RPNs

  • backpropagation + SGD 로 end-to-end 학습이 가능해짐 

 

3.2 Sharing Features for RPNs and Fast R-CNN

📌 RPN과 FAST-RCNN은 서로 다른 방법으로 각자 학습을 진행한다. 그 이후 네트워크끼리 CONV LAYER를 공유한다. 

 

1. Alternating Training

RPN을 학습시킨다 → RPN에서 만들어진 proposal을 이용하여 FAST-RCNN을 학습시킨다. → FAST-RCNN에 의해 fine-tunning된 네트워크는 RPN을 초기화하는데 사용된다. 

 

2, 3 : approximate joint training 부분은 이해가 잘 가지 않아 생략 

논문에서는 altertnating training 을  4step으로 사용하여 학습시킴. 

 

3.2.1 4-step Alternating Training

  1. RPN : pre-train된 ImageNet으로 네트워크를 초기화 한 후 region proposal task에 대해서 end-to-end로 학습한다.

 

 

이런 식으로 이해해봤는데 맞는지 잘 모르겠다. 

1 step과 2step은 각각 conv를 공유하지 않고, 학습하므로 각자 feature map이 다를거다. 

그 이후 3,4 step에서 con v를 공유하고 고정해놓고 이후만 fine tune 함으로써, 비로소 같은 feature map에 대해 ROI를 잡고 학습을 할 수 있어진다.

 

3.3 Implementation Details

  •  s = 600으로 single scale 
  • multi sclae이 accuracy는 조금더 높지만 속도문제로 single scale 사용 
  • 논문에서는 비율 1:1 , 2:1 , 1:2 , 스케일 128, 256,512로 두었지만 세세한 숫자가 중요하지는 않음
    📌 핵심은 multiple ratio, multiple scale을 사용해 러닝타임은 줄이면서 image pyramid와 같은 효과
  • 이미지 경계를 지나가는 앵커박스는 조심히 다뤄야한다. 
  • training 시 , 교차되는 앵커들 무시 -> loss에 영향을 안 미침 대략 20000개 -> 6000개가 됨 
  • test 시 , 서로 교차하는 박스들은 NMS를 사용하여 제거해준다. 
    이때를 위해 class마다 NMS를 사용해 IOU가 0.7 이상인 proposals 만 남긴다. -> accuracy에 큰 문제X
    이후 top -N 순위에 드는 proposals만 detection으로 채택한다. 
  • train은 2000개가 생겼지만 test는 N개의 proposals 만 생긴다. 

나만의 정리

📌 Faster rcnn 이란 region proposal 을 gpu내에서 실행하기 위해 고안된 PRN과 기존 Fast rcnn을 합친 모델

📌 RPN : 기존pyramid image , filter 대신 "Anchor" 를 도입하여 비교적 단 시간내에 같은 효과

전체 feature map에 대해 3X3 sliding window -> 1 x 1 로 object score , bbox regression 계산

📌 어떻게 RPN과 Fast rcnn이 같은 conv net을 공유하는가? 

RPN 학습 -> Fast rcnn 독립적으로 학습 (+ RPN의 proposals 를 이용) -> RPN의 convnet을 Fast rcnn에 의해 fine tune된 convnet으로 갈아끼우기 & RPN의 layer만 학습 (conv 고정) -> 동일한 convnet에 대해 Fast rcnn 학습 

 

맨 처음 읽었던 논문이 Faster - rcnn인데,  그 때와 지금은 느낌이 너무 상이하다. 완전히 이해가 안가는 건 거기서 거기더라도, 확실히 지금이 더 이해가 쉽게 된다.

참고

cocopambag.tistory.com/4

yeomko.tistory.com/17

ganghee-lee.tistory.com/37

yamalab.tistory.com/113  
towardsdatascience.com/faster-rcnn-1506-01497-5c8991b0b6d3  
github.com/puyiwen/faster-rcnn-pytorch  

 

 

 

👾 해당 논문은 이곳에서 확인 : arxiv.org/abs/1506.01497

👾 더 자세한 설명은 유튜브로 gogo : youtu.be/B0xJbdyS0QI

'영어논문 스터디' 카테고리의 다른 글

SSD  (0) 2021.02.01
YOLO v1 리뷰  (0) 2021.01.26
Fast RCNN 논문 리뷰  (0) 2021.01.09
Alexnet 논문 리뷰 - ppt  (0) 2020.11.17
Attention is all you need 논문 리뷰  (0) 2020.11.05