- Selective search를 사용하여 계산하던 Region proposals 단계를 neural network 안으로 끌어와서 진정한 의미의 end-to-end object detection 모델을 제시하였습니다.
- 모든 단계를 다 합쳐서 5fps라는 빠른 속도를 내며 Pascal VOC기준 78.8%라는 성능을 냈습니다.
- 기존의 Fast R-CNN의 구조를 계승하며, selective search를 제거하고 RPN(Region Proposals Network)을 통해서 rols를 계산합니다.
- 이를 통해서 gpu 연산을 통해서 rols를 구할 수 있게 되었다.
- selective search → 2000개
- RPN → 800개
- selective search보다 약 1000개 이상의 rols를 더 적게 계산함에도 불구하고 더 높은 정확도를 보인다.
- Region Proposal Network → RPN
- CNN을 통해 얻어낸 featuremap을 입력으로 받는다.
- featuremap에 convolution을 채널 만큼 수행한다.
- 이 때 padding을 1로 주어 기존의 H, W를 유지한다.
- 두 번째 featuremap을 입력 받아서 classification 및 bbox regression 수행
- convolution의 특징을 갖기 위해 1x1 convolution을 사용한다.
- clasification 수행을 위해 1x1 convolution을 (2(오브젝트 여부), 9(앵커의 개수)) 채널 수 만큼 수행하고, 그 결과로 (h, w, 18)의 featuremap을 얻는다. (h,w) 각각은 featuremap의 좌표를 의미한다. 마지막으로 softmax를 적용하여 각 앵커들이 오브젝트일 확률 값을 얻는다.
- bbox regression을 얻기 위해서 1x1 convolution을 통해 (4x9) 채널 수 만큼 수행한다. regression이기 때문에 얻은 값을 그대로 사용한다. Rol 계산을 위해 classification에서 얻은 각 앵커의 확률값을 정렬하고, 높은 순으로 k개의 엥커만 추려낸다. 그리고 각각 앵커들에 bbox regression을 적용한다. 마지막으로 non-maximum-supperssion을 통해 rol을 구한다.
- Loss function
- RPN을 학습 시키기 위한 loss
- i는 하나의 앵커, 그리고 pi는 classification을 통해 얻은 해당 앵커가 물체일 확률값 입니다.
- ti는 bbox regression을 통해 얻은 박스 조정 벡터값을 의미한다. pi와 ti는 ground truth 라벨에 해당한다.
- classification은 log loss를 통해서 계산된다.
- regression loss의 경우에는 smoothL1 함수를 사용한다. → Fast R-CNN에서 소개했었다.
- 이를 제외한 나머지는 Fast R-CNN을 학습시킨 loss 평선이 동일하게 적용된다.
- Fast R-CNN 훈련 방법
- 저자들은 4단계에 걸쳐서 모델을 훈련시키는 Alternating Training 기법을 취합니다.
- Pretrained된 AlexNet을 불러와서 RPN을 학습시킨다.
- 학습된 RPN에서 기본 CNN을 제외한 Region Proposal layer를 가져와서 Fast R-CNN을 학습시킨다. (처음 feature map을 추출하는 CNN까지 fine-tune 시킨다.)
- 학습시킨 Fast R-CNN과 RPN을 불러온 다음, 다른 가중치들은 고정시키기고 RPN에 해당하는 layer들만 fine tune시킨다. 여기서부터 Fast R-CNN과 R-CNN의 convolution 가중치를 공유한다.
- 마지막으로 공유하는 CNN과 RPN은 고정하고, Fast R-CNN에 해당하는 layer만 fine-tune시킨다.