최근에 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
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알고리즘에 의해 생성됨)
(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값
output layer 2
boundng-box regression offsets u=0를 구하기 위해 parameterization함 → Lloc는 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을 사용
xi : 정답 class uv 에 대한 loss
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함 → 본 연구에서는 모두 로 설정)
결론 : 본 연구에서는 클래스에 상관없이(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
: RoI pooling layer에 들어가는 i번쨰 activation input (입력되는 feature map의 한 지점)
: RoI pooling layer가 출력하는 값으로, r번째 RoI의 j번째 sub-window의 값 → sub-window 내에서 가장 큰 값을 선택하는 max-pooling 방식으로 계산됨
RoI의 계산방법 :
: 최대값을 가지는 input 의 index → 각 output 는 해당 sub-window 내에서 가장 큰 의 값
가 max pooling을 수행하는 sub-window 내의 입려값들의 인덱스 집합 → 하나의 input 는 여러 다른 output 를 생성할 수 있음
RoI pooling layer의 backwards funcion 계산 방법 :
→ 가 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 (객체 검출 신뢰도) : 에 대해 각 객체 클래스 에 대해 다음과 같이 계산됨. (이 클래스 에 속할 확률)
이후, 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됨
의 left-singular vector로 구성된 ( matrix)
: diagonal matrix (W의 top-singular values로 구성됨)
의 right-singular vector로 구성된 ( matrix)
→ parameter의 개수를 에서 로 줄임
network를 압축하기 위해 에 대응되는 하나의 fc layer를 non-linearity가 없는 두 개의 fc layer로 대체