이번 포스팅에서는 Fast R-CNN과 Faster R-CNN을 정리합니다.
기존 R-CNN의 단점은 속도가 매우 느리다는 점이었습니다. 이를 보완하기 위해 Fast R-CNN, Faster R-CNN이 개발되었습니다. 모델명에서 Fast가 붙은 만큼 기존의 모델보다 속도면에서 큰 개선을 보였습니다.
기존의 R-CNN 모델은 Selective Search를 통한 2000개의 region proposal 각각을 CNN에 넣어 많은 시간이 소요됩니다. Fast R-CNN은 이러한 문제를 개선하여 단 1장의 이미지만 받습니다. Fast R-CNN은 Selective Search를 이용한다는 것을 동일하지만 전체 이미지를 CNN에 넣은 후 ROI(region of interest) Pooling을 통해 고정된 크기의 vector를 FCN에 전달합니다. 또한 multi-task loss를 사용하여 모델을 개별적으로 학습시킬 필요 없이 한번에 학습시킵니다. 이를 통해 학습 및 detection시간이 크게 감소하였습니다.
RoI Pooling은 region proposal 영역을 CNN 모델을 통과한 feature map에 투영시키는 방법입니다.
이처럼 미리 지정된 sub-window에서 max-pooling을 수행하다보니 Region proposal의 크기가 모두 달라도 고정된 크기의 feature map을 얻을 수 있습니다.
Fast R-CNN에서는 multi-task loss를 사용하여 Classifier와 Bounding box regressor를 동시에 학습시킵니다. 이처럼 두 모델을 한번에 학습시키기 때문에 R-CNN과 같이 각 모델을 독립적으로 학습시켜야 하는 번거로움이 없다는 장점이 있습니다.
multi-task loss는 아래와 같습니다.
(가중치 조정): classification loss와 localization loss의 균형을 맞추기 위해 사용하는 가중치 스칼라값. 일반적으로 = 1로 설정되지만, 특정 데이터셋에 따라 조정될 수 있음.
Smooth L1 Loss
수식의 의미
model 작동방식
의문점 해결
처음에 이미지에 대해서 Classification을 하면 확률 분포값이 하나가 나오는 줄 알았다.
하지만 RoI영역 하나에 대해서 Classification과 Regression을 하기 때문에 상관이 없는 것이었다.
Fast R-CNN을 training 시키기 위해 저자는 hierarchical sampling을 수행했다고 한다.
학습에는 각 mini-batch에서 RoI-Pooling을 통해 생성된 RoI의 일부를 샘플링하여 사용했다.
규칙은 다음과 같다.
Fast R-CNN 모델은 detection시, RoI를 처리할때 fc layer에서 많은 시간을 잡아먹는다. 논문의 저자는 detection 시간을 감소시키기 위해 Truncation SVD를 사용하여 fc layer를 압축했다고 한다.
Fast R-CNN을 학습시키는 과정은 다음과 같다.
1) Initializing pre-trained network
feature map을 추출하기 위해 VGG16 모델을 사용한다.
detection task에 맞게 모델을 변경하는 과정이 필요하다.
VGG16 모델의 마지막 max pooling layer를 RoI Pooling으로 대체합니다.
이때 RoI Pooling을 통해 출력되는 feature map의 크기인 H, W는 후속 fc layer와 호환이 가능하도록 7x7로 설정해줍니다. (지정된 grid가 7x7임)
네트워크의 마지막 fc layer를 2개의 fc layer로 대체합니다. 첫번째 fc layer는 각 class k개와 배경을 포함한 (K+1)의 output을 가집니다. (각각의 unit은 확률값임), 두 번째 fc layer는 각 class별로 bounding box의 좌표를 조정하여 (k+1)*4개의 output을 가집니다. (bounding box regressor)
2) region proposal by Selective search
먼저 원본 이미지에 대하여 selective search알고리즘을 이용하여 region proposals를 추출합니다.
3) Feature extraction ( 1~13 layer까지) by VGG16
VGG16모델에 224x224x3의 원본 이미지를 입력을 하고 layer 13까지 진행한 feature map을 추출합니다.
4) Max pooling by RoI Pooling
이전에 언급을 했듯이 VGG16의 output feature map과 region proposals를 RoI Projection시킵니다. 이 과정을 거쳐 7x7x512의 feature map을 추출합니다.
5) Feature vector extraction by FC layers
다음으로 region proposal별로 추출된 7x7x512 feature map에 대해 flatten한 후 fc layer에 입력하여 fc layer를 통해 4096크기의 feature vector를 얻습니다.
6) Class prediction by Classifier
다음은 추출된 4096크기의 feature vector를 사용하여 k+1의 output unit을 가진 FC layer에 통과시키는 것입니다. 하나의 입력이미지에 대해서 하나의 region proposal에 대한 class의 확률 분포값을 계산합니다.
7) Detailed localization by Bounding box regressor
4096크기의 feature vector를 사용하여 (k+1)x4개의 output unit을 가진 FC layer에 통과시킵니다. (좌표값 예측) 하나의 이미지에서 하나의 region proposal에 대한 class별로 조정된 bounding box 좌표값을 추출합니다.
Multi-task loss를 사용하여 하나의 region proposal에 대한 classifier와 bounding box regressor의 loss를 back-propagation 가중치를 학습시킵니다.
실제 Detection시, Fast R-CNN모델의 동작은 다음과 같습니다. Traing때와 다른 점은 RoI pooling이후 fc layer대신에 Truncated SVD를 적용했다는 점입니다. 또한 예측한 bounding box에 대하여 NMS(non maximum supression)알고리즘을 적용하여 최적의 bounding box만을 출력하게 됩니다.
Fast R-CNN 모델은 R-CNN 모델보다 학습 속도가 9배 이상 빠르며, detection 시, 이미지 한 장당 0.3초(region proposals 추출 시간 포함)이 걸립니다. PASCAL VOC 2012 Challenge에서 mAP 값이 66%를 보이면서 detection 성능 역시 R-CNN 모델에 비해 향상된 모습을 보입니다. 이외에도 multi-task loss를 사용하여 single stage로 여러 모델을 학습시킬 수 있다는 점과, 학습으로 인해 네트워크의 가중치값을 Backpropagation을 통해 update할 수 있다는 장점이 있습니다.