논문 읽기/Object Detection

[논문 읽기] Fast R-CNN(2014) 리뷰

AI 꿈나무 2021. 2. 14. 00:04
반응형

Fast R-CNN

 Fast R-CNN은 R-CNN과 SPPnet의 단점을 개선한 모델입니다.

 end-to-end learning이 가능하며, 2000개의 proposals이 모두 CNN에 통과하지 않도록 구조를 개선하여 detecting 속도를 높였습니다. 

 

R-CNN 단점

1. 학습이 여러 단계로 나뉘어져 있습니다.

 R-CNN은 3가지 단계의 학습 과정을 거쳐야 합니다. 

 (1) CNN fine-tuning

 (2) SVM fine-tuning

 (3) learn bounding-box regression

 

2. 학습하는데에 시간이 오래 걸리고 메모리 공간도 많이 차지합니다.

 SVM과 bounding-box regression은 각 이미지에서 각 proposal로 추출된 특징으로 학습되기 때문입니다.

 

3. 느립니다.

 test time에서 각 이미지에서 각 proposal로부터 특징이 추출됩니다.

 R-CNN은 proposal을 약 2000개 제안하고 모든 proposal을 CNN에 전달합니다. 이 과정에서 많은 시간이 소요됩니다.

 

SPPnet 단점

1. R-CNN과 마찬가지로 학습이 여러 단계에 걸쳐 이루어집니다.

 (1) fine-tuning network

 (2) training SVM

 (3) fitting bounding-box regressor

 

2. fc layer만 fine-tunning 가능합니다.

 pre-trained된 CNN을 업데이트할 수 없기때문에 정확도를 제한시킵니다.

 

Fast R-CNN 장점

1. R-CNN과 SPPnet보다 높은 mAP을 달성했습니다.

2. multi-task loss를 사용하여 학습이 single-stage로 진행됩니다.

3. 모든 network layers를 업데이트 할 수 있습니다.

4. 특징을 저장하기 위한 추가적인 저장 공간이 요구되지 않습니다.

 


Fast R-CNN 구조와 학습 방법

 

 

Fast R-CNN 작동 방식

1. Selective Search로 region proposals를 얻습니다.

 

2. 전체 이미지가 CNN을 통과하여 feature map을 얻습니다.

 

3. region proposal는 feature map에 projection 되어 RoI를 생성합니다.

 

4. RoI pooling layer는 feature map에 생성된 RoI으로부터 고정된 길이의 특징을 추출합니다.

 

5. 추출된 고정된 길이의 특징은 fc layer에 전달됩니다. 그리고 fc layer는 마지막에 두 output layer로 갈라집니다.

 (1) 첫 번째 output layer는 confidence를 지닌 K개의 class를 예측합니다.

 (2) 두 번째 output layer는 각 K class에 대하여 4개 값을 출력합니다. 4개 값은 bounding box regressor를 거쳐 K class의 바운딩 박스 좌표가 됩니다.

 

The RoI pooling layer

 RoI Pooling layer는 SPPnet에서 하나의 pyramid만 사용된 SPP layer입니다.

 

 

 우선, 입력 이미지는 feature map을 생성하기 위해 CNN을 통과합니다.

 

 Selective search로 얻어진 region proposal은 feature map에 projection되어 RoI를 생성합니다.

 

 h * w 크기의 RoI는 h/H * w/W 크기의 sub-window로 분할됩니다.

 

 H와 W는 사전에 정의한 값입니다.

 

 만약 4x6 크기의 RoI를 얻었고 H와 W가 2x2이면, RoI는 2x3의 sub-window로 분할됩니다.

 

 sub-window에서 최대값이 output이 되고, 각 sub-window의 output이 연결되어 최종 output을 생성합니다.

 

Change of pre-trained network

 Fast R-CNN은 VGG16 모델을 사용했습니다.

 

 pre-trained된 VGG 모델을 fine-tunning을 위해 세 가지 변화를 줍니다.

 

1. 마지막 max pooling layer는 RoI pooling layer로 대체합니다.

 RoI pooling layer는 fc layer의 입력과 호환되도록 H와 W를 사전에 설정합니다.

 

2. network의 마지막 fc layer는 두 개의 sibling layer로 대체합니다.

 

3. network를 image, RoI 두 가지 입력값을 취할 수 있도록 수정합니다.

 

Fine-tunning for detection

 network의 모든 가중치를 학습할 수 있는 것은 Fast R-CNN의 중요한 능력입니다.

 

 어떻게 모든 가중치를 갱신할 수 있었는지 살펴보겠습니다.

 

1. hierarchical sampling

 N개의 이미지를 sampling하고 각 이미지에서 R/N개의 RoI를 sampling 합니다. R은 mini-batch size 입니다.

 동일한 이미지에서 RoI는 순전파와 역전파 과정에서 연상량과 메모리가 공유됩니다.

 그리고 N을 작게 설정할 수록 mini-batch 연산량은 더욱 줄어듭니다.

 예를 들어 N=2 R=128일 때, 서로 다른 128개의 이미지로부터 RoI를 sampling하는 것보다 64배 빠릅니다.

 이미지당 64개의 RoI가 sampling되고, RoI 연산량과 메모리가 공유되기 때문입니다.

 

2. 학습 과정을 하나의 과정으로 간소화했습니다. end-to-end 학습이 가능합니다.

 R-CNN과 SPPnet은 SVM, bounding box regressor, network 3개의 학습을 별도로 진행했어야 했습니다.

 Fast R-CNN은 SVM을 softmax layer로 대체하고 또 다른 output layer를 만들어 bounding box regressor를 한 가지 신경망으로 통합했습니다. 신경망을 학습하면 softmax layer, bounding box regressor도 동시에 학습됩니다.

 

Multi-task loss

 Fast R-CNN은 end-to-end learning을 위해서 multi-task loss를 사용합니다.

 object class와 bounding box를 동시에 학습할 수 있습니다.

 

 

 L_cls 는 true class u의 log loss 입니다.

 L_los 는 bounding box에 대한 loss 입니다.

 [u>=1] 은 u >=1 이면 1, u=0이면 0이 되는 기호입니다. (u=0은 배경 클래스를 의미합니다)

 $\lambda$ 는 두 task loss의 균형을 조절합니다. 논문에서는 $\lambda$ = 1을 사용했습니다.

 

 

 $t^u_i$ 는 u 클래스에 해당하는 bounding box regression offset 입니다.

 $v_i$는 u 클래스에 해당하는 true bounding box 입니다.

 만약 u=0(배경)인 경우, L_loc는 무시합니다. 

 

 L1 loss가 이용되었는데, 이는 L2 loss보다 이상점에 덜 민감하다고 합니다.

 L2 loss는 민감하여 기울기 폭발을 일으킬 수 있습니다.

 

 

 Multi-task loss를 사용했을 때 더 높은 mAP를 얻었습니다.

 

 S는 AlexNet

 M은 S보다 더 큰 VGG 모델

 L은 VGG16 입니다.

 

Mini-batch sampling

 SGD mini-batches는 2개의 이미지에서 각 64개의 RoI를 sampling하여 총 128 mini-batch size를 이용합니다.

 

 이미지당 2000개의 RoI가 발생하는데 64개의 RoI를 선택하는 기준을 설명합니다.

 

 RoI의 25%는 region proposal이 true bounding box와 IoU > 0.5 이상인 것에서 무작위로 추출합니다.

 나머지 RoI는 0.5 > IoU > 0.1인 것에서 추출합니다.

 

 이는 hard example mining을 활용하기 위함이라고 합니다.

 


여러가지 연구

 Fast R-CNN 논문에서 흥미로운 연구 결과도 함께 담고있습니다.

 몇 가지를 소개하겠습니다.

 

1. Multi Scale Trining and Testing

 입력 이미지의 크기가 1개로 고정하여 학습했을 때와 5개의 크기를 사용했을 때의 연구 결과입니다.

 

 

 5-scale은 더 높은 mAP을 얻었지만, 많은 cost가 요구됩니다.

 L 모델에서는 GPU 한계 때문에 5-scale 실험을 못했다고 합니다.

 

2. SVM vs Softmax

 

 Fast R-CNN에서 softmax가 SVM보다 좋은 성능을 나타냅니다.

 

 SVM은 수백 기가바이트의 특징 벡터가 하드디스크에 저장합니다.

 softmax는 특징 벡터를 하드디스크에 저장하지 않고 end-to-end learning이 가능합니다.

 

3. Region Proposals

 

 region proposal 수 증가는 mAP를 꼭 증가시키진 않았습니다.

 region proposal 증가에 따라 mAP은 증가하다가 특정 구간부터 감소합니다.

 

4. Truncated SVD for faster detection

 test time때 FC layers에서 많은 시간이 요구됩니다.

 

 test time을 감소하기 위해서 FC layer의 weights를 SVD로 감소시킵니다.

 

 FC6 layer의 25088x4096 행렬로부터 1024개 특이값, FC7 layer의 4096x4096 행렬로부터 256개 특이값을 활용합니다. 

 

 

 SVD로 weights를 압축하여 FC layer의 test time이 감소되었습니다.

 


마치며

 Fast R-CNN을 VOC 2007, 2010, 2012 dataset으로 학습한 성능입니다.

 

Fast R-CNN의 training, test time 입니다.

 

 

 Fast R-CNN은 R-CNN보대 9배 빠르게 학습되었고 test time에서 213배 빠릅니다.

 SPPnet과 비교하여 학습은 3배 빠르고 test는 10배 빠릅니다. 

 


참고자료

[1] arxiv.org/abs/1504.08083

[2] herbwood.tistory.com/8

[3] leechamin.tistory.com/215

[4] medium.com/coinmonks/review-fast-r-cnn-object-detection-a82e172e87ba

반응형