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이라고 하는 거 같다.
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을 붙여줍니다.
- 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
- 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인데, 그 때와 지금은 느낌이 너무 상이하다. 완전히 이해가 안가는 건 거기서 거기더라도, 확실히 지금이 더 이해가 쉽게 된다.
참고
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 |