[논문 분석] Fast RCNN
한줄요약 ✔
- 전체 이미지를 우선 CNN 1회 적용하여 특징맵 추출 후, 해당 특징맵에서 selective search로 후보영역 추출.
- RoI(Region of Interest): R-CNN에서 CNN 인풋으로 사용하기 위해 각 후보영역을 warping하는 과정 생략.
- Multi-task Loss: SVM과 Box Regressor를 따로 학습 시키지 않고 end-to-end로 한 번에 학습.
- 하지만, Selective search 과정은 모델 학습과 별개로 동작하기 떄문에, 완전한 end-to-end는 아님.
Introdcution 😉
R-CNN 모델은 2000장의 region proposals를 CNN 모델에 입력시켜 각각의 후보영역을 모두 학습시기 때문에 많은 학습 시간이 소요된다.
하지만, Fast R-CNN은 이러한 문제를 개선하여 단 1장의 이미지를 입력받아 CNN에 우선 적용하여 얻은 feature map에서 2000개의 후보영역인 RoI(Region of Interest)을 추출한다.
이후, RoI pooling을 통해 FCN의 고정된 인풋 크기에 맞춘 feature vector를 생성한다.
또한, Multi-task loss를 사용하여 클래스 예측과, 박스 회귀 모델을 개별적으로 학습시킬 필요 없이 end-to-end로 한 번에 학습시킨다.
이를 통해 학습 및 detection 시간이 크게 감소한다.
Proposed Method 🧿
Fast-R-CNN 작동 방식
- Selective Search: 2000개의 후보영역(Region Proposals) 사전 추출
- CNN: 초기 인풋인 전체 이미지를 CNN에 1회 통과하여 feature map 획득.
- RoI Projection: 1)에서 생성한 후보영역들을 2)에서 생성한 feature map에 이전 단계에서 사용되었던 서브 샘플링 비율에 맞게 조정하여 projection하여 RoI를 얻는다.
- RoI pooling layer: 3)에서 생성한 서로 다른 RoI를 동일한 고정 길이의 특징으로 변환하여 동일한 크기의 인풋을 받는 FCN에 전달.
- RoI 영역을 고정된 크기의 그리드로 분할하고, 각 그리드 셀 내에서 최댓값을 추출하여 피처맵을 생성합니다. 이렇게 추출된 최댓값들은 동일한 크기의 고정된 특징 벡터로 구성됩니다.
- FC Layers
- 첫 번째 FC(Fully-Connected) 레이어: 분류를 위한 FC 레이어, 활성화 함수 포함
- 두 번째 FC(Fully-Connected) 레이어: 바운딩 박스 회귀를 위한 FC 레이어, 활성화 함수 포함
- 클래스 예측 (각 클래스의 확률)
- 바운딩 박스 회귀 (각 바운딩 박스의 좌표 조정 값)
- NMS
Selective Search
Input : image
Process : Selective search
Output : 2000 region proposals
Pre-trained Network
Input : 224x224x3 sized image
Process : feature extraction by VGG16
Output : 14x14x512 feature maps
- Fast R-CNN은 피처맵 추출을 위해 VGG16 모델을 사용한다.
- VGG16의 마지막 Max polling layer \(\rightarrow\) RoI pooling layer 교체
- VGG16의 마지막 fc layers를 class 예측과 box 회귀 결과를 리턴하도록 수정.
- VGG16가 image와 Region proposals라는 두 가지 입력을 갖도록 수정
- conv layer3까지의 가중치값은 고정(freeze)하고 fine tuning.
- 논문의 저자는 fc layer만 fine tuning했을 때보다 conv layer까지 포함시켜 학습시켰을 때 더 좋은 성능을 보인다.
R-CNN은 CNN부분에서 AlexNet를 사용했다.
RoI Pooling Layer
Input : 14x14 sized 512 feature maps, 2000 region proposals
Process : RoI pooling
Output : 7x7x512 feature maps
Feature map에서 후보영역들에 대해 지정한 크기의 grid로 나눈 후 각각에 대해 max pooling을 수행하는 방법이다.
미리 지정한 크기의 sub-window에서 max pooling을 수행하여 region proposal의 크기가 서로 달라도 고정된 크기의 feature map 추출 가능하다.
- 입력 이미지가 CNN을 통과하여 feature map을 생성.
- Selective search로 얻어진 후보영역들이 feature map에 projection되어 RoI를 생성.
- \(h \times w\) 크기의 RoI는 \(h \over H\) \(\times\) \(w \over W\) 크기의 sub-window로 분할.
- \(H\)와 \(W\)는 사전에 설정한 grid 크기 하이퍼 파라미터.
- Max pooling: 각 sub-window에서 최대값인 output을 연결하여 최종 output을 생성.
Fine-tuning for Detection
Fast R-CNN는 end-to-end 학습이기에 network의 모든 가중치를 학습할 수 있다.
Hierarchical Sampling
R-CNN 모델은 학습 시 region proposal이 서로 다른 이미지에서 추출되고, 이로 인해 학습 시 연산을 공유할 수 없다는 단점이 있다.
이를 해결하고자 동일한 이미지에서의 RoI끼리는 순전파와 역전파 과정에서 연산량과 메모리가 공유되는 점을 이용한 Hierarchical Sampling 방법을 이용한다.
Mini-batch(\(R\))에서 \(N\)개의 이미지를 sampling하고 각 이미지에서 \(R \over N\)개의 RoI를 sampling.
- \(R\): mini-batch size.
- \(N=1,R=128\) 일 때, 이미지 당 128개의 RoI를 sampling.
- \(N=2,R=128\) 일 때, 이미지 당 64개의 RoI가 sampling.
\(N=2\) 일 때, CNN을 2번만 통과하면 되기 때문에, \(N=1\) 일 때, CNN을 128번 통과한 것보다 64배 빠르다.
다르게 말하면, 줄어든 RoI에 따라 연산량 및 메모리가 그만큼 공유되기 때문에, \(N=1\)일 때보다 64배 빠르다.
만약 mini-batch가 128이고 N이 128이라면, 한 번의 iteration에서 128개의 이미지를 사용하고 각 이미지에서 128개의 RoI를 샘플링합니다. 따라서 RoI의 총 개수는 128 * 128 = 16,384개가 됩니다.
반면에, mini-batch가 128이고 N이 2라면, 한 번의 iteration에서 128개의 이미지를 사용하고 각 이미지에서 2개의 RoI를 샘플링합니다. 따라서 RoI의 총 개수는 128 * 2 = 256개가 됩니다.
End-to-end 학습 가능
이전 R-CNN에서는 SVM, bounding box regressor, network 총 3개의 학습을 별도로 진행해야 한다.
하지만, Fast R-CNN은 클래스 예측을 위한 SVM을 softmax layer로 대체하고 또 다른 output layer를 만들어 bounding box regressor를 한 가지 신경망으로 통합했다.
하여 신경망을 학습하면 softmax layer, bounding box regressor도 동시에 학습된다.
이를 위해 Fast R-CNN은 Multi-task loss를 활용한다.
FC Layers
Input : 7x7x512 sized feature map
Process : feature extraction by fc layers
Output : 4096 sized feature vector
Class Prediction
Input : 4096 sized feature vector
Process : class prediction by Classifier
Output : (K+1) sized vector(class score)
Bounding Box Regressor
Input : 4096 sized feature vector
Process : Detailed localization by Bounding box regressor
Output : (K+1) x 4 sized vector
Multi-task Loss
Input : (K+1) sized vector(class score), (K+1) x 4 sized vector
Process : calculate loss by Multi-task loss function
Output : loss(Log loss + Smooth L1 loss)
- \(L_{cls}\): class 예측 loss.
- \(p\): \((K+1)\)개의 예측 클래스 점수.
- \(u\): 정답 객체 클래스 점수; 배경 클래스는 \(u=0\).
- \(L_{loc}\): bounding box에 대한 loss으로 배경 클래스는 무시한다.
- \(v\): \(u\) 클래스에 해당하는 true bounding box.
- \(t^u\): \(u\) 클래스에 해당하는 모델 예측 (= bounding box regression offset).
- \(\lambda\): 두 task loss의 균형을 조절하는 하이퍼 파라미터.
이 손실함수를 통해 하나의 네트워크에서 object class와 bounding box를 동시에 학습할 수 있다.
L1 loss는 L2 loss보다 이상치에 덜 민감하다. L2 loss는 민감하여 기울기 폭발을 일으킬 수 있다.
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의 75%: RoI는 \(0.5 > IoU > 0.1\)인 것에서 추출.
Non Maximum Supression
R-CNN을 통해 얻게 되는 2000개의 bounding box를 전부 다 표시할 경우우 하나의 객체에 대해 지나치게 많은 bounding box가 겹친다.
하여 각 객체별 최적의 bounding box를 선택하는 Non maximum supression 알고리즘을 적용한다.
- Linear SVM에서 bounding box별로 지정한 confidence scroe threshold 이하의 box를 우선 제거.
- 나머지 bounding box를 confidence score에 따라 내림차순 정렬.
- 살아남은 boxes 중 confidence score가 가장 높은 box를 기준으로 다른 box와의 IoU값을 조사하여, IoU threshold 이상인 box를 모두 제거.
- 3의 과정을 반복하여 남아있는 box만 선택한다.
Conclusion ✨
Strength
- R-CNN보다 높은 detection quality(mAP).
- Multi-task loss를 사용해 single stage 학습 (end-to-end).
- End-to-end 학습에 따른 네트워크의 모든 layer들을 갱신(update)할 수 있다.
- Feature caching을 위한 disk storage가 필요 없다.
Weakness
- 인풋 이미지 하나당 2,000개의 region proposal 추출하기 떄문에 학습 및 추론 속도가 느리다
- 한 네트워크에서 3가지의 모델(CNN, SVM, Box Regressor)을 사용하기 때문에 구조와 학습 과정이 복잡하고, end-to-end 학습 불가능.
댓글남기기