[논문 full 번역 + 이해를 위한 추가설명] Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
+ 이나스AI에는 인공지능 관련 다양한 강의가 있습니다.
- Object detection, Text To Speech, Reinforcement learning, OCR, Chatbot, Time series prediction,
- Meta learning, eXplainable AI, Transformer/BERT/GPT, Graph-based ML, etc
- 소스코드, 다이어그램 및 중간데이터에 기반하여 인공지능 알고리즘들의 작동원리와 구조를 이해하기 쉽고 정확하게 설명합니다.
+ 작업할 때 켜놓는 라이브 스트리밍 study with me 채널도 운영하고 있습니다.
[] 안에는 의미를 명확히 하고자 원문 영어 표현이,
() 안에는 원문에서 작성된 부연 설명이,
<> 안에는 이해를 돕기 위해 번역자가 추가한 부연 설명이 작성되었습니다.
Abstract
현존 최고의 (State-of-the-art, SOTA) object detection 네트워크 방법들은 물체의 위치를 가정하는 region proposal algorithm을 사용한다. SPPnet 그리고 Fast R-CNN과 같은 발전이 도입됨으로써 detection network의 실행시간이 감소되었다. 하지만, region proposal을 계산하기위한 연산에서는 여전히 시간이 많이 걸린다. 이 Faster R-CNN 연구에서는 Region Proposal Network (RPN) 방법을 도입한다. RPN은 detection network를 구성하는 convolutional layer들에서 추출된 image feature들을 공유하며, 이러한 특성은 region proposal 작업을 매우 빠르게 하였다. RPN은 fully-convolutional network로 구성되어있으며, 물체가 있을만한 영역들 (Region of Interest, RoIs)을 박스로 예측하고, 각 박스는 물체가 있을 예측된 확률값을 갖는다. RPN은 end-to-end 방식으로 훈련되어, 가능한 정확하게 물체가 있을만한 영역을 제안하고, 이 영역들은 Fast R-CNN 네트워크에서 사용되어, 최종 예측인 bounding box로 표시된 물체의 위치와 그 물체의 class를 산출한다. RPN과 Fast R-CNN을 번갈아 가며 최적화하는 방법을 사용하면, RPN과 Fast R-CNN은 convolutional feature들을 공유하며 훈련될 수 있다. VGG-16 모형을 기반으로 했을 때, 우리의 Faster R-CNN 방법은 GPU에서 동작할 때, 모든 단계를 처리하는 기준으로, 5fps 를 달성하였다. 이러한 속도 뿐만 아니라, object detection 의 accuracy에서 state-of-the-art를 달성했는데, 하나의 이미지 당 300개의 region proposal을 사용하는 설정으로, PASCAL VOC 2007 dataset 에서 73.2% mAP, PASCAL VOC 2012 에서 70.4% mAP를 보였다. 소스코드는 다음의 주소에서 확인 할 수 있다 : https://github.com/ShaoqingRen/faster_rcnn
1 Introduction
Object detection 분야에서 최근의 발전은 region proposal 방법들과 거기서 제안된 영역들 [RoIs]에 기반하여 물체의 위치를 예측하는 R-CNN 방법에 의해 가능했다. 제안된 영역을 기반으로 물체의 위치를 예측하는 초기의 방법들은 연산량이 지나치게 많았다. 하지만 그러한 연산은 proposal을 산출하는 네트워크가 그 이외 부분 네트워크들의 convolution들을 공유하면서 크게 감소하였다. 최근 Fast R-CNN 방법은 region proposal에서 소모되는 시간을 제외한다면 거의 실시간 object detection 성능을 달성했다. 즉, 현재 state-of-the-art detection system에서 속도를 느리게하는 부분이 proposal들을 산출하는 부분이 라는 의미이다.
Region proposal 방법들은 아래와 같은 방법들이 사용되고 있다. Selective Search (SS)은 가장 많이 사용되는 방법들 중 하나인데, 이미지 내의 low-level feature에 기반하여 superpixel들을 반복적으로 통합해나가는 방식이다. 속도가 빠른 detection network와 비교하여, RoI들을 제안하는 Selective Search는 매우 느리며, CPU에서 동작할 때, 하나의 이미지 당 2초의 처리사간을 소모한다. EdgeBoxes 방법은 예측된 RoI의 quality와 처리속도 사이의 적절한 균형을 보여주는 방법인데, 하나의 이미지에서 RoI들을 예측하는데 0.2초가 소요된다. 그럼에도 불구하고, region proposal 단계는 detection network의 속도에 비해 여전히 많은 실행시간을 소모한다고 볼 수 있다.
위의 방법들에서 주목할 점은 RoI들에 기반하여 물체의 위치를 예측하는 CNN 계열의 detection network는 GPU에서 동작하는데, RoI를 예측하는 algorithm들은 CPU에서 동작한다는 점이며, 이것이 실행속도의 차이를 야기한다고 볼 수 있다. 그렇기 때문에, RoI들을 예측하는 방법들의 속도를 높이기 위해서는 이것들이 GPU에서 구동될 수 있도록 재구현하는 것이 필요하다. 이러한 접근은 효과적인 기술적 해법일 것이다. 그런데, 위의 RoI추출 알고리즘들이 GPU에서 동작하도록 재구현하는 것은 딥러닝 기반의 down-stream detection network와 협응이 되지 않을 수도 있고, 따라서, 연산을 공유하는 것이 어려워 질 수 있다. 이 Faster R-CNN 연구에서, 우리는 RoI를 산출하는 algorithm 자체를 딥러닝 기반의 모형으로 변경했다. 따라서 RPN은 GPU에서 매우 빠르게 동작할 수 있고, 다른 딥러닝 network와도 convolution 공유 등의 협응이 잘 이루어질 수 있다.
우리가 제안한 Region Proposal Networks (RPNs)는 현재 존재하는 state-of-the-art object detection network <Fast R-CNN 등을 의미>와 convolution layer들을 공유할 수 있다. 이렇게 convolution들을 공유하는 방식에 따라, test 할 때, RoI들을 산출하는데 소요되는 시간은 매우 적다 (이미지 당 10ms 소모)
Fast R-CNN과 같이 RoI에 기반하여 물체의 위치를 예측하는 방법들에서 사용되는 convolutional feature map들이 RoI를 생성하는데 사용될 수 있음을 확인하였다. 이미지에서 추출된 feature map들은 RPN에서 RoI를 생성할 때 사용된다. Feature map의 각 픽셀은 9개의 anchor box를 갖는데, RPN은 각 anchor box에 대해서 물체가 있을 확률과 regression coefficient를 예측한다.
우리의 RPN은 fully-convolutional network (FCN) 이며, RoI를 예측하는 목적으로 end-to-end 방법에 따라 훈련될 수 있다. RPN과 Fast R-CNN object detectio network 를 통합하기 위하여, region proposal 작업에 대해 fine-tuning 하고 그런 뒤 RPN과 여기서 산출되는 RoI는 고정한 채 object detection 목적으로 fine-tuning을 하는식의 번갈아 가면서 훈련하는 방법을 제안한다. 이러한 방식을 따르면, 전체 네트워크의 수렴이 빠르게 이루어지고, RPN에 의한 region proposal 작업과 Fast R-CNN에 의한 object detection 작업에서 conv feature들이 공유되므로 통합된 네트워크가 구축된다고 볼 수 있다.
우리의 Faster R-CNN <RPN + Fast R-CNN 으로 볼 수 있음>을 PASCAL VOC detection benchmarks로 검증했는데, detection accuracy가 기존의 Selective Search + Fast R-CNN 방식보다 높았다. Faster R-CNN에서 가장 뛰어난 점은 Selective Search에서 소요되는 RoI 계산 시간을 크게 줄인 것이며, 이미지 당 10ms 정도 소모된다. Faster R-CNN에서 매우 깊은 딥러닝 모델을 사용하더라도, 이것이 GPU에서 구동된다면, 모든 과정을 처리하고도 5fps가 달성된다. 이러한 높은 속도와 더불어 좋은 성능 또한 입증됐는데, PASCAL VOC 2007에서 73.2% mAP, PASCAL VOC 2012에서 70.4% mAP를 달성하였다. Faster R-CNN 소스코드는 다음 주소에서 확인 가능하다 : https://github.com/ShaoqingRen/faster_rcnn
2 Related Work
최근 몇몇의 연구에서 물체 class에 특정되는 또는 class와 무관한 bounding box로 물체의 위치를 예측하는 딥러닝 방법이 제안되었다. OverFeat 방법에서 fully-connected (fc) layer가 훈련되었고, 이미지 내 하나의 물체의 위치를 특정하는 박스 좌표를 예측하였다. 이후 fc layer는 여러개의 class와 관련되는 물체들의 위치를 예측하기 위해 conv layer로 변환되었다. Multibox 방법은 네트워크의 마지막 fc layer에서 여러개 (예를 들어, 800개) 박스를 예측함으로써 region proposal들을 생성하는데, 이 방법은 R-CNN object detection 에서 사용되었다. Proposal network는 한장의 이미지 또는 여러장의 분할된 이미지에 적용될 수 있다. OverFeat과 MultiBox에 대해서는 우리의 Faster R-CNN의 context와 관련하여 더 자세히 논의해볼 것이다.
Convolutions에서 연산을 공유하는 방법은 큰 주목을 받고있는데, 이 방법을 통해 효율성, 정확성, visual recognition 이 가능하기 때문이다. OverFeat 방법은 classification, localization, 및 detection 작업을 하기위하여, image pyramid 방식으로 conv feature들을 연산한다. 효율적인 region 기반의 object detection과 semantic segmentation을 구현하기위하여 공유된 conv feature maps에 adaptively-sized pooling (SPP)을 사용하는 방법이 제안되었다. Fast R-CNN은 공유된 conv feature들 <앞단의 input image에서 feature map을 추출하는 CNN과 뒷단의 물체의 위치와 class를 예측하는 CNN에서 공유된 conv feature를 의미>을 기반으로 detector를 end-to-end 방식으로 훈련될 수 있고, 설득력있는 수준의 accuracy와 speed를 보인다.
3 Region Proposal Networks
Region Proposal Network (RPN)은 feature map을 input으로 받아들여서 물체가 있을 만한 영역인 RoI들과 RoI 박스에 물체가 있을 확률을 예측한다. 우리는 RoI를 산출하는 RPN을 fullyconvolutional network로 구축하였다. 우리의 목표는 연산을 Fast R-CNN object detection network와 공유하도록 만드는 것이기 때문에, RPN과 Fast R-CNN이 공유하는 공통의 conv layers가 필요하다고 생각했다. 우리의 실험에서, 우리는 5개의 공유가능한 conv layer가 있는 Zeiler and Fergus 모형 (ZF), 13개의 공유가능한 conv layer가 있는 Simonyan and Zisserman 모형 (VGG)을 조사하였다.
Region proposal들을 생성하기 위하여, 앞단의 CNN에서 추출된 conv feature map에 새로운 CNN layer을 적용하였다. 이 CNN layer는 3x3 window에 1 padding을 사용하여, 입력된 conv feature map의 사이즈가 유지되도록 하였다. ZF net을 사용할 때는 256개의 windows, VGG를 사용할 때는 512개의 windows를 사용하였다. 이렇게 생성된 feature map은 두개의 1x1 window를 사용하는 CNN (box-regression layer (reg), box-objectness layer (obj)) 에 각각 입력된다. 이러한 RNP 구조는 하나의 position을 기준으로 Fig. 1 (left)에 기술되어있다.
<fully connected 로 나와있는데 소스코드는 달라서 소스코드 방식으로 내용 변경함>
Conv layer에서 activation function은 ReLU가 사용되었다.
Translation-Invariant Anchors
Sliding-window가 적용되는 각 지점마다, RPN은 k개의 region proposal들을 예측하며, 따라서 reg layer는 4k개의 예측값을 출력하는 것이다.
<k=9이면, 각 지점마다 9개의 anchor box가 있는 것이고, anchor box를 기반으로 region proposal 역시 9개가 예측된다. 하나의 region proposal은 4개의 값 (xmin, ymin, xmax, ymax) 으로 특정되므로, reg layer를 통해 각 지점에서 4x9=36개의 예측 출력값이 생성된다고 볼 수 있다>
cls layer는 물체가 있을 확률과 없을 확률을 반영하는 2k개의 예측값을 출력한다.
<k=9이면, 각 지점에서 9개의 region proposal이 예측된다. 각 region proposal에서 물체가 있을 확률과 없을 확률 2개의 예측값을 가지므로, 각 지점에서 9x2=18개의 예측값이 출력된다> k개의 proposal들은 anchor라고 불리는 k개의 reference 박스에 대하여 상대적 파라미터화된다. 각 anchor는 sliding window의 중심에서 생성되며, 생성된 9개의 anchor는 다양한 크기와 비율을 가진다. 우리는 3개의 scale옵션과 3개의 aspect ratio 옵션을 사용하였고, 이것은 각 sliding window의 위치에서 크기와 비율이 다른 9개의 anchor들을 생성한다. Size가 WxH인 feature map (일반적으로 WxH는 2400 이하)에서, 총 WxHxk개의 anchor들이 생성되게 된다. 우리 접근법의 중요한 특성은 이러한 방법이 anchor들과 anchor들로 부터 산출된 proposal을 계산하는 방법이 translation invariant하다는 것이다.
MultiBox 방법과 비교하면, 이것은 800개의 anchor들을 생성하기위해 k-means를 사용하는데, 이 방식은 translation invariant 하지 않은 방법이다. If one translates an object in an image, the proposal should translate and the same function should be able to predict the proposal in either location. MultiBox anchor들은 translation invariant 하지 않기 때문에, (4+1)×800 차원의 output layer가 필요한 반면, 우리의 접근법은 (4+2)×9 차원의 output layer가 필요하다. 우리의 proposal layer들은 더 적은 수의 parameter를 사용한다. VGG-16를 사용하는 RPN은 2.4 million 개의 parameter를 사용한다. 따라서, RPN은 PASCAL VOC와 같이 작은 dataset에서 overfitting될 위험이 적다.
A Loss Function for Learning Region Proposals
RPN을 훈련하기위해, 우리는 각 anchor에 binary class label (물체가 있음 또는 없음)을 부여했다. 다음의 조건을 만족하는 두 종류의 anchor에 대해서 positive label을 할당했다 : (i) ground-truth box와의 IoU값이 가장 큰 anchor/anchors (ii) ground-truth box와의 IoU가 0.7 이상인 anchor들. 즉, 하나의 ground-truth box가 여러 anchor들에 positive label을 부여할 수 있다는 의미이다. Ground-truth box와 IoU가 0.3 이하인 non-positive anchor들에 negative label을 부여했다. Positive 또는 negative 로 labeling 되지 않은 anchor들 <anchor에 물체가 확실히 있는것도, 없는것도 아닌 애매한 경우들> 은 invalid로 labeling되며, 훈련 과정에서 사용되지 않았다.
이러한 정의에 따라, 우리는 Fast R-CNN의 muti-task loss를 참조해 최소화 해야하는 objective function을 정의했다. 이미지에 대하여, Faster R-CNN의 loss function은 다음과 같다.
<아래의 loss function은 RPN에서 적용되는 loss function으로 보인다. 뒷단의 Fast R-CNN 구조에서 사용되는 loss function도 거의 동일하지만, 아래의 loss function 요소들 설명 (예를들어, i는 anchor index) 는 RPN에서 사용되는 데이터 기준으로 설명이 되었다>
$$$$L(\{p_i\},\{t_i\}) = \dfrac{1}{N_{cls}} \sum\limits_{i} L_{cls} (p_i,p_i^*) + \lambda\dfrac{1}{N_{reg}}\sum\limits_{i}p_i^*L_{reg}(t_i,t_i^*) \;\;\;\;\; (1)$$$$
$$$i$$$는 mini-batch 내에서, anchor의 index를 의미한다. $$$p_i$$$는 anchor i에 물체가 있을 예측된 확률값을 의미한다. anchor $$$i$$$의 ground-truth label이 positive라면, $$$p_i^*$$$는 1의 값을 갖으며, negative라면 0의 값을 갖는다. $$$t_i$$$는 vector이며 예측된 region proposal 을 생성하기 위한 4개의 regression coefficient값을 가리킨다. $$$t_i^*$$$는 positive anchor에 대한 ground-truth box를 가리킨다. Classification loss $$$L_{cls}$$$는 두개의 class (object vs not object) 에 대한 log loss 이다. Regression loss로 $$$L_{reg}(t_i, t_i^*) = R(t_i - t_i^*)$$$ 을 사용했는데, R는 smooth $$$L_1$$$ loss function 이다. $$$p_i^* L_{reg}$$$ 항은 regression loss 가 positive anchor 일 경우에만 ($$$p_i^*=1$$$) 활성화 되도록 하는 기능을 하며, positive anchor가 아닐 경우 ($$$p_i^*=0$$$), $$$p_i^* L_{reg}$$$ 항은 0이 된다. cls layer와 reg layer에서 출력은 각각 $$${p_i}$$$, $$${t_i}$$$라고 볼 수 있다. Loss function에서 두 항은 $$$N_{cls}$$$와 $$$N_{reg}$$$로 정규화 되었으며, hyperparameter 가중치 $$$\lambda$$$가 사용되었다.
Regressioin 부분에서 다음과 같은 관계식을 사용하였다.
예측 값일 경우 사용되는 관계식 :
$$$$t_x=\dfrac{(x-x_a)}{w_a},\;\; t_y=\dfrac{(y-y_a)}{h_a},\;\; t_w=\log{(\dfrac{w}{w_a})},\;\; t_h=\log{(\dfrac{h}{h_a})}$$$$
정답 값일 경우 사용되는 관계식 :
$$$$t_x^*=\dfrac{(x^*-x_a)}{w_a},\;\; t_y^*=\dfrac{(y^*-y_a)}{h_a},\;\; t_w^*=\log{(\dfrac{w^*}{w_a})},\;\; t_h^*=\log{(\dfrac{h}{h_a})}$$$$
x, y는 box의 중심을 나타내는 좌표이며, w, h는 box의 width와 height이다. $$$x$$$, $$$x_a$$$, $$$x^*$$$는 각각 예측된 box, anchor box, ground-truth box를 의미한다. (y, w, h 에도 동일하게 적용된다). 이러한 관계식을 통해 RPN에서 하는 작업을 anchor box로 부터 가장 근접한 ground-truth box를 생성하는 regression coefficient를 예측하는 bounding box regression 문제로 볼 수 있다.
<동일한 bounding box regression이 뒷단의 Fast R-CNN에서도 적용된다. 이 때에는 예측된 RoI들로 부터 가장 근접한 ground-truth box를 생성하는 regression coefficient를 예측하는 bounding box regression 문제가 되며, 이때는 CNN구조를 사용하는 RPN과 다르게 fully connected layer가 사용된다>
우리의 방법은 이전의 연구에서 제시된 다양한 feature-map 기반의 방법으로 bounding-box regression을 할 수 있다. 해당 이전 연구에서, bounding-box regression은 임의의 크기를 갖는 영역으로 부터 pooling 된 feature에 대하여 수행되며, regression weight들은 영역의 모든 종류의 크기에서 공유된다. 우리의 방법에서는 regression에 사용되는 feature map에 같은 크기의 window를 사용한다. 이미지 내 다양한 크기의 물체를 적절히 처리하기 위하여, k개의 bounding-box regressor가 학습되었다. 각 regressor 는 하나의 scale과 하나의 aspect ratio를 담당하며, k regressor는 parameter를 공유하지 않는다. 이와 같은 방식으로, 비록 feature map은 고정된 크기와 비율을 같지만, 이미지 내에 존재하는 다양한 크기의 box들을 예측 할 수 있다.
Optimization
Fully-convolutional network로 구현된 RPN은 back-propagation과 stochastic gradient descent (SGD)를 사용하여 end-to-end 방식으로 학습된다. 네트워크를 훈련할 때, 우리는 "이미지 중심"의 샘플링 방법을 사용했다. 각 mini-batch는 많은 수의 positive와 negative anchors를 가지는 하나의 이미지로부터 발생한다. 모든 anchor들에 대하여, loss function을 최적화하는 것은 가능하지만, 이렇게 훈련하면 네트워크가 더 많은 수를 차지하는 negative 샘플들쪽으로 bias가 될 수 있다. 대신에, positive와 negative anchor들이 1:1 비율을 갖도록 이미지에서 256개의 anchors를 무작위로 샘플링한 뒤, mini-batch에 대한 loss function을 계산한다. 만약 이미지 내에서 positive sample이 128개 이하라면, mini-batch에 데이터를 추가한다.
평균이 0, 표준편차가 0.01인 Gaussian 분포에서 값을 샘플링하여 모든 layer들의 parameter를 초기화하였다. 다른 layer들 (예를 들어, 공유된 conv layers)은 일반적인 방법을 따라 ImageNet 분류 문제로 사전훈련된 네트워크 parameter로 초기화하였다. 우리는 메모리를 보존하기 위하여 ZF net과 VGG에서는 conv3_1과 그 위쪽에 있는 layer들을 tune 했다. PASCAL dataset에서 60k개의 mini-batches에 대해서는 0.001의 learning rate이 사용되었고, 이후 20k개의 mini-batches에 대해서는 0.0001 learning rate가 사용되었다. Optimizer에서는 0.9 momentum과 0.0005 weight decay를 사용하였다. 우리의 Faster R-CNN 구현은 Caffe로 작성되었다.
Sharing Convolutional Features for Region Proposal and Object Detection
지금까지, 우리는 region proposal 생성을하는 RPN을 어떻게 훈련하는지 설명했으며, RPN에서 생성된 RoI기반으로 object detection을 하는 방법은 아직 설명하지 않았다. Detection network로써, 우리는 이전의 Fast R-CNN을 그대로 차용하였고, RPN과 Fast R-CNN에서 공유된 conv layer들을 훈련하는 방법을 설명할 것이다.
<필자가 테스트한 코드에서 Fast R-CNN 부분은 conv layer가 존재하지 않았고 3개의 fully connected layer로 구성되어있었음. FC1은 RoI pooling 된 데이터를 처리했고, FC2는 FC1에서 처리된 데이터를 입력받아 class 분류 예측을 수행하였고, FC3는 FC1에서 처리된 데이터를 입력받아 bounding box regression coefficient를 예측했다>
훈련이 개별적으로 이루어진 RPN 과 Fast R-CNN은 그들의 conv layer들을 다른 방식으로 변경할 수 있다. 따라서, 우리는 두개의 네트워크를 개별적으로 훈련하는 대신에 이 두 네트워크 사이에 conv layer들을 공유할 수 있는 기술을 개발해야한다. RPN과 Fast R-CNN을 하나의 네트워크로 통합하고, 이것들을 통합적으로 backpropagation을 통해 최적화하는 방법은 그리 간단하지 않다.
Fast R-CNN 훈련은 고정된 object proposal을 사용하는데, Fast R-CNN이 학습될 때, 동시에 proposal 방식이 변한다면 네트워크의 수렴을 보장할 수 없기 때문이다. 이러한 joint 최적화는 앞으로 다룰만한 흥미로운 주제이다. 우리는 alternating 최적화를 통해 공유된 feature들을 학습하는 4단계의 실용적인 훈련 알고리즘을 개발했다.
첫번째 단계에서, 위의 기술된 방식으로 RPN을 훈련한다. RPN은 ImageNet으로 사전학습된 모형의 parameter들로 초기화되고, region proposal task에 맞게 end-to-end 방식으로 fine-tune된다. 두번째 단계에서는, RPN에서 생성된 proposal을 사용하여 별도의 Fast R-CNN 기반의 detection network를 훈련한다. 이 detection network 또한 ImageNet으로 사전훈련된 모형의 parameter들로 초기화된다. 이 시점에서, RPN과 Fast R-CNN은 conv layer들을 공유하지 않는다. 세번째 단계에서는, RPN을 초기화하고 fine-tuning하기위해서 detector network <Fast R-CNN>을 사용하며, shared conv layers는 고정된다. 현재는, RPN과 Fast R-CNN이 conv layer를 공유하는 상태이다. 마지막으로, 공유된 conv layers를 고정시키고, 우리는 Fast R-CNN의 FC layers를 fine-tuning 한다. 이러한 방식으로, RPN과 Fast R-CNN은 동일 conv layers를 공유하고, 통합된 network를 형성한다.
Implementation Details
우리는 RPN과 object detection network를 single-scale image로 훈련하고 테스트했다. Single-scale을 만들기 위하여, 원본 이미지의 짧은쪽 길이가 s=600 pixel이 되도록 이미지를 rescale하였다. 여러 scale을 통한 feature 추출을 accuracy를 향상시킬 수도 있지만, 전체적인 훈련 및 동작 속도는 느려질 것이다. ZF net과 VGG net에서 re-scaed image에 대해, 마지막 conv layer에서 총 stride는 16 pixel이다. 따라서, PASCAL image (~500x375)에서는 stride가 ~10 pixel로 사용되어야 했다. 그런 큰 stride가 이미 좋은 결과를 주기는 하지만, 더 작은 stride가 더 향상된 결과를 줄 것이다.
Anchor에 대해서는, 우리는 $$$128^2$$$, $$$256^2$$$, $$$512^2$$$ pixel로 구성된 3개의 scale과 1:1, 1:2, 2:1로 구성된 3개의 aspect ratio를 사용하였다. 우리의 algorithm은 크기가 큰 proposal을 예측하기 위해 receptive field보다 더 큰 anchor box 사용을 허용한다
그러한 예측은 불가능하지만은 않다. 만약 물체의 중간부분만 보인다면, 모형은 물체의 범위를 거칠게 예측한다.
이러한 설계를 통해, 큰 proposal을 예측할 때, 우리의 해결법은 다양한 scale의 feature 또는 sliding window가 필요하지 않으며, 이러한 특성은 실행 시간을 큰 폭으로 감소시킨다. Fig. 1 (right)는 넓은 범위의 scale과 aspect ratio를 커버하는 우리 방법의 장점을 보여준다. 아래의 표는 ZF net (s=600)을 사용했을 때, 각 anchor에서 학습된 proposal 들의 평균 크기를 보여준다.
Image의 영역을 넘어가는 anchor box들에 대해서는 조치를 취해야한다. 훈련 과정동안, image의 영역을 넘어가는 anchor box들은 무시되고, loss 에 반영되지 않는다. 1000 x 600 image의 경우, 총 약 20k개 (60 x 40 x 9)의 anchor box가 있다. Image 영역을 넘어가는 anchor box들을 제외하면, 훈련을 위한 이미지 하나 당 약 6k개의 anchor box들이 남게된다. 훈련 시에, image의 영역을 넘어가는 anchor box들을 제외하지 않는다면, 그러한 anchor box들은 loss function에 error 항을 발생시킬 것이고, 훈련이 수렴되지 않을 것이다. 테스트 때에는, 우리는 모든 이미지에 대해서 fully-convolutional RPN을 적용한다. 이러한 방식은 test image 영역을 넘어가는 proposal box들을 생성할 것이고, 우리는 test image 영역에 맞게 anchor box를 clip 한다.
몇몇의 RPN proposal들은 서로 상당히 겹칠 수 있다. 이러한 중복을 줄이기 위하여, 우리는 proposal regions에 대하여 cls score에 기반하여 nonmaximum suppression (NMS) algorithm을 적용했다. NMS를 위한 IoU threshold를 0.7로 고정하면, 이미지 당 2k개의 proposal region들이 남게 된다. 우리가 제시할 결과에서, NMS를 사용하는 것은 proposal들의 개수를 감소시킬 뿐 최종 detection accuracy에 악영향을 주지 않음을 밝혔다. NMS를 시행한 이후, 우리는 상위 N개의 proposal region들을 detection network에 전달하였다. 우리는 2k개의 RPN proposal들로 Fast R-CNN을 훈련했다. 테스트 할 때는, 각기 다른 proposal 개수로 모델의 성능을 평가했다.
4 Experiments
우리는 PASCAL VOC 2007 detection benchmark를 사용하여 Faster R-CNN을 종합적으로 평가했다. This dataset consists of about 5k trainval images and 5k test images over 20 object categories. 이 dataset은 5k의 trainval image와 5k개의 test image로 그리고 20개의 물체 class로 구성되어있다. PASCAL VOC 2012 benchmark를 활용하여 몇몇의 모형에 대한 결과도 제시할 것이다. ImageNet으로 사전 학습된 네트워크로서 우리는 5 conv layer와 3 fc layer로 구성된 ZF net의 "fast" version과 13 conv layer와 3 fc layer로 구성된 VGG-16 모형을 사용하였다. 우리는 사전에 mean Average Precision (mAP) 지표로 detection을 평가했다. 왜냐하면, 이것이 object detection을 위한 실제 metric이기 때문이다.
Table 1 (top)은 Fast R-CNN이 다양한 region proposal 방법들로 훈련 및 테스트되었을 때의 결과를 보여준다. 이러한 결과들은 ZF net를 사용하여 산출되었다. Selective Search (SS)에서, 우리는 "fast" mode를 사용하여 2k개의 SS proposal들을 생성했다. EdgeBoxes (EB)에 대해서, 우리는 0.7 IoU로 설정되어있는 기본 EB setting을 사용해 proposal을 생성헀다. SS 는 58.7% mAP를 보여주었고, EB는 58.6% mAP를 보여주었다. Fast R-CNN을 사용하는 RPN은 300개의 proposal을 생성했을 때, 59.9% mAP 라는 경쟁력있는 결과를 달성헀다. RPN을 사용하는 것은 공유된 conv 연산으로 인해 SS나 EB를 사용할 때 보다 더 빠른 detection system으로 연결된다. proposal을 적게 만들 수록, region-wise fc cost는 감소된다. 다음으로, 우리는 RPN에서 몇몇의 ablation을 고려한다. 그리고 proposal quality는 아주 깊은 신경망을 사용할 때 향상된다는 것을 보일 것이다.
Table 1 : PASCAL VOC 2007에서 detection 결과 (VOC 2007 trainval으로 훈련 됨). Detector는 ZF 기반의 Fast R-CNN이고, 훈련과 테스트에 다양한 proposal 방법들이 사용되었다.
Ablation Experiments
Proposal 방법으로서 RPN의 동작을 조사하기위하여, 우리는 몇몇의 ablation 실험을 수행했다. 첫째로, RPN과 Fast R-CNN detection network 사이에서 공유된 conv layer의 효과를 보였다. To do this, we stop after the second step in the 4-step training process. 이 실험을 하기위해, 우리는 4단계로 구성된 훈련 절차 중 두번째 단계 이후를 중지했다. 별도의 network를 사용하는 것은 성능을 약간 감소시켜 58.7%가 되었다 (RPN+ZF, unshared, Table 1) 이러한 성능 감소를 통해 세번째 단계에서 RPN을 fine-tune 하기위해 detector-tuned feature들이 사용되고, 이를 통해 proposal qualty가 향상됨을 확인할 수 있었다.
그 다음으로, Fast R-CNN detection network를 훈련하는데 있어 RPN의 영향를 조사하였다. 이러한 목적을 위하여, 우리는 2k개의 SS proposal들과 ZF net으로 Fast R-CNN을 훈련했다. 우리는 detector를 고정했고 test-time 때 proposal region들을 변경하면서 detection mAP를 평가했다. 이러한 ablation 실험에서, RPN은 detector와 feature들을 공유하지 않았다.
Test-time때, SS를 300 RPN proposal들로 대체하였는데, 56.8% mAP가 산출되었다. mAP에서 손실은 training과 testing proposal들의 비일관성으로 인해 발생했다. 이러한 결과는 다음의 비교를 위한 baseline으로 사용되었다.
꽤 놀랍게도, test-time때, 상위 100개의 proposal들을 사용하는 경우 RPN은 여전히 경쟁력있는 결과 (55.1%)를 보였고, 이는 상위에 ranked된 RPN proposa들이 정확하다는 것을 의미한다. 다른 극단에서, NMS가 적용되지 않은 상위 6k개의 RPN proposal들을 사용하는 것은 55.2% mAP 의 유사한 성능을 보였고, 이는 NMS가 detection mAP에 나쁜 영향을 주지 않으며, false alarm을 줄인다는 것을 의미한다.
그 다음으로, 우리는 RPN의 cls와 reg 출력들의 역할에 대해 test-time때 그것들을 제거하는 방법을 통해 조사하였다. test-time 때, cls layer가 제거되었을 때 (따라서, NMS 와 ranking이 사용되지 않았을 때), 우리는 unscored region에서 무작위로 N개의 proposal들을 샘플링했다. (55.8%), but degrades considerably to 44.6% when N = 100. N=1k개 일때, mAP는 거의 변화하지 않았다 (55.8%), 그러나 N=100일 때, 상당히 성능이 감소하였다 (44.6%). 이것은 cls score들은 가장 높게 ranked된 proposal들의 accuracy에 영향을 준다는 것을 의미한다.
반면, test-time때, reg layer가 제거된다면 (따라서, proposal은 anchor box가 됨), mAP는 52.1%로 떨어졌다. 이것은 high-quality proposal들은 주로 regressed positon으로 인한것임을 암시한다 <즉, reg layer가 RoI를 뽑는데 좋은 역할을 한다>.
우리는 또한 RPN 단독으로 생성한 proposal quality에 대하여 더욱 성능좋은 network들을 효과를 평가했다. We use VGG-16 to train the RPN, and still use the above detector of SS+ZF. 우리는 VGG-16을 RPN 훈련할 때 사용하였고, SS+ZF 방법도 계속 실험했다. mAP는 56.8% (using RPN+ZF) 에서 59.2% (using RPN+VGG) 으로 향상되었다. 이 결과는 좋은 결과인데, 왜냐하면 이것은 RPN+VGG의 proposal quality는 RPN+ZF보다 더 좋음을 의미하기 때문이다. RPN+ZF로 생성된 proposal들은 SS와 비교하여 경쟁력있는 성능을 보여주었다 (training과 testng 시, 두 케이스 모두 58.7% 였다). 따라서, 우리는 RPN+VGG 가 SS보다 더 낫다는 것을 기대할 수 있다. 다음의 실험은 이러한 가설을 뒷받침한다.
Table 2: PASCAL VOC 2007 test set에서 detection 결과. Detector 부분은 Fast R-CNN 과 VGG16이 사용되었음. Training data "07"은 VOC 2007 trainval이 사용됨을 의미하고, "07+12" 는 VOC 2007 trainval과 VOC 2012 trainval의 합집합 set을 의미한다. RPN에 대하여, Fast R-CNN을 위한 train-time proposal들은 2k개가 사용되었다. † 기호는 과거 연구에서 보고된 결과를 의미한다.
Table 3: PASCAL VOC 2012 test set에서 detection 결과. Detector는 Fast R-CNN과 VGG16이 사용되었음. Training data "07" 은 VOC 2007 trainval을 의미하고, "07++12"는 VOC 2007 trainval+test 와 VOC 2012 trainval 합집합 set을 의미함. RPN에 대하여, train-time 때, Fast R-CNN에서 사용되는 proposal들은 2k개가 사용됨.
Table 4: K40 GPU에서 소요 시간 (ms). SS proposal은 CPU에서 평가됨. "Region-wise"는 NMS, pooling, fc, softmax를 포함함.
Detection Accuracy and Running Time of VGG-16
RPN+VGG를 사용함으로써, Fast R-CNN 결과는 unshared feature기반으로 68.5%이었고, 이것은 SS baseline 보다 약간 높은 수준이다. 위에서 보여주듯이, RPN+VGG에서 생성된 proposal들은 SS보다 더 정확하다. 사전에 정의되는 SS와 다르게, RPN은 능동적으로 훈련되고, 더 좋은 network로부터 이점을 취할 수 있다. Feature-shared 변형 케이스에서는 결과가 69.9%가 나왔다. 이것은 strong SS baseline보다 높은 수치일 뿐더러, proposal을 생성하는데 소요되는 시간도 매우 짧다. 우리는 PASCAL VOC 2007 trainval과 2012 trainval의 합집합 set으로 RPN과 detection network를 훈련했고, mAP는 73.2%이었다. PASCAL VOC 2012 test set (Table 3)에서 VOC 2007 trainval+test과 VOC 2012 trainval의 합집합 set으로 훈련된 우리의 방법은 70.4% mAP를 보였다.
Table 4에서는 전체 object detection system들의 실행 시간를 요약한다. SS는 이미지 내의 content에 따라 1-2초를 소모한다 (평균 1.51초이다). VGG-16 기반의 Fast R-CNN은 2k개의 SS proposals을 사용할 때, 320ms를 소모한다 (또는 fc layer들에서 SVD를 사용한다면 223ms이다). Our system with VGG-16 기반의 Faster R-CNN은 proposal과 detection과정 모두를 포함하여 총 198ms를 소모한다. Conv features가 공유된다면, 추가적인 layer들의 연산을 위해 RPN 단독으로 10ms를 소모한다. 우리의 region-wise 연산 또한 작다고 할 수 있는데, 이것은 적은 개수의 proposal (300개) 때문이다. Faster R-CNN은 ZF net을 사용했을 때, 17 fps frame-rate 성능을 보여주었다.
Analysis of Recall-to-IoU
다음으로, 우리는 ground-truth box들에 대한 각기 다른 IoU ratio에서 proposal들의 recall을 산출했다. Recall-to-IoU 지표는 최종 detection accuracy와 약하게 관련되어 있다. Recall-to-IoU 지표는 detection accuracy를 평가하기 보다 proposal 방법을 진단하는데 사용하는 것이 적절하다.
Fig. 2에서, 300개, 1k개, 2k개 proposal 경우의 결과를 보여준다. 우리는 SS 및 EB와 비교하였고, N proposal은 이 방법들에서 산출된 confidence 에 따른 상위 N ranked proposal들이다. Plot을 통하여, RPN 방법은 proposal의 개수가 2k에서 300개로 감소할 때 성능이 증가한 결과를 보여준다. 이 결과는 300개 proposal 또는 그 이하의 개수를 사용할 때 왜 RPN은 좋은 최종 detection mAP를 가지는지 설명한다. 이전에 우리가 분석했듯이, 이러한 특성은 RPN los function의 cls 항에 영향을 미칠 것이다. SS와 EB의 recall은 proposal의 개수가 적어질 때, RPN보다 더 빠르게 떨어졌다.
One-Stage Detection vs. Two-Stage Proposal + Detection
The OverFeat paper [18] proposes a
detection method that uses regressors and classifiers on sliding windows over conv feature maps.
OverFeat is a one-stage, class-specific detection pipeline, and ours is a two-stage cascade consisting
of class-agnostic proposals and class-specific detections. In OverFeat, the region-wise features come
from a sliding window of one aspect ratio over a scale pyramid. These features are used to simultaneously determine the location and category of objects. In RPN, the features are from square (3×3)
sliding windows and predict proposals relative to anchors with different scales and aspect ratios.
Though both methods use sliding windows, the region proposal task is only the first stage of RPN
+ Fast R-CNN—the detector attends to the proposals to refine them. In the second stage of our cascade, the region-wise features are adaptively pooled [7, 5] from proposal boxes that more faithfully
cover the features of the regions. We believe these features lead to more accurate detections.
To compare the one-stage and two-stage systems, we emulate the OverFeat system (and thus also
circumvent other differences of implementation details) by one-stage Fast R-CNN. In this system,
the “proposals” are dense sliding windows of 3 scales (128, 256, 512) and 3 aspect ratios (1:1, 1:2,
2:1). Fast R-CNN is trained to predict class-specific scores and regress box locations from these
sliding windows. Because the OverFeat system uses an image pyramid, we also evaluate using conv
features extracted from 5 scales. We use those 5 scales as in [7, 5].
Table 5 compares the two-stage system and two variants of the one-stage system. Using the ZF
model, the one-stage system has an mAP of 53.9%. This is lower than the two-stage system (58.7%)
by 4.8%. This experiment justifies the effectiveness of cascaded region proposals and object detection. Similar observations are reported in [5, 13], where replacing SS region proposals with sliding
windows leads to ∼6% degradation in both papers. We also note that the one-stage system is slower
as it has considerably more proposals to process.
5 Conclusion
We have presented Region Proposal Networks (RPNs) for efficient and accurate region proposal
generation. By sharing convolutional features with the down-stream detection network, the region
proposal step is nearly cost-free. Our method enables a unified, deep-learning-based object detection
system to run at 5-17 fps. The learned RPN also improves region proposal quality and thus the
overall object detection accuracy
+ 이나스AI에는 인공지능 관련 다양한 강의가 있습니다.
- Object detection, Text To Speech, Reinforcement learning, OCR, Chatbot, Time series prediction,
- Meta learning, eXplainable AI, Transformer/BERT/GPT, Graph-based ML, etc
- 소스코드, 다이어그램 및 중간데이터에 기반하여 인공지능 알고리즘들의 작동원리와 구조를 이해하기 쉽고 정확하게 설명합니다.
+ 작업할 때 켜놓는 라이브 스트리밍 study with me 채널도 운영하고 있습니다.
댓글
댓글 쓰기