Object Detection은 크게 2가지로 나뉜다.
1-stage와 2-stage로 나뉜다. 즉, 목적에 따라 사용하는 알고리즘이 다르다.
초기에는 2-stage로 나오기 시작했다. RCNN이 시발점이었던 것처럼 말이다. 2개 이상의 모델이 사용되어 학습 속도와 추론 속도는 매우 느리지만 mAP가 높고 안정성이 높았다.
그 뒤로 1-stage인 YoloV1이 나오기 시작했고 최근엔 YoloV11이 시작했다.
또한, transformer + Object Detection이 결합된 모델들 또한 쏟아져 나오기 시작했다.
Object Detection이 어렵다고 느끼는 이유는 결국 loss에 있다. 해당 task가 Object Detection의 난이도를 높인다.
yolo를 기준으로 보면 대략 3개의 loss를 더한다.
Yolo Loss
1. coordinate prediction loss
2. confidence loss
3. class loss
이 3가지를 합친 loss가 object Detection의 학습률에 지대한 영향을 미치기 때문이다. 일반적으로 우리가 알고 있던 classification task의 경우 model에서 나온 output과 실제값인 y_hat의 차이인 단일 loss의 경우였으나 Object Detection의 경우 2개 이상의 loss로 구성되어 있기 때문에, 많은 vision 초심자들이 해메기 시작한다.
해메는 이유는 뭘까?
내가 Object Detection 포스팅을 하는 이유는 초심자들이 이 같은 고통을 걷지 않도록 하기 위함이다. Object Detection의 여러 모델들을 포스팅할 예정이라 많은 시간이 걸리겠지만 왜 오픈소스 개발자들이 그러한 코드를 짰고 그러한 모델을 사용했는지 깊은 고찰을 나와 같이 했으면 하는 생각으로 Object Detection 포스팅을 할 예정이다.
자 우선 yolov1에 대한 깊은 고찰부터 시작해보자.