0. Abstract
최신 Object Detection Model들은 object location을 추정하기 위해 region proposal algorithm을 사용해왔다.
SPPnet과 Fast R-CNN와 같은 모델들은 detection network에서 running time을 크게 줄였다고 볼 수 있다. 다만 여전히 region proposal 단계에서 병목(bottleneck) 현상이 생긴다는 단점이 있다.
이에 따라 본 논문에서는 Region Proposal 방법으로 RPN(Region Proposal Network)를 제안한다. RPN은 detection network와의 convolutional feature들을 공유하기 때문에 region proposal에 비용이 거의 들지 않는다. (cost-free)
RPN은 object bounds(bounding box regressors, bounding box의 좌표), objectness score(class scores, anchor box안 object의 존재 여부를 점수화)을 동시에 예측하는 FCN(Fully Convolutional Network)이다.
FCN(Fully Convolutional Network): 모든 Layer 가 Convolutional Operation으로 구성된 Network 이다.
또한 Fast R-CNN의 detection 단계를 위한 high-quality Region Proposal을 생성함으로써 end-to-end 학습이 가능하도록 한다.
즉, Faster R-CNN은 RPN과 Fast R-CNN을 결합하여 convolutional feature을 공유하는 단일 네트워크(single network)이다.
위의 사진은 Faster R-CNN을 Training시키는 4개의 step으로, Alternating Training 이라 한다.
Fast R-CNN과 RPN 두 네크워크끼리 공유하는 convolutional layer은 pre-trained된 CNN(Feature Extractor)으로 볼 수 있다.
이는 Attention Mechanism과 비슷하다고 볼 수 있다.
Faster R-CNN은 GPU에서 Deep VGG-16 Model을 이용해여 5 fps(5 frames per second)을 달성했다. 이와 동시에 우수한 Accuracy를 보여줬다. 이는 Faster R-CNN이 이전 object detection model인 Fast R-CNN과 SPPnet에 비해 Speed와 Accuracy 모두에 장점이 있다는 것으로 볼 수 있다.
2015년에 열린 ILSVRC와 COCO 대회에서 Faster R-CNN과 RPN은 여러 분야에서 1등을 차지했다.
1. Introduction
최근 object detection의 발전은 Region Proposal Method들과 Region-based Convolutional Neural Networks(R-CNNs)들의 성공으로부터 기반했다. R-CNN은 속도가 느리지만, Fast R-CNN과 SPPnet에서는 RoI가 projection되는 Feature Map을 공유한 덕분에 R-CNN의 단점을 많이 개선했다.
그러나, Fast R-CNN도 실제 Region Proposal 단계를 제외하면 real-time detection이 될 정도로 detection model의 속도가 빠르지만, Region Proposal 단계에서 bottleneck 현상이 발생하기에 문제이다.
기존의 Region Proposal 방법인 Selective Search는 CPU에서 한 이미지당 2초가 걸릴 정도로 꽤 느리다(FPS가 0.5로 1보다 작다). 이후에 나온 EdgeBox를 활용하면 Region Proposal단계가 이미지당 0.2초가 걸리지만(FPS가 5이다), 이마저도 여전히 느리다.
Nevertheless, the region proposal step still consumes as much running time as the detection network.
Fast R-CNN은 기본적으로 Detection은 GPU를 이용하지만, Region Proposal은 CPU에서 수행한다. 그렇기 때문에 Region Proposal에서 bottleneck 현상이 발생한다.
Region Proposal을 빠르게 하는 확실한 방법은 Region Proposal을 GPU에서 수행하는 것인데, 이는 bottleneck 현상을 해결할 효과적인 방안이 될 수 있기는 하다.
다만 GPU로 Region Proposal을 하도록 Region Proposal 네트워크를 re-implement(재설계)하는 경우, Feature Map Computation(계산 결과)을 공유하는지는 못한다.
해당 논문에서는 Deep Convolutional Neural-Network으로 Region Proposal을 하도록 하는 알고리즘을 통해 computational cost를 cost-free에 가깝도록 설계했다.
이는 Object Detection Network와 Convolutional Layer를 공유하는 RPN(Regional Nerual Network) 덕분이다.
test-time에서 convolution을 공유하면서 region proposal의 속도를 크게 개선하는 네크워크이다.
이미지당 10ms로 상당히 빨라졌다는 것을 알 수 있다.
Fast R-CNN과 같은 Region-Based Detectors들이 사용하는 Convolutional Feature Map은 Region Proposal하는 데에도 사용될 수 있다. 이 Feature Map에 몇 가지 Convolutional Layer만 더해준다면 RPN을 설계할 수 있다.
RPN (Region Proposal Network)은 각 Anchor Box에 대해 동시에 Regress Region Bounds(객체의 대략적인 경계 박스)와 Objectness Score(객체 존재 여부)를 반환한다.
RPN은 Fully Convolutional Network(FCN)이며 end-to-end 학습이 가능하다.
RPN은 다양한 scale과 aspect ratios(가로세로 비율)을 갖는 Region Proposal를 효과적으로 예측하도록 설계됐다.
Pyramids of images(아래 그림에서 (a))나 Pyramids of filters(아래 그림에서 (b), SPPnet, Fast R-CNN) 방식을 사용한 기존 모델과 다르게, Faster R-CNN은 Anchor Box를 사용한다.
Anchor Box는 multiple scale과 aspect ratios(가로세로 비율)을 갖는다.
Anchor Box를 사용하면 Anchor Box는 multiple scale과 aspect ratios(가로세로 비율)을 갖는 image나 filter를 사용하지 않아도 되기 때문에, 즉 single-scale image만 사용해도 되기 때문에 속도가 빠르다.
(a) 이미지 피라미드 방식, (b) 필터 피라미드 방식, (c) 앵커 박스 방식
RPN과 Fast R-CNN object detection networks를 결합하기 위해, fine-tuning for region proposal과 fine-tuning for object detection을 번갈아가며 수행한다.
이런 훈련방식 덕분에 region proposal과 object detection network간의 convolutional feature를 공유할 수 있고, 속도도 빨라진다.
PASCAL VOC 데이터셋으로 실험할때, RPN을 적용한 Fast R-CNN이 selective search를 적용한 Fast R-CNN보다 정확도가 높았다.
RPN을 적용한 Fast R-CNN이 Faster R-CNN이다.
한편, Faster R-CNN은 test-time에서 selective search에 걸리는 시간이 거의 없기 때문에 상당히 빠르게 작업을 수행할 수 있다.
Expensive very deep 모델을 사용해도 Faster R-CNN은 GPU에서 5 fps의 속도를 보인다. 이는 속도나 정확도 측면에서 실용적이다.
Faster R-CNN과 RPN은 ILSVRC와 COCO 2015 대회의 이미지넷 객체 탐지, 이미지넷 localization, COCO 객체 탐지, COCO 세그멘테이션에서 1등을 차지했다.
이러한 결과를 바탕으로, Faster R-CNN과 RPN은 실용적으로 사용할 정도로 속도가 빠르고, 객체 탐지 정확도도 높은 모델이다.
2. Related Work
2.1) Object Proposals
Region Proposal에 관한 여러 논문이 있다.
super-pixels를 grouping하는 selective search나 sliding window를 사용하는 EdgeBoxes 등이 있다.
하지만 그동안의 region proposal 기법들은 object detection network과 독립적으로 즉, 외부 모듈로 사용되었다.
예를 들어, selective search는 CPU에서 수행했다.
그리고 selective search를 통해 찾은 region proposal들을 활용하여 GPU에서 object detection network를
즉, selective search는 Neural Network와 독립적인 모듈이다.
다만 Faseter R-CNN이 나오면서부터 Region Proposal과 Object Detection Network가 하나로 통합되기 시작했다.
2.2) Deep Networks for Object Detection
R-CNN은 proposal regions(영역 추정 경계 박스)를 object categories(객체 클래스)와 backgrounds(배경)으로 분류하기 위해 CNN을 end-to-end로 훈련한다. R-CNN은 주로 object class를 classify하는 역할을 한다.
object bounds(객체의 위치)를 예측하지는 않는다. 물론 bounding box regression을 해서 미세하게 위치를 조정하기는 한다.
그렇다면 object bounds(경계 박스)를 예측하는 region proposal 기법인 selective search은 GPU로 수행하는 게 아니라 별도로 CPU에서 수행하기 때문에 selective search 모듈이 전체적인 성능을 결정한다.
여러 논문에서 딥러닝을 사용해 object bounds를 예측하는 방법을 제안해왔다.
가령, OverFeat 기법이나 MultiBox 기법이 있다.
Fast R-CNN은 convolution feature 계산 결과를 공유하기에 효율성과 정확도 때문에 주목을 받았었는데, 그런데 MultiBox 기법은 'region proposal method와 object detection network'가 convolution feature를 공유하지 않는다는 단점이 있다.
반면, Fast R-CNN은 convolution feature를 공유하기 때문에 end-to-end 훈련이 가능하며, 속도와 정확도가 모두 좋았다.
3. Faster R-CNN
Faster R-CNN은 두 가지 Module로 구성되어 있다.
첫 번째 Module은 RPN(Region Proposal Network)으로, Fully Convolutional Network(모든 Layer가 convolutional layer로 구성되어 있음)을 통해 region을 propose한다.
두 번째 Module은 Fast R-CNN Detector로 propose된 region을 이용하여 object detection을 수행한다.
즉 2개의 Module이 결합하여 object detection을 위한 하나의 unified, single network를 구성한다.
이제 Faster R-CNN의 구조에 대해 알아보자.
1) 원본 이미지를 pre-trained된 CNN 모델에 입력하여 feature map을 얻는다.
2) feature map은 RPN에 전달되어 적절한 region proposals을 산출한다.
3) region proposals와 1) 과정에서 얻은 feature map을 통해 RoI pooling을 수행하여 fixed-size feature map을 얻는다.
4) Fast R-CNN Model에 fixed-size feature map을 입력하여 Softmax Classification과 Bounding box regression을 수행한다.
이렇듯 Faster R-CNN은 region proposal과 object detector 모두를 하나의 통합 네트워크에서 수행한다. region proposal을 독립된 모듈(CPU에서)로 수행하는 Fast R-CNN과 다르다.
3.1) Region Proposal Networks
RPN은 원본 이미지에서 region proposals를 추출하는 network이다.
원본 이미지를 sub-sampling ratio로 나눠 각 grid cell로 분해한 후, 각 grid cell별 9개의 anchor box를 생성하면 수많은 region proposals가 만들어진다.
Feature Map($h \times w \times 9$)의 하나의 pixel은 원본 이미지의 하나의 grid cell을 중심으로 하는 9개의 Anchor Box중 하나에 대응된다.
이때, Objectness Score을 나타내는 Feature Map($h \times w \times 2 \times 9$)의 하나의 pixel은 대응되는 Anchor Box안에 object가 포함되어 있는지의 유무를 의미한다.
이때, Bounding Box Coefficient을 나타내는 Feature Map($h \times w \times 4 \times 9$)의 하나의 pixel은 대응되는 Anchor Box의 bounding box regressor를 의미한다.
RPN은 region proposals에 대하여 class score를 매기고, bounding box coefficient를 출력하는 기능을 한다.
RPN의 전체적인 동작 과정을 간략하게 살펴보자.
1) 원본 이미지를 pre-trained된 CNN(VGG 모델)에 입력하여 feature map($h \times w \times 512$)을 얻는다.
원본 이미지의 크기가 800x800이며, sub-sampling ratio가 1/100이라고 했을 때 8x8 크기의 feature map이 생성된다(channel 수는 512개이다).
2) 위에서 얻은 feature map($h \times w \times 512$)에 대하여 3x3 convolution operation(stride=1, padding=1)을 적용한다. 이때 feature map의 크기가 유지될 수 있도록 stride=1, padding=1로 설정한다.
$8 \times 8 \times 512$ feature map에 대하여 3x3 Convolution($3 \times 3 \times 512 \times 512$)연산을 적용하여 $8 \times 8 \times 512$의 feature map이 출력된다.
3) class score를 매기기 위해서 feature map($h \times w \times 512$)에 대하여 1x1 convolution 연산을 적용한다. 이 때 출력하는 feature map의 channel 수가 2x9가 되도록 설정한다.
RPN에서는 후보 영역이 어떤 class에 해당하는지까지 구체적인 분류를 하지 않고 객체가 포함되어 있는지 여부만을 분류한다. 또한 anchor box를 원본 이미지의 각 grid cell마다 9개가 되도록 설정했다. 따라서 channel 수는 2(object 여부) x 9(anchor box 9개)가 된다.
$8 \times 8 \times 512$ 크기의 feature map을 입력받아 $8 \times 8 \times 2 \times 9$크기의 feature map을 출력한다.
4) bounding box regressor를 얻기 위해 feature map($h \times w \times 512$)에 대하여 1x1 conv 연산을 적용한다. 이 때 출력하는 feature map의 channel 수가 4(bounding box regressor)x9(anchor box 9개)가 되도록 설정한다.
$8 \times 8 \times 512$ 크기의 feature map을 입력받아 $8 \times 8 \times 4 \times 9$ 크기의 feature map을 출력한다.
RPN의 출력 결과는 위와 같다.
좌측 표는 anchor box의 종류에 따라 object 포함 여부를 나타낸 feature map이며, 우측 표는 anchor box의 종류에 따라 bounding box regressor를 나타낸 feature map이다.
이를 통해 $8 \times 8$ Feature Map의 한 pixel 당 원본 이미지의 각 grid cell마다 9개의 anchor box가 생성되어 총 576($8 \times 8 \times 9$)개의 region proposals가 추출되며, feature map을 통해 각각에 대한 객체 포함 여부와 bounding box regressor를 파악할 수 있습니다.
이후 $Grid\: Cell \times 9$개의 Anchor Boxes 중에 Proposal Layer로 인해 일부를 Region Proposal로 추출한다.
Non maximum suppression을 적용하여 부적절한 객체를 제거한 후, class score에 따라 상위 N개의 region proposals만을 추출한다. 이후 Fast R-CNN Detector 에 전달하게 되는데, 이 과정은 아래에서 구체적으로 설명할 계획이다.
3.1.1) Anchors
Selective search를 통해 region proposal을 추출하지 않을 경우, 원본 이미지를 일정 간격의 grid로 나눠 각 grid cell을 bounding box로 간주하여 feature map에 encode하는 Dense Sampling 방식을 사용한다.
이같은 경우 sub-sampling ratio를 기준으로 grid를 나누게 된다.
가령 원본 이미지의 크기가 800x800이며, sub-sampling ratio가 1/100이라고 할 때, CNN 모델에 입력시켜 얻은 최종 feature map의 크기는 8x8(800x1/100)가 된다.
여기서 feature map의 각 cell은 원본 이미지의 100x100만큼의 영역에 대한 정보를 함축하고 있다고 할 수 있습니다. 원본 이미지에서는 8x8개만큼의 bounding box가 생성된다고 볼 수 있다.
하지만 이처럼 fixed size의 bounding box를 사용할 경우, 다양한 크기의 객체를 포착하지 못할 수 있다는 문제가 있다.
해당 논문에서는 이러한 문제를 해결하고자 지정한 위치에 사전에 정의한 서로 다른 크기(scale)와 가로 세로비(aspect ratio)를 가지는 bounding box인 Anchor box를 생성하여 다양한 크기의 객체를 포착하는 방법을 제시한다.
논문에서 3가지 scale([128, 256, 512])과 3가지 aspect ratio([1:1, 1:2, 2:1])를 가지는 총 9개의 서로 다른 anchor box를 원본 이미지의 하나의 grid cell에 대응시켜 사전에 정의(pre-define)한다.
아래는 aspect ratio가 1:2 일 때, width와 height의 식을 작성한 것이다.
$w \times h = s^2$
$w = \frac{1}{2} \times h$
$\frac{1}{2} \times h^2 = s^2$
$h = \sqrt{2s^2}$
$w = \frac{\sqrt{2s^2}}{2}$
여기서 scale은 anchor box의 width(=$w$), height(=$h$)의 길이를, aspect ratio는 width, height의 길이의 비율을 의미한다.
여기서 aspect ratio에 따른 width, height의 길이는 aspect ratio가 1:1일 때의 anchor box의 넓이를 유지한 채 구한다.
예를 들어 scale이 $s$이며, aspect ratio가 1:1일 때의 anchor box의 넓이는 $s^2 = (s \times s)$이다.
여기서 aspect ratio가 1:2, 즉 height가 width의 2배일 때 위와 같은 수식에 따라 width, height를 구한다. aspect ratio가 2:1인 경우에도 마찬가지로 구한다.
Anchor box는 원본 이미지의 각 grid cell의 중심(Anchor)을 기준으로 9개 생성한다.
원본 이미지에서 sub-sampling ratio를 기준으로 anchor box를 생성하는 기준점인 anchor를 고정한다. 이 anchor를 기준으로 사전에 정의한 anchor box 9개를 생성한다.
위의 그림에서 원본 이미지의 크기는 $600 \times 800$이며, sub-sampling ratio=$ \frac {1} {16} $이다.
이 때 anchor이 생성되는 grid cell의 중심의 개수는 $1900(= \frac {600} {16} \times \frac {800} {16})$이며, anchor box는 총 $17100(=1900 \times 9)$개가 생성된다.
이같은 방식을 사용할 경우, 기존에 고정된 크기의 bounding box를 사용할 때보다 9배 많은 bounding box를 생성하며, 보다 다양한 크기의 객체를 포착하는 것이 가능하다.
3.1.2) Loss Function
원본 이미지의 grid cell을 중심을 기반으로 생성한 Achor Box에 대해 mini-batch 안에서 다음의 Loss를 계산한다.
$L(\{p_i\}, \{t_i\}) = \frac{1}{N_{\text{cls}}} \sum_{i} L_{\text{cls}}(p_i, p_i^*) + \lambda \frac{1}{N_{\text{reg}}} \sum_{i} p_i^* L_{\text{reg}}(t_i, t_i^*)$
- : mini-batch 내의 anchor의 index
- : anchor $i$에 객체가 포함되어 있을 예측 확률
- : anchor가 양성일 경우 1, 음성일 경우 0을 나타내는 index parameter
- : 예측 bounding box의 파라미터화된 좌표(coefficient)
- : ground truth box의 파라미터화된 좌표
- $L_{cls}$ : Loss loss
- $L_{reg}$ : Smooth L1 loss
- $N_{cls}$ : mini-batch의 크기(논문에서는 256으로 지정)
- $N_{reg}$ : anchor 위치의 수
- $\lambda$ : balancing parameter(default=10)
RPN과 Fast R-CNN을 학습시키기 위해 Multi-task loss를 사용한다.
하지만 RPN에서는 객체의 존재 여부만을 분류하는 반면, Fast R-CNN에서는 배경을 포함한 class를 분류한다는 점에서 차이가 있다.
Alternating Training 과정은 2가지 과정으로 이루어져 있는데, Fast R-CNN과 RPN이 있다.
이때, Regression 측면에서의 Loss를 살펴보자.
RPN(Region Proposal Network)Training 과정에서 예측한 Predicted Anchor Box의 좌표는 각 Positive Anchor box(1로 Labeling)에 대응되는 Feature Map상의 Bounding Box의 좌표와의 차이를 줄이도록 regression한다.
- Predicted Anchor Box: 원본 이미지의 각 Grid Cell에 대응되는 9가지의 Anchor Box 중 한 Box의 parameter 좌표 (Move by regression)
- Positive Anchor Box: Anchor target layer을 통해 Positive로 Labeling된 Anchor Box의 Parameter 좌표
Predicted Anchor Box의 좌표를 Positive Anchor Box의 좌표와 가깝게 가는 방향으로 Bounding Box Regression 한다.
이때, 중요한 점은 Predicted Anchor Box를 Ground Truth Box를 따라가는 것이 아니라는 점이다.
즉, Positive Anchor Box에 대응되는 Feature Map 상의 Bbox를 Ground Truth box로 보고,
RPN이 predicted한 Anchor Box의 좌표들을 Regression 하여 위의 Ground Truth box과 최대한 좌표를 일치시킨다.
즉, RPN에서의 $t_{i}$는 predicted bounding box의 parameter화된 좌표이고, $t_{i}^{*}$는 1로 Labeling된 Anchor Box의 paramter화된 좌표이다.
Fast R-CNN Training 과정에서 1로 Labeling된 Positive Anchor Box의 좌표는 실제 Object가 있는 Ground Tturh Bbox의 좌표와의 차이를 줄이도록 regression한다.
이때, 실제 Ground Truth Box에 해당하는 parameter화된 좌표는 $t_{i}^{*}$이고,
1로 Labeling된 Positive Anchor Box의 parameter화된 좌표는 $t_{i}$ 이다.
3.1.3) Training RPNs
이제 본격적으로 Faster R-CNN 모델의 학습 과정을 살펴보자.
흔히 Faster R-CNN = RPN + Fast R-CNN 이라고 단순하게 설명하지만 단순히 위의 수식으로 설명하기에는 모델 내부에서 처리해야하는 다양한 작업들이 있어 코드를 살펴보면 상당히 복잡하다.
특히 Faster R-CNN을 학습시킬 때는 Alternating Training 기법을 사용하는데,
이는 RPN과 Fast R-CNN detector를 결합하기 위해, fine-tuning for region proposal과 fine-tuning for object detection을 번갈아가며 수행하는 것이다.
- Fast R-CNN을 학습하기 위한 step: RPN, Proposal Layer
- 모든 Training Step에 공통으로 적용되는 step: pre-trained CNN, Anchor generation layer
- RPN을 학습하기 위한 step: Anchor target layer
우선 Faster R-CNN 모델에서 처리하는 동작 과정을 분석한 후 논문에서 언급한 모델의 실제 학습 방법을 살펴보도록 하자.
1) feature extraction by pre-trained VGG16
pre-trained된 VGG16 모델에 $800 \times 800 \times 3$ 크기의 원본 이미지를 입력하여 $50 \times 50 \times 512$ 크기의 feature map을 얻는다. 여기서 sub-sampling ratio는 $\frac {1} {16}$이다.
- Input: $800 \times 800 \times 3$ sized image
- Process: feature extraction by pre-trained VGG16
- Output: $50 \times 50 \times 512$ sized feature map
2) Generate Anchors by Anchor generation layer
Region proposals를 추출하기에 앞서 원본 이미지에 대하여 anchor box를 생성하는 과정이 필요하다. 원본 이미지의 크기에 sub-sampling ratio를 곱한만큼의 grid cell이 생성 되며, 이를 기준으로 각 grid cell마다 9개의 anchor box를 생성한다.
즉, 원본 이미지에 $50 \times 50(= (800 \times \frac {1} {16}) \times 800 \times \frac {1} {16})$개의 grid cell이 생성되고, 각 grid cell마다 9개의 anchor box를 생성하므로 총 $ 22500(=50 \times 50 \times 9)$ 개의 anchor box가 생성된다.
- Input : $800 \times 800 \times 3$sized image
- Process : generate anchors
- Output : $22500(=50 \times 50 \times 9)$ anchor boxes
3) Class scores and Bounding box regressor by RPN
RPN은 VGG16으로부터 feature map을 입력받아 각 anchor box에 대한 class score, bounding box regressor를 반환하는 역할을 한다.
- Input : 50x50x512 sized feature map
- Process : Region proposal by RPN
- Output : class scores($50 \times 50 \times 2 \times 9)$ sized feature map) and bounding box regressors($50 \times 50 \times 4 \times 9)$sized feature map)
4) Region proposal by Proposal layer
Proposal layer에서는 2)번 과정에서 생성된 anchor boxes와 RPN에서 반환한 class scores와 bounding box regressor를 사용하여 region proposals를 추출하는 작업을 수행한다.
먼저 Non maximum suppression을 적용하여 부적절한 객체를 제거한 후, class score 상위 N개의 anchor box(region proposal)를 추출한다. 이후 regression coefficients를 anchor box에 적용하여 anchor box가 객체의 위치를 더 잘 detect하도록 조정한다.
- Input
- $22500(=50 \times 50 \times 9)$ anchor boxes
- class scores($50 \times 50 \times 2 \times 9)$ sized feature map) and bounding box regressors($50 \times 50 \times 4 \times 9)$ sized feature map)
- Process : region proposal by proposal layer
- Output : top-N ranked region proposals
5) Select anchors for training RPN by Anchor target layer
Anchor target layer의 목표는 RPN이 학습하는데 사용할 수 있는 anchor를 선택하는 것이다.
먼저 2)번 과정에서 생성한 anchor box 중에서 원본 이미지의 경계를 벗어나지 않는 anchor box를 선택한다. 그 다음 positive/negative 데이터를 sampling해준다.
여기 positive sample은 객체가 존재하는 foreground, negative sample은 객체가 존재하지 않는 background를 의미한다.
전체 anchor box 중에서
1) ground truth box와 가장 큰 IoU 값을 가지는 경우
2) ground truth box와의 IoU 값이 0.7 이상인 경우에 해당하는 box를 positive sample로 선정한다.
반면 ground truth box와의 IoU 값이 0.3 이하인 경우에는 negative sample로 선정한다.
IoU 값이 0.3~0.7인 anchor box는 무시 (invalid)한다.
이러한 과정을 통해 RPN을 학습시키는데 사용할 데이터셋을 구성하게 된다.
- Input : anchor boxes, ground truth boxes
- Process : select anchors for training RPN
- Output : positive/negative samples with target regression coefficients
6) Select anchors for training Fast R-CNN by Proposal Target layer
Proposal target layer의 목표는 proposal layer에서 나온 region proposals(NMS, top-N) 중에서 Fast R-CNN 모델을 학습시키기 위한 유용한 sample을 선택하는 것이다.
여기서 선택된 region proposals는 1)번 과정을 통해 출력된 feature map에 RoI pooling을 수행하게 된다.
먼저 region proposals와 ground truth box와의 IoU를 계산하여 0.5 이상일 경우 positive,
0.1~0.5 사이일 경우 negative sample로 label된다.
- Input : top-N ranked region proposals, ground truth boxes
- Process : select region proposals for training Fast R-CNN
- Output : positive/negative samples with target regression coefficients
7) Max pooling by RoI pooling
원본 이미지를 VGG16 모델에 입력하여 얻은 feature map과 6) 과정을 통해 얻은 sample을 사용하여 RoI pooling을 수행한다. 이를 통해 고정된 크기의 feature map이 출력된다.
- Input
- $50 \times 50 \times 512$ sized feature map
- positive/negative samples with target regression coefficients
- Process : RoI pooling
- Output : $7 \times 7 \times 512$ sized feature map
8) Train Fast R-CNN by Multi-task loss
나머지 과정은 Fast R-CNN 모델의 동작 순서와 동일하다. fixed-size의 feature matrix을 fc layer에 입력하여 4096 크기의 feature vector를 얻는다.
이후 feature vector를 Classifier와 Bounding box regressor에 입력하여 (class의 수가 $K$라고 할 때) 각각 $(K+1), (K+1) \times 4 $ 크기의 feature vector를 출력한다. 출력된 결과를 사용하여 Multi-task loss를 통해 Fast R-CNN 모델을 학습시킨다.
- Input : $7 \times 7 \times 512$ sized feature map
- Process
- feature extraction by fc layer
- classification by Classifier
- bounding box regression by Bounding box regressor
- Train Fast R-CNN by Multi-task loss
- Output : loss(Loss loss + Smooth L1 loss)
3.2) Sharing Features for RPN and Fast R-CNN
논문의 저자는 Faster R-CNN 모델을 학습시키기 위해 RPN과 Fast R-CNN을 번갈아가며 학습시키는 Alternating Training 방법을 제안한다. 학습 과정은 아래와 같다:
1) 먼저 Anchor generation layer에서 생성된 anchor box와 원본 이미지의 ground truth box를 사용하여 Anchor target layer에서 RPN을 학습시킬 positive/negative 데이터셋을 구성한다. 이를 활용하여 RPN을 학습시킨다. 이 과정에서 pre-trained된 VGG16 역시 학습된다.
2) Anchor generation layer에서 생성한 anchor box와 원본 이미지를 입력하여 얻은 feature maps를 학습된 RPN에 사용하여 proposals layer에서 region proposals를 추출한다. 이를 Proposal target layer에 전달하여 Fast R-CNN 모델을 학습시킬 positive/negative 데이터셋을 구성한다. 이를 활용하여 Fast R-CNN을 학습시킨다. 이 때 pre-trained된 VGG16 역시 학습된다.
3) 앞서 학습시킨 RPN과 Fast R-CNN에서 RPN에 해당하는 부분만 학습(fine tune)시킨다. 세부적인 학습 과정은 1)과 같습니다. 이 과정에서 두 네트워크끼리 공유하는 convolutional layer, 즉 pre-trained된 VGG16은 고정(freeze)한다.
4) 학습시킨 RPN(3)번 과정)을 활용하여 추출한 region proposals를 활용하여 Fast R-CNN을 학습(fine tune)시킨다. 이 때 RPN과 pre-trained된 VGG16은 고정(freeze)한다.
즉, RPN과 Fast R-CNN을 번갈아가며 학습시키면서 공유된 convolutional layer를 사용한다고 보면 된다. 하지만 실제 학습 절차가 상당히 복잡하여 이후 두 네트워크를 병합하여 학습시키는 Approximate Joint Training 방법으로 대체된다고 한다.
3.3) Detection
실제 detection(=inference) 시에는 Anchor target layer와 Proposal target layer는 사용되지 않는다. 두 layer 모두 각각 RPN과 Fast R-CNN을 학습시키기 위한 데이터셋을 구성하는데 사용되기 때문이다.
Fast R-CNN은 Proposal layer에서 추출한 region proposals를 활용하여 detection을 수행한다. 그리고 최종적으로 얻은 predicted box에 Non maximum suppression을 적용하여 최적의 bounding box만을 결과로 출력한다.
Faster R-CNN 모델은 PASCAL VOC 2012 데이터셋에서 mAP 값이 75.9를 보이면서 Fast R-CNN 모델보다 더 높은 detection 성능을 보였다. 또한 Fast R-CNN 모델이 0.5fps(frame pre second)인 반면 Faster R-CNN 모델은 17fps를 보이며, 이미지 처리 속도 면에서 발전한 결과를 보였다. 그리고 feature extraction에 사용하는 convolutional layer의 feature를 공유하면서 end-to-end로 학습시키는 것이 가능해졌다.
하지만 논문의 저자는 detection 속도에 대해 "near real-time"이라고 언급하며, 실시간 detection에는 한계가 있음을 인정했다.
참고자료
Object Detection and Classification using R-CNNs
Faster R-CNN 논문(Faster R-CNN: Towards Real-Time ObjectDetection with Region Proposal Networks) 리뷰