지난 포스팅까지 우리는 R-CNN 계열(2-Stage Detector)이 어떻게 발전해 왔는지 살펴보았다.
Faster R-CNN에 이르러 RPN을 도입하며 속도를 비약적으로 끌어올렸지만, 여전히 '후보 영역 추출'과 '분류'라는 두 단계를 거쳐야 한다는 구조적 한계가 있었다.
오늘 소개할 YOLO(You Only Look Once)는 이름 그대로 "이미지를 단 한 번만 보고" 객체를 탐지해내는, 1-Stage Detector 모델이다.
객체 탐지 성능을 평가하는 두가지 지표가 있다.
mAP로 측정하는 정확도와 FPS로 측정하는 수행시간(inference time)이다.
YOLO v1이 처음 나왔을 당시에 정확도는 Faster R-CNN보다 부족했지만 속도에서는 매우 큰 발전을 보였다.

YOLO 구조를 살펴보자
YOLO v1의 아키텍처는 24+2 구조를 가지고 있다.

아키텍처 이미지에 448x448 입력만 보이는 이유는 Figure3 구조도는 Pretrain이 아니라 'Detection용' 네트워크 구조이기 때문이라고 함
24개의 Conv layer와 2개의 FC layer를 거친 결과는 7x7x30 으로 나오게 된다. 그 이유를 알아보자.

논문에서는 PASCAL VOC를 사용하였으며, S,B,C에는 각각 7, 2, 20이 할당되었다.
PASCAL VOC(Visual Object Classes) : 컴퓨터 비전 분야에서 객체 탐지(Object Detection), 분할(Segmentation), 분류(Classification) 알고리즘의 성능을 평가하는 대표적인 벤치마크 데이터셋으로, 20개의 클래스로 구성되어 있다.
Deep systems의 슬라이드를 인용하였다.


7x7은 49개의 Grid cell을 의미한다. 각 그리드 셀은 2개의 bounding box를 가지고 있는데, 각각 5차원씩 bounding box에 대한 값이 채워져 있다.
예) [x좌표,y좌표,너비,높이,객체가 bounding box에 있을 확률]


나머지 20개의 값은 20개의 class에 대한 conditional class probability에 해당한다.
첫 번째 bounding box의 confidence score와 각 conditional class probability를 곱하면 첫 번째 bounding box의 class specific confidence score가 나온다.
마찬가지로, 두 번째 bounding box의 confidence score와 각 conditional class probability를 곱하면 두 번째 bounding box의 class specific confidence score가 나온다.

이 계산을 각 bounding box에 대해 하게되면 총 98개의 class specific confidence score를 얻을 수 있다.
이 98개의 class specific confidence score에 대해 각 20개의 클래스를 기준으로 non-maximum suppression 연산을 진행하여 탐지된 객체의 prediction 결과만을 얻어낸다.