
YOLO 연구진은 객체 검출(object detection)에 새로운 접근방식을 적용했습니다.
기존의 multi-task 문제를 하나의 회귀(regression) 문제로 재정의했습니다.
YOLO는 이미지 전체에 대해서 하나의 신경망(a single neural network)이 한 번의 계산만으로 bounding box와 클래스 확률(class probability)을 예측합니다.
-> bounding box란 객체의 위치를 알려주기 위해 객체의 둘레를 감싼 직사각형 박스를 말합니다. 클래스 확률이란 bounding box로 둘러싸인 객체가 어떤 클래스에 해당하는지에 관한 확률을 의미합니다.
객체 검출 파이프라인이 하나의 신경망으로 구성되어 있으므로 end-to-end 형식입니다.
YOLO의 통합된 모델을 굉장히 빠릅니다. (1초에 45 프레임 처리, Fast YOLO는 1초에 155 프레임 처리)
기존의 검출(detection) 모델은 분류기(classfier)를 재정의하여 검출기(detector)로 사용하고 있습니다. 분류(classification)란 하나의 이미지를 보고 그것이 개인지 고양이인지 판단하는 것을 뜻합니다. 하지만 객체 검출(object detection)은 하나의 이미지 내에서 개는 어디에 위치해 있고, 고양이는 어디에 위치해 있는지 판단하는 것입니다. 따라서 객체 검출은 분류뿐만 아니라 위치 정보도 판단해야 합니다. 기존의 객체 검출 모델로는 대표적으로 DPM과 R-CNN이 있습니다.
Deformable parts models(DPM)은 이미지 전체를 거쳐 슬라이딩 윈도(sliding window) 방식으로 객체 검출을 하는 모델입니다. R-CNN은 이미지 안에서 bounding box를 생성하기 위해 region proposal이라는 방법을 사용합니다. 그렇게 제안된 bounding box에 classifier를 적용하여 분류(classification)합니다. 분류(classification)한 뒤 bounding box를 조정하고, 중복된 검출을 제거하고, 객체에 따라 box의 점수를 재산정하기 위해 후처리(post-processing)를 합니다. 이런 복잡함 때문에 R-CNN은 느립니다. 각 절차를 독립적으로 훈련시켜야 하므로 최적화(optimization)하기에도 힘듭니다.
그리하여 YOLO 연구진은 객체 검출을 하나의 회귀 문제(single regression problem)로 보고 절차를 개선했습니다. 이미지의 픽셀로부터 bounding box의 위치(coordinates), 클래스 확률(class probabilities)을 구하기까지의 일련을 절차를 하나의 회귀 문제로 재정의한 것입니다. 이러한 시스템을 통해 YOLO(you only look once)는 이미지 내에 어떤 물체가 있고 그 물체가 어디에 있는지를 하나의 파이프라인으로 빠르게 구해줍니다. 이미지를 한 번만 보면 객체를 검출할 수 있다 하여 이름이 YOLO(you only look once)입니다.

Figure 1: 하나의 컨볼루션 네트워크(convolutional network)가 여러 bounding box와 그 bounding box의 클래스 확률을 동시에 계산해 줍니다.
장점
YOLO는 굉장히 빠릅니다. 왜냐하면 YOLO는 기존의 복잡한 객체 검출 프로세스를 하나의 회귀 문제로 바꾸었기 때문입니다. 그리하여 기존의 객체 검출 모델처럼 복잡한 파이프라인이 필요 없습니다. 단순히 테스트 단계에서 새로운 이미지를 YOLO 신경망에 넣어주기만 하면 쉽게 객체 검출을 할 수 있습니다.
실시간으로 동영상을 처리할 수 있는 속도가 나옴( 1초에 150프레임을 처리 가능, 다른 기존 모델은 45프레임)
YOLO는 예측을 할 때 이미지 전체를 봅니다. 슬라이딩 윈도(sliding window)나 region proposal 방식과 달리, YOLO는 훈련과 테스트 단계에서 이미지 전체를 봅니다. 그리하여 클래스의 모양에 대한 정보뿐만 아니라 주변 정보까지 학습하여 처리합니다.
(Fast R-CNN는 주변 정보까지는 처리하지 못함. 그래서 아무 물체가 없는 배경에 반점이나 노이즈가 있으면 그것을 물체로 인식)
YOLO는 물체의 일반적인 부분을 학습합니다. 일반적인 부분을 학습하기 때문에 자연 이미지를 학습하여 그림 이미지로 테스트할 때, YOLO의 성능은 DPM이나 R-CNN보다 월등히 뛰어납니다.
단점
YOLO는 최신(SOTA, state-of-the-art) 객체 검출 모델에 비해 정확도가 다소 떨어진다는 단점이 있습니다. 빠르게 객체를 검출할 수 있다는 장점은 있지만 정확성이 다소 떨어집니다

동작 방식은 다음과 같습니다.
1) 입력 이미지를 S x S grid로 분할합니다.
2) 객체의 중심이 grid cell에 맞으면 grid는 객체를 탐지했다고 표기합니다.
3) 각 grid cell은 B개의 Bounding box와 각 bounding box에 대한 confidence score를 예측합니다.
confidence score란?
특정 Bounding Box안에 있는 객체가 어떤 물체의 class일 확률과 IoU를 곱한 값, 즉 각 Bounding Box 안에 물체가 있을 확률을 의미합니다.
각 Bounding Box는 x,y,w,h,confidence를 가지고 있습니다. x,y는 Bounding Box의 중심이며 w,h는 높이와 넓이입니다.
4) 각 grid cell은 Bounding Box 외에도 class 확률을 예측합니다.
5) non-max suppression을 거쳐 최종 Bounding Box를 선정합니다.
Non-Max Suppression(NMS)이란?
Detector가 예측한 Bounding Box중에서 가장 정확한 Bounding Box를 선택하는 기법입니다.

다음과 같이 NMS를 적용하면 Bounding Box가 하나만 남아있는 것을 확인할 수 있습니다.
YOLO v1의 구조는 다음과 같습니다.

24개의 Convolutional Layer와 2개의 Fully Connected Layer, 그리고 GoogleNet에서 가져온 아이디어 1x1 차원 감소 layer, 그 후 3x3 Convolutional Layer를 이용하여 마지막 7x7x30의 출력값을 결과로 가져옵니다.
이를 DarkNet이라고 합니다. 위 모형은 ImageNet 데이터셋을 통해 학습시켰습니다.
YOLO에서는 Sum-Squared Error(제곱합 에러)를 손실 함수로 사용합니다. 하지만 여러가지 문제가 있다고 합니다.

문제1. 2-stage Detector와 다르게 Localization Error와 Classification Error를 동일하게 가중치를 둡니다.
문제2. 객체를 포함하고 있지 않은 grid cell은 confidence 값이 0을 갖습니다. 이를 통해 모형이 불안정해집니다.
이를 해결하기 위해 다음과 같은 파라미터를 사용합니다.

coord는 Bounding Box 좌표 손실에 대한 파라미터입니다. 5배 가중치를 두어 높은 패널티를 부여합니다.
noobj는 객체를 포함하고 있지 않은 박스에 대한 confidence 손실의 파라미터입니다. 배경인 경우 0.5의 가중치를 두어 패널티를 낮춥니다.
요렇게 하여 가중치를 다르게 부여하게 되면 위에 있는 최종 식이 완성됩니다.
Localization loss

: 많은 grid cell은 객체를 포함하지 않아 confidence score가 0이 되어 객체를 포함하는 grid cell의 gradient를 압도하여, 모델이 불안정해질 수 있습니다.
는 이러한 문제를 해결하기 위해 객체를 포함하는 cell에 가중치를 두는 파라미터입니다. 논문에서는 로 설정합니다.
: grid cell의 수(=7x7=49)
: grid cell별 bounding box의 수(=2)
: 번째 grid cell의 번째 bounding box가 객체를 예측하도록 할당(responsible for)받았을 때 1, 그렇지 않을 경우 0인 index parameter입니다.
앞서 설명했듯이 grid cell에서는 개의 bounding box를 예측하지만 그 중 confidence score가 높은 오직 1개의 bounding box만을 학습에 사용합니다.
: ground truth box의 좌표와 width, height.
여기서 크기가 큰 bounding box의 작은 오류가 크기가 작은 bounding box의 오류보다 덜 중요하다는 것을 반영하기 위해 값에 루트를 씌어주게 됩니다.
: 예측 bounding box의 좌표, width, height
Confidence loss

: 앞서 언급한 객체를 포함하지 않는 grid cell에 곱해주는 가중치 파라미터입니다. 논문에서는 로 설정했습니다.
로 설정한 것에 비해 상당히 작게 설정하여 객체를 포함하지 않은 grid cell의 영향력을 줄였습니다.
: 번째 grid cell의 번째 bounding box가 객체를 예측하도록 할당(responsible)받지 않았을 때 , 그렇지 않을 경우 인 index parameter입니다.
: 객체가 포함되어 있을 경우 , 그렇지 않을 경우
: 예측한 bounding box의 confidence score
Classification loss


YOLO v1 모델의 학습 과정은 굉장히 단순합니다. 앞서 정의한 DarkNet에 이미지를 입력하여 7x7x30 크기의 feature map을 loss function을 통해 학습시킵니다.
detection 시에는 최종 예측 결과에 Non Maximum Suppression 알고리즘을 적용합니다. 이를 통해 mAP 값이 2~3% 정도의 향상된다고 합니다.
YOLO v1 모델은 base network의 경우 45fps, 경량화한 fast version의 network는 150fps의 결과를 보여 매우 빠른 detection 속도를 보입니다. 실시간으로 0.0025 이하의 지연시간(latency)를 가지며 객체를 detect하는 것이 가능하다고 합니다.
또한 sliding window 방식이나 region proposal 기반의 모델과는 달리 YOLO v1 모델은 전체 이미지를 인지하여 맥락 정보(contextual information)을 학습한다고 합니다. 이를 통해 배경 영역을 객체로 인식하는 False Positive 오류를 Fast R-CNN 모델보다 상대적으로 덜 범한다고 합니다.
YOLO v1 모델은 일반화 가능한 표현(representations)를 학습하여 새로운 도메인이나 예상치 못한 입력 이미지에 대해 상대적으로 강건한 모습을 보입니다.
하지만 당시 state-of-the-art 모델보다 정확도 측면에서 약간 부족한 성능을 보입니다. 특히 작은 객체를 제대로 탐지하지 못하는 단점이 있습니다. 또한 각 grid cell의 bounding box는 하나의 객체만을 예측하기 때문에 같은 grid cell 내에 있는 여러 객체를 탐지하지 못합니다.