이번에 읽어볼 논문은 'Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks' 입니다.
Fast R-CNN과 R-CNN에서 region proposals는 selective search로 생성되었습니다.
Faster R-CNN에서는 region proposals를 생성하는 작업과 object detection이 동일한 CNN에서 수행됩니다. 즉, region proposal을 생성하는 알고리즘과 detection 알고리즘이 하나로 통합된 신경망이 탄생된 것입니다. 이러한 설계 덕분에 detection 속도가 빨라지게 됩니다.
Faster R-CNN은 region proposal를 생성하는 신경망인 RPN(region proposals network)과 object detection 신경망을 결합하여 하나의 신경망으로 통합할 수 있었습니다. 논문에서 소개하는 RPN이 무엇이고 어떤 과정을 통해 두 작업을 하나로 통합할 수 있었는지 알아보겠습니다.
Region Proposal Network(RPN)
RPN은 region proposal을 생성하는 network 입니다. RPN은 fully convolutional network로 이루어져 있고, detection network인 R-CNN과 연산량을 공유합니다. 그리고 출력값으로 object score(1 if object, 0 otherwise)와 proposals를 생성합니다.
R-CNN과 Fast R-CNN에서 selective search로 region proposals를 생성하고, 각 proposals의 object class와 bounding box를 예측하기 위해 CNN network를 사용했습니다. 따라서 R-CNN과 Fast R-CNN에서 region proposal 방법과 detection 신경망은 서로 분리되어 있었습니다.
이 둘을 분리하는 것은 좋은 생각이 아니었습니다. 예를 들어, Selective search가 false negative를 갖고 있을 때, 이 오류는 detection 신경망에 직접적으로 안좋은 영향을 끼칠 것입니다. 이 둘을 하나로 묶어 서로 상관관계를 지니게 하는 것이 더 날 것입니다.
Faster R-CNN에서, region proposal을 생성하는 방법을 selective search가 아닌 CNN을 사용합니다. 그리고 이 CNN을 RPN이라고 부릅니다. 이 CNN은 detection network와 함께 사용됩니다. 하나의 CNN으로 region proposal을 생성하고 object detection도 수행하는 것입니다. 논문에서 CNN 모델은 ZFNet 또는 VGGNet을 사용했습니다. 전체적인 구조는 다음과 같습니다.
RPN이 region proposal을 생성하는 과정입니다.
1. 이미지가 conv layers를 통과하여 feature map이 추출됩니다.
2. feature map의 각 위치에서 sliding window(논문에서는 3x3 filter)을 사용합니다.
3. 각 위치에대해 region proposals를 생성하기 위해 k개의 anchor box가 사용됩니다. (논문에서는 128, 256, 512 3개 scale과 1:1, 1:2, 2:1 3개 aspect ratio를 사용하여 9개의 anchor box를 사용합니다.)
4. cls layer는 k개의 박스에 대해 객체가 있는지 없는지에 대한 2k scores를 출력합니다.(객체가 존재하면 1, 객체가 존재하지 않으면 0)
5. reg layer는 k개 박스의 좌표(박스 중앙 x,y좌표, 높이, 넓이)정보인 4k를 출력합니다.
6. feature map의 크기가 W X H 이면, 총 WHk개 anchors를 사용합니다. 각 위치마다 anchor를 이용하여 region proposals를 생성하는 것입니다. 그리고 생성된 proposal에는 object score, 좌표 총 6개의 정보가 담겨 있습니다. 이 proposal이 detection network(R-CNN)을 거쳐서 class 확률을 갖게 됩니다.
RPN 과정을 좀 더 이해하기 쉽게 풀어놓은 그림입니다.
Feature map에 sliding window(3x3)을 사용하여 Intermediate Layer를 생성합니다. intermediate layer에 1x1 두 개의 conv를 적용하여 cls layer와 reg layer로 나눠집니다. cls layer는 object가 존재할 확률(1 or 0), reg layer는 bounding box의 좌표(중심 좌표, 높이 넓이)를 출력합니다. 그리고 이렇게 생성된 proposal은 RoI layer를 거쳐서 class 확률을 지니게 됩니다.
아래 표는 3개 scales(128, 256, 512), 3개 aspect ratios(1:1, 1:2, 2:1)에 대한 평균 proposal 크기 입니다.
Loss function
Faster R-CNN은 Fast R-CNN과 마찬가지로 multi-task loss function을 사용합니다.
첫 번째 항은 2개 class(object가 있는지 없는지)에 대한 classification loss입니다.
두 번째 항은 object가 있을 때의(p_i*=1) bounding box의 regression loss 입니다.
RPN은 proposal에 object가 존재하는지를 먼저 확인하고 해당 proposal은 object class를 예측하기 위해 detection network로 전달됩니다. 그리고 object의 bounding box를 반환합니다.
RPN으로 대략 6000개의 proposal이 생성되고 non-maximum suppression(NMS)를 사용하여 proposal이 300개로 감소합니다.
Detection Network
RPN을 통해 생성된 proposal은 detection network(Fast R-CNN)로 전달됩니다.
detection network는 proposal을 입력으로 받고 ROI pooling이 수행되어 일정한 크기의 vector를 생성합니다.
이 vector는 2개의 FC layer로 입력됩니다.
한개는 object class을 예측하는 FC layer, 다른 하나는 bounding box regressor을 수행하는 FC layer입니다.
4-Step Alternating Training
논문에서 Faster R-CNN을 학습하기 위해 4-step training algorithme을 사용합니다. feature map이 RPN과 detection network에서 공유되기 때문에 기존과 다른 training 절차를 적용한 것입니다. RPN이 제대로 학습되지 않은 상태에서 생성된 proposal을 이용하면 뒤에 있는 detection layer가 제대로 학습되지 않습니다. 그래서 여러 절차를 걸쳐 학습하게 됩니다.
1. imagenet pre-trained model을 불러와서 RPN을 학습합니다.
2. 학습된 RPN에서 생성된 proposal을 사용하여 뒤에 있는 detection network(Fast R-CNN)를 학습합니다.
3. detector network와 RPN을 불러온 다음 CNN의 모든 가중치를 고정시킨채 RPN을 학습합니다.
4. CNN의 가중치를 고정시킨 채로 detection network(Fast R-CNN)를 학습시킵니다.
이러한 과정으로 Faster R-CNN이 학습됩니다.
참고자료
[3] towardsdatascience.com/review-faster-r-cnn-object-detection-f5685cb30202
'논문 읽기 > Object Detection' 카테고리의 다른 글
[논문 읽기] Feature Pyramid Net, FPN(2017) 리뷰 (0) | 2021.03.05 |
---|---|
[논문 읽기] SSD(2016) 리뷰, Single Shot MultiBox Detector (0) | 2021.03.01 |
[논문 읽기] Fast R-CNN(2014) 리뷰 (1) | 2021.02.14 |
[논문 리뷰] SPPnet (2014) 리뷰, Spatial Pyramid Pooling Network (5) | 2021.02.10 |
[논문 리뷰] YOLO v2 (2017) 리뷰 (0) | 2021.02.06 |