티스토리 뷰

논문 리뷰

[논문 리뷰] Fast R-CNN

hyuna_engineer 2024. 3. 19. 09:46

 

 

R-CNN을 발전시켜서 만든 Fast R-CNN은 VGG16을 깊기 만들어서 R-CNN보다 정확성, 연산량, 속도에서 빠르게 만들었다. 파이썬과 C++을 이용했다.

이전의 R-CNN에서 제시된 것처럼 image classification보다 image detection이 더 복잡한 작업이다. Localization까지 포함되어 있기 때문이다. 이에 대한 설명은 다음 글을 참고하자.

1. Introduction
정확한 detection을 위해서 다음 두 가지 방법이 고려되어야 했다.
1) 후보군 object detection이 적당해야 한다. R-CNN은 2000개의 region proposal로 계산을 진행했기에 시간, 연산량이 굉장히 느렸다.
2) 계산 및 속도가 빠른 localization이 이루어져야 한다. 후에 정밀하게 조정한다고 하면, 처음 localization 진행할 때, 이 작업이 rough하게 이뤄지는 것이 중요하다.

R-CNN 의 한계로 다음 3가지가 제시된다.
1. Training is a multi-stage pipeline. 2-stage dectector로 SVM의 결과가 CNN에 반영되지 못하는 문제이다. 또한, CNN과 SVM의 연산량이 공유를 하지 못해서 효율성 측면레서도 떨어졌다.
2. Training is expensive in space and time. R-CNN은 GPU 사용량이며 시간이 매우 오래 걸린다 한다(10일 정도나..)
3. Object detection is too slow. sliding window를 보완하여 selective search 알고리즘이 제시되었지만 매우 느렸다.

이를 보완하는 모델로 1.을 보완하는 모델로 CNN과 SVM 사이의 연산량을 공유하는 SPPnets가 제시되었지만, 여전히 multi stage로 단계가 복잡하다는 것과, SVM의 결과가 CNN을 update 하지는 못한다.
Fast R-CNN의 이점 4가지는 다음과 같다.
1. Higher detection quality (mAP) than R-CNN, SPPnet (정확성 up)
2. Training is single-stage, using a multi-task loss (single stage)
3. Training can update all network layers (training 으로 update 가능)
4. No disk storage is required for feature caching

2. Fast R-CNN architecture and training

전체적인 R-CNN의 구조는 위의 사진과 같다.

1-1. R-CNN와 마찬가지로, selective search로 RoI를 찾는다.
1-2. 전체 이미지를 CNN에 통과시켜 feature map 추출

2. selective search로 찼았었던 RoI를 feature map 크기에 맞춰 projection 시킨다.

3. projection 시킨 RoI에 대해 RoI pooling을 진행해 고정된 크기의 feature vector를 얻는다. 

4. feature vector는 FC layer 통과한 후, 두 갈래로 나뉜다.

5-1. 하나는 softmax 통과해 RoI에 대해 object classification 진행 

5-2. 나머지 하나는 bounding box regression을 통해 selective search로 찾은 box의 위치를 조정한다.

 

2.1 The RoI pooling layer

RoI는 max pooling 이용해서 HxW 크기의 image로 맞춘다.  h/H x w/W의 대략적인 size에서 H x W 의 sub-window grid로 나눈다.

 

2.2. Initializing from pretrained networks

pre-trained 된 ImageNet 씀. 이 모델은 5개의 max pooling, 13개의 합성곱 층을 가짐. 이 ImageNet을 다음 3개 단계로 변화시켰다.

1. 마지막 max pooling을 RoI pooling layer로 대체. 

2. 마지막 fc layer와 softmax는  각각두 개의 층 갈래로 나누어지게 했다. 

3. network가 두 개의 input을 받게끔 했다. image의 list와 그 image들의 RoI의 list가 input이다.

 

2.3. Finetuning for detection

back-propagation으로 network의 가중치들을 계산했다. 그리고 이에 대한 성능은 Fast R-CNN에서 중요하다. 

우선, SPPnet에서 피라미드 pooling layer에서 가중치 update가 불가능했는지 알아보자.

SPP layer에서의 back-propagation은 다른 image로부터 각각의 training sample이 올 때, training에 비효율적이다. 확률적 경사 하강법(SGD) 미니배치는 계층적으로 샘플링됩니다. 먼저 N개의 이미지를 샘플링하고, 그런 다음 각 이미지에서 R/N개의 RoI(Region of Interest)를 샘플링합니다. 중요한 점은 동일한 이미지에서 가져온 RoI는 순방향 및 역방향 전파에서 연산과 메모리를 공유합니다. N을 작게 만드는 것은 미니배치 계산을 줄입니다.

-> 단점 : training 수렴 속도가 느림. 같은 이미지에서 RoI를 진행하는 것이 correlated되기 때문이다. 

Multi-task loss

마지막 두 갈래에서 softmax를 통과한 층은 discrete 확률 밀도를 RoI마다 제시한다. 나머지 한 갈래, bounding box regression을 진행하는 층은 K object classes의 x, y, w, h 집합 \(t^k\)는 scale-invariant translation과 object proposal과 관련한 log-space height/width shfit을 의미한다.

 

RoI에서 ground-truth 를 u, bounding-box regression target을 v라고 하고, multi-task loss를 L이라고 하자. loss 계산은 다음과 같다. 람다는 하이퍼파라미터로 이 두 갈래로 나눠지는 층의 loss 값을 계산해준다.

\(L_{loc}\)는 u, v class을 위한 bounding box regression target이다. \(t^u\)는 예측값을 담은 tuple이다.

Mini-batch sampling

N=2 images에서 생성된 SGD mini batch를 이용해서 계산을 진행한다. 크기가 R = 128인 미니배치를 사용하며, 각 이미지에서 64개의 RoI(Region of Interest)를 샘플링한다. 또한, groundtruth 바운딩 박스와 IoU(Intersection over Union) 겹침이 최소 0.5인 객체 제안에서 RoI의 25%를 채택한다.

 

Back-propagation through RoI pooling layer

RoI pooling layer을 미분해서 back-propagation을 진행한다. 하나의 이미지가 하나의 미니 배치라고 하고, 이는 독립적으로 다뤄진다.

back propagation 계산은 다음 식을 통해 이뤄진다.

\(x_i \in \mathbb{R}\) 는 RoI pooling layer의 i 번째 활성화 함수의 input이고, \(y_{rj}\)는 r 번째 RoI의 output이다.

SGD hyper-parameters.

softmax classification을 위해 fc layer & bounding box regression은 가우시안 분포를 통해 일단 정규화를 거친다. 30,000개의 미니배치 반복을 실행한 후 학습률을 0.0001로 낮추고 추가로 10,000번의 반복을 훈련합니다.

 

Scale invariance 

크기 불변의 객체 탐지를 달성하는 두 가지 방법을 탐색합니다: (1) "무차별 대입" 학습을 통한 방법과 (2) 이미지 피라미드 사용을 통한 방법입니다.

(1) 무차별 대입 접근 방식에서는 각 이미지가 훈련 및 테스트 중에 사전 정의된 픽셀 크기로 처리됩니다. 네트워크는 훈련 데이터로부터 직접 크기 불변의 객체 탐지를 학습해야 합니다. 반면에 (2) 다중 스케일 접근 방식은 이미지 피라미드를 통해 네트워크에 대략적인 크기 불변성을 제공합니다. 테스트 시에는 이미지 피라미드를 사용하여 각 객체 제안을 대략적으로 스케일 정규화합니다. 다중 스케일 훈련 중에는 데이터 증강의 한 형태로 이미지를 샘플링할 때마다 피라미드 스케일을 무작위로 샘플링합니다. GPU 메모리 제한으로 인해 작은 네트워크에 대해서만 다중 스케일 훈련을 실험합니다.

 

이미지 피라미드를 사용할 때, 각 RoI는 해당 RoI를 2242 픽셀 면적으로 조정한 후에 가장 가까운 스케일에 할당합니다. 이것은 RoI의 크기를 일정한 기준에 맞추기 위한 것입니다. 각 테스트 RoI에 대해,  forward pass는 클래스의 사후 확률 분포 p와 해당 RoI에 대한 예측된 바운딩 박스의 오프셋 집합을 출력합니다. 이는 각 클래스에 대해 수정된 바운딩 박스 예측을 제공합니다. 우리는 추정된 확률 Pr(class = k | r) = pk를 사용하여 각 객체 클래스 k에 대한 RoI r의 탐지 신뢰도를 할당합니다. 그런 다음 R-CNN에서 사용되는 알고리즘과 설정을 사용하여 각 클래스에 대해 독립적으로 비최대 억제를 수행합니다.

 

3.1 Truncated SVD for faster detection 

SVD를 통해 연산량 시간을 줄였다.

전체 이미지 분류에서는 완전 연결 레이어를 계산하는 시간이 합성곱 레이어에 비해 작습니다. 그러나 객체 탐지에서는 처리해야 할 RoI(관심 영역)의 수가 많고, 순방향 패스 시간의 거의 절반이 완전 연결 레이어를 계산하는 데 사용됩니다. 큰 완전 연결 레이어는 잘려진 특이값 분해(SVD)를 사용하여 쉽게 압축할 수 있습니다.

이 기술에서는 레이어의 가중치 행렬 W를 다음과 같이 대략적으로 분해합니다. 

여기서, U는 W의 첫 번째 t개의 왼쪽 특이벡터를, 는 W의 상위 t개의 특이값을, V는 W의 첫 번째 t개의 오른쪽 특이벡터를 포함하는 행렬입니다. 잘려진 SVD는 매개변수 수를 크게 줄일 수 있습니다.

네트워크를 압축하기 위해, W에 해당하는 단일 완전 연결 레이어를 두 개의 완전 연결 레이어로 대체합니다. 첫 번째 레이어는 가중치 행렬 를 사용하고(바이어스 없음), 두 번째 레이어는 U를 사용합니다(원래 W에 관련된 바이어스 사용).

 

결과는 다음과 같다.

걸린 시간에 대한 결과도 다음과 같다.

또한, 어떤 layer를 fine-tune 시켜야 하나를 실험했다. 결론적으로 이 논문에 쓰인 VGG16을 이용한 Fast R-CNN은 conv3_1을 fine-tune 시켰다. 

다음 table은 multi-task가 pure classification보다 성능을 높인다는 것을 알 수 있다.

이 외에도 Training dataset을 더 늘려야 하는가(Yes), SVM이 Fast RCNN에서는 softmax보다 성능이 낮게 나온다, proposal이 항상 정확도를 높이느냐(No) 에 대한 실험을 제시하겠다.

 

결론 : 

장점

  • Fast R-CNN에는 1개의 CNN 연산만 등장한다. 이전 R-CNN에서 CNN 연산을 2000번 하던 것에 비해 연산량이 매우 감소했고 속도도 빨라졌다.
  • CNN fine tuning, boundnig box regression, classification을 모두 하나의 네트워크에서 학습시키는 end-to-end 기법을 제시했다.
  • Pascal VOC 2007 데이터 셋을 대상으로 mAP 66%를 기록했다.

단점

  • R-CNN보다 훨씬 빠르다고는 하지만 여전히 많이 느림. Region proposal 에만 2초가 걸립니다.

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함