[논문 리뷰] Fast R-CNN

SimBa's avatar
Feb 10, 2025
[논문 리뷰] Fast R-CNN

1. Introduction

  • 최근에 deep CNN이 classification과 object detection쪽에서 엄청나게 향상되었음.
  • classification과 달리, object detection은 해결하기에 더 복잡한 방법을 요하는 more challenging task임 → 따라서, 현재는 느린 multi-stage pipelines(영역 추출 → 세분화 및 분류)를 학습 모델로 사용하고 있음.
  • 복잡한 이유 : 사물의 정확한 localizaion을 필요로 함
    • numerous candidate object locations가 필요
    • 이러한 여러 개의 locations는 정확한 localization을 위해서는 정제되어야 할 대략적인 localzation만 제공
해결 방안 : speed, accuracy, simplicity 향상
  • 본 연구에서 제안하려는 바 : “classify object proposal + refine spatial locations”을 합친 single-stage training algorithm
  • PASCAL VOC 2012에서 66%의 정확도를 보임 (R-CNN : 62%)
 

1.1 R-CNN and SPPnet

  • R-CNN은 object proposals를 분류하기 위해 deep CNN을 사용 → 좋은 객체 탐지 정확도 보임
  • R-CNN의 단점
    • Training is a multi-stage pipeline
      • log loss를 사용하여 object proposals에 대해 ConvNet을 fine-tining함.
      • CNN을 통해 추출된 feature 벡터를 이용해서 SVM 학습시킴
      • bounding-box regression을 학습시킴
    • Training is expensive in space and time
      • SVM과 bounding-box regression을 학습시키기 위해서, 각각의 이미지에 있는 object proposal로부터 특징을 뽑아내고, 이를 disk에 기록해야 함 → 이 과정에서 어마어마한 메모리가 필요
    • Object detection is slow
      • 각 test image에 대해, 각각의 object proposal에 대해 특징들을 뽑아내야 함.
  • R-CNN은 computation의 공유 없이 각각의 objec proposal에 대해 forward pass를 수행 → 느림
  • Spatial pyramid pooling networks(SPP nets)
    • computation을 공유함으로써, 속도 향상
    • 전체 input image에 대해 convolutional feature map을 만듦 → shared feature map으로부터 추출된 feature map을 사용하여, object proposal 분류
    • object proposal인 부분만 고정된 크기(ex. (6,6))으로 max-pooling → 여러 크기의 output을 pooling함 → spatial pyramid pooling에 연결
  • SPPnets의 단점
    • multi-stage pipeline : R-CNN과 동일하게 features 추출 → log loss를 활용한 fine-tuning → SVMs 학습 → bounding box regression
    • 특징이 disk에 저장됨
 

1.2 Contriburions

  • Fast R-CNN의 장점
    • R-CNN과 SPPnet보다 높은 객체 탐지 능력
    • Training : multi-task loss를 사용한 single-stage
    • Training을 통해 모든 network layers를 update할 수 있음
    • feature caching을 위해 disk에 저장할 필요가 없음
 
 

2. Fast R-CNN architecture and training

notion image
  • Fast R-CNN architeceture
    • input : entire image & object proposal set
    • 여러 개의 convolutional layer과 max pooling layer → convolutional feaature map 형성
    • 각각의 object proposal에 대해 RoI pooling layer → feature map으로부터 고정된 길이의 feature vector 추출
    • feature vector은 연속된 fully-connected layer로 들어감 → 두 개의 sibling output으로 전달
      • (K개의 object classes에 대한 sofmax probability estimates) + (catch-all “background” class)의 값을 계산 ← catch-all background class : 알 수 없거나 객체가 아닌 영역
      • 각각의 K object classes에 대한 4개의 real-valued number을 산출 (4 values : bounding-box의 좌표)

2.1 The RoI pooling layer

  • max pooling을 사용하여, 특정 RoI 내부의 feature을 고정된 크기의 작은 특징 맵 (H, W) (ex. 7 × 7)으로 변환
  • RoI : convolutional feature map에 들어가는 rectangular window (object proposal알고리즘에 의해 생성됨)
  • RoI는 (r, c, h, w)라는 튜플로 이루어짐 ( (r, c) : top-left corner)
  • RoI max pooling 작동 방식
    • (h×w) 크기의 RoI window 를 (H, W) 크기의 grid로 나눔 → 각 sub-window의 크기는 (h/H, w/W)
    • 그런 다음, 각 sub-window에서 가장 큰 값을 선택하여(max pooling) 출력 그리드의 해당 셀에 할당
    • pooling은 각 feature map에 독립적으로 작동
    • RoI layer은 SPPnet에서 사용된 spatial pyramid pooling layer의 특수한 경우로, 단 하나의 피라미드 레벨만 사용
    •  

2.2 Initializing from pre-trained networks

  • 3가지 transformations
    • 마지막 max pooling layer을 RoI pooling layer로 변경 (첫 번째 fc layer와 크기가 맞게 H ,W 설정 → VGG16이라면, H = W = 7)
    • 마지막 fc layer와 softmax 을 두 개의 siblig layers로 변경 (K+1 에 대한 softmax // category-specific bounding-box regressors)
    • 2가의 data inputs을 받도록 수정 : image 안에 image의 리스트와 RoI의 리스트가 있음
    •  

2.3 Fine-tuning for detection

  • back-propagation으로 모든 network weights를 학습시키는 것은 매우 중요
  • 왜 SPPnet가 spatial pyramid pooling layer에서 weights가 업데이트되지 못할까?
    • 서로 다른 image로부터 오는 sample을 학습시킬 때, SPP를 통한 back-propagation은 매우 비효율적
    • forward pass는 모든 receptive field를 처리해야하기 때문에 training inputs이 크면, receptive field가 커져서 비효울적이게 됨
  • 따라서, 본 연구에서는 학습 동안 feature sharing의 이점을 활용한 더 효율적인 학습 방법을 제안
    • 이미지 sampling과 RoI sampling
    • 같은 이미지에서 선택된 RoI들은 feature map을 공유 → 한 이미지에 대해 ConvNet을 한 번만 실행하면 해당 이미지의 모든 RoI가 동일한 feature map을 사용 (→ 메모리 절약 가능)
💡
[Fast R-CNN의 sampling 방식 - 계층적 sampling]
  • 이미지 sampling
    • 한 번의 미니 배치에서 N개의 이미지를 랜덤하게 선택
  • RoI sampling
    • 각 샘플링된 이미지에서 R/N개의 RoI를 선택
    • (ex. R=128, N=2 → 각 이미지에서 128/2=64개의 RoI를 선택)
  • N번만큼 convolution 연산이 실행되고, R/N 만큼의 RoI가 선택됨
  • fine-tuning 사용 → 학습 단계 간소화
    • 학습 단계 간소화 방법
      • 손실 함수 (Loss): Softmax 손실(클래스 분류)과 회귀 손실(경계 상자 좌표)을 동시에 최적화.
      • 미니배치 샘플링 전략: 효율적인 학습을 위해 데이터에서 작은 샘플 묶음을 선택하는 방식.
      • RoI 풀링 계층을 통한 Back-propagation: 이미지의 Region of Interest(관심 영역)만 추출하여 네트워크에서 처리.
      • SGD 하이퍼파라미터: 학습 속도와 모델 최적화를 조정하는 중요한 매개변수들(예: 학습률, 모멘텀 등).
💡
[일반적인 객체 탐지 모델의 학습 단계]
  • 3가지 단계가 필요
    • Softmax 분류기 학습: 객체의 클래스(예: 사람, 자동차)를 예측하는 단계.
    • SVM 학습: 정확한 클래스 분류를 위해 추가적인 최적화 수행.
    • Bounding-box 회귀 학습: 경계 상자 좌표를 세밀하게 조정하는 단계.
(1) Multi-task loss
  • output layer 1
    • fc layer에서 (K+1)개의 class에 대한 softmax값
    • notion image
  • output layer 2
    • boundng-box regression offsets u=0u = 0를 구하기 위해 parameterization함 → LlocL_loc는 object proposal에 대한 scale invariant 변환과 로그 공간 높이/폭 이동을 지정
  • 각각의 RoI는 ground-truth class u와 ground-truth bounding-box regression target v (정답 클래스와 정답 bounding -box regression) 으로 라벨링 되어져 있음 → classification과 bounding-box regression(prediction box와 ground-truth box의 차이를 줄여주는 것)을 함께 학습시키기 위해 각각의 라벨링된 RoI에 대해 multi-task loss L을 사용
    • xix_i : 정답 class uvuv 에 대한 loss
    • t(u+v)t(u+v) : true bounding-box regression에 의해 정의되고, 정답 true bounding-box에 대해 prediction box 튜플인 을 예측 (bounding-box regression을 위한 loss)
    • Inverson bracket indicator function : u≥1 이면 1, 그 외에는 0
    • (관례에 따라, catch-all background의 label은 , 도 무시됨)
    • loss : R-CNN과 SPPnet에서 사용되었던 loss보다 덜 민감함
      • regression target이 uncounded일 때(고정된 범위나 정형화된 값에 제한되지 않고, 이미지 크기와 객체 다양성에 따라 변화) : loss는 gradient exploding을 없애기 위해 주의깊게 learning rate를 튜닝함 BUT, 은 이러한 민감성을 제거함
      • : 에서 수행되었던 loss 사이의 균형을 맞춰주는 hyper-parameter (ground-truth regression target인 가 N(0,1)이 되도록 normalization함 → 본 연구에서는 모두 로 설정)
       
notion image
notion image
notion image
  • 결론 : 본 연구에서는 클래스에 상관없이(class-agnostic) object proposal network를 학습시키기 위해 related loss를 사용하는 방법에 주목 → R-CNN과 SPPnet에서 적용했던 stage-wise training(단계적 학습 : classification → bounding-box localizer) 이 비효율적임을 보여줌
 
(2) Mini-batch sampling
  • fine-tuning동안, 각각의 SGD(Stochastic gradient descent) mini-batch는 “N=2”개의 images를 uniformly at random으로 뽑음(mini-batch size = 2) → “R=128” 크기의 미니배치를 사용하며, 각 이미지에서 64개의 RoI(Region of Interest)를 샘플링
  • RoI의 분류
    • foreground ()
      • IoU ≥ 0.5 : intersection over union (교집합 영역 넓이 / 합집합 영역 넓이)
      • 전체 RoI의 25%
      • 객체가 실제로 존재한다고 간주되어 Foreground class로 레이블됨 ()
    • backgound ()
      • 0.1 ≤ IoU < 0.5
      • 전체 RoI의 나머지 75%
      • 객체가 아닌 Bachgound class로 레이블됨 ()
  • IoU의 하한값(lower threshold)인 0.1은 hard example mining(IoU가 0.1~0.5인 RoL는 객체와 어느 정도 관련이 있지만, 완전히 맞지 않는 hard examples임 → 일반화 성능 향상)을 위한 heuristic으로 작용하는 것으로 보임
  • Data augmentaion : 0.5의 확률로 horizontal flip (그 외 다른 데이터 증강은 사용 X)
 
(3) Back-propagation through RoI pooling layer
notion image
  • : RoI pooling layer에 들어가는 i번쨰 activation input (입력되는 feature map의 한 지점)
  • : RoI pooling layer가 출력하는 값으로, r번째 RoI의 j번째 sub-window의 값 → sub-window 내에서 가장 큰 값을 선택하는 max-pooling 방식으로 계산됨
  • RoI의 계산방법 :
notion image
notion image
  • : 최대값을 가지는 input 의 index → 각 output 는 해당 sub-window 내에서 가장 큰 의 값
  • 가 max pooling을 수행하는 sub-window 내의 입려값들의 인덱스 집합 → 하나의 input 는 여러 다른 output 를 생성할 수 있음
  • RoI pooling layer의 backwards funcion 계산 방법 :
notion image
가 argmax로 선택된 경우에만 기울기가 누적됨
 
(4) SGD hyper-parameters
  • softmax classification을 위한 fc layer : N(0, 0.01) 로 초기화
  • bounding-box regression을 위한 fc layer : N(0, 0.001)로 초기화
  • bias : 0으로 초기화
  • weight의 learning rate = 1
  • bias의 learning rate = 2
  • global learning rate = 0.001
  • momentum = 0.9
  • parameter decay = 0.0005
 

2.4 Scale invariance

  • scale invariance : 객체의 크기가 달라지더라도 이를 정확히 탐지하는 능력
  • “brute force” learning
    • training ,test 과정 모두에서 이미지를 사전에 정의된 픽셀 크기로 처리
    • training data로부터 scale-invariant object detection을 직접 배워야 함
  • using image pyramids (multi-scale approach)
    • image pyramid : 원본 이미지를 다양한 크기로 축소하거다 확대하여 여러 레벨로 구성되니 이미지 생성
    • test할 때, image pyramid를 통해 각각의 object proposal을 대략적인 scale-normalization을 함
    • image를 sampling할 때마다 random하게 pyramid scale을 sampling함 (image pyramid에서 무작위로 하나의 스케일을 선택하여 학습 데이터를 만드는 것)
    • 본 연구에서는 GPU의 메모리 제한으로 인해, 이 방식은 작은 network에서만 실
 
 

3. Fast R-CNN detection

  • input : image(or 일종의 list인 image pyramid) , 점수를 매길 object proposal의 list
  • test에서 각 RoI r
    • forward pass의 output : (class posterior probability distribution), 에 대한 predicted bounding-box offset의 집합
  • detection confidence (객체 검출 신뢰도) : 에 대해 각 객체 클래스 에 대해 다음과 같이 계산됨. (이 클래스 에 속할 확률)
notion image
  • 이후, non-maximum supression(NMS)를 통해, 각 클래스에 대해 독립적으로 수행 : 겹치는 bounding-box 중에서 가장 신뢰도가 높은 box 하나만 선택하고, 나머지는 억제하는 방법
 

3.1 Truncated SVD for faster detection

  • classification과 다르게 RoI를 사용하는 object detection에서는 fc layer의 계산이 복잡함.
  • Truncated SVD(singular value decomposition)를 사용하여 fc layer를 압축할 수 있음 → weight matrix ( matrix)가 다음과 같이 factorized됨
notion image
  • 의 left-singular vector로 구성된 ( matrix)
  • : diagonal matrix (W의 top-singular values로 구성됨)
  • 의 right-singular vector로 구성된 ( matrix)
→ parameter의 개수를 에서 로 줄임
  • network를 압축하기 위해 에 대응되는 하나의 fc layer를 non-linearity가 없는 두 개의 fc layer로 대체
    • fc layer 1 : bias가 없는 weight matrix 를 사용
    • fc layer 2 : 와 관련된 원래의 bias가 있는 를 사용
  • 효과 : RoI의 개수가 많을 때, 속도를 높여줌
 
 

4. Conclusion

4.1 R-CNN과 차이점

  • R-CNN
    • 각 RoI를 개별적으로 CNN에 입력하여 feature을 추출
    • stage-wise training (단계적 학습) : CNN으로 feature 추출 → SVM으로 classification → bounding-box regression
  • Fast R-CNN
    • input image를 딱 한 번만 convlution으로 처리하여 feature map을 생성하고, 모든 RoI가 이 feature map을 공유하여, 하나의 feature map을 기반으로 모든 RoI를 처리
    • Multi-task loss : classification과 bounding-box regression을 하나의 network로 동시에 학습
 

4.2 SPPnet과의 차이점

  • SPPnet
    • 하나의 convolution을 통해 feature map을 생성 → spastial pyramid pooling을 사용하여 RoI 처리
    • 모든 RoI마다 개별적으로 convolution을 수행하는 비효율성을 해결
    • fine-tuning이 어려움 : RoI를 처리할 때 feature map의 일부만 사용하기 때문에 back-propagation이 어려움
  • Fast R-CNN
    • RoI pooling layer
      • 고정된 크기의 feature map으로 변환하여 end-to-end 학습이 가능하도록 함
      • RoI 크기가 다르더라도, 고정된 크기로 변환하여 fc layer에 입력할 수 있음 → 다양한 크기의 객체를 탐지해야할 때 매우 유용
      • notion image
    • 네트워크에 gradient를 효율적으로 전달할 수 있도록 하여, fine-tuning 문제 해결
    • Multi-task loss
Share article

심바