일반적으로 2 stage detector는 Localization을 수행하고 Classification을 진행하기 때문에 속도가 느리다는 단점이 있어 real-time에 적용하기 힘든 문제로 1 stage detector 연구가 진행되었다.
1 stage에서는 RPN 과정이 사라지고 인풋 이미지에 대해 Localization과 Classifiaction이 동시에 진행된다. 전체 이미지에 대해 특징 추출, 객체 검출이 이루어지기 때문에 간단하고 디자인이 쉬우며 속도가 빠르고 영역을 추출하지 않고 전체 이미지를 보기 때문에 객체에 대한 맥락적 이해가 높은 특징이 있다.
YOLO는 GoogleNet을 변형한 Network를 사용한다. 입력 이미지를 SxS 그리드 영역으로 나누는데 해당 논문에서는 S=7을 사용한다. 각 그리드 영역마다 B개의 Bounding box와 Confidence score를 계산하고 C개의 class에 대한 클래스 확률을 계산한다.
그리드 당 2개의 bounding box를 포함하고 box 수 만큼의 (x, y, w, h, c : confidence score)와 class 개수에 해당하는 채널 수를 가진다. Inference 과정은 confidence score를 통해 class score를 계산하고 각 class 마다 score가 일정 threshhold보다 낮은 box들은 0으로 만든 뒤 내림차순으로 정렬해 NMS를 진행한다.
YOLO는 당시 real-time detector 및 2 stage 모델들 보다 빠르고 성능은 더 높았다. 그러나 7x7 그리드 영역을 사용하기 때문에 그리드보다 작은 크기의 물체는 검출이 불가능하고 신경망을 통과한 마지막 feature map만 사용한다는 단점이 있다.
YOLO v1 이후 제안된 SSD에서는 backbone 이후로 추가적인 convolution layers를 사용해 6개의 다양한 scale을 가지는 feature map을 사용하기 때문에 큰 feature map에서는 작은 물체를 탐지하고 작은 feature map에서는 큰 물체를 탐지할 수 있다. Fully connected layer는 Fully Convolutional layer로 대체하여 속도를 향상시켰으며 미리 정의된 anchor box를 사용했다. 결과적으로 YOLO v1보다 속도와 성능을 향상시켰다.
YOLO v1보다 Better(성능), Faster(속도), Stronger(예측 class 개수) 파트에서 model 향상을 위해 제안되었다.
YOLO v2와 달리 서로 다른 3개의 scale를 가지는 multi-scale feature maps를 사용하고 FPN을 사용했다.
보통 1 stage detector는 rpn이 없어 이미지에서 객체가 있을법한 영역을 뽑는 것이 아니라 이미지를 그리도 나눈 뒤 각 그리드 별로 bounding box를 무조건 예측하기 때문에 2 stage detector보다 background를 포함하게 될 확률이 많아 class imbalance 문제점이 있다.
이를 개선하기 위해 cross entropy loss + scaling factor인 focal loss를 제시하였고 이 loss는 detection 뿐만 아니라 class imbalance가 심한 dataset을 학습할 때 범용적으로 사용될 수 있다. 결과적으로 1 stage methods의 단점이였던 성능면에서 큰 향상을 이루었다.