-
You Only Look Once (YOLO) 논문 요약Computer Vision 2023. 2. 22. 18:01
목차
0. Abstract
1. Introduction
2. Unified Detection
3. Comparision to Other Detection Systems
4. Experiments
Abstract
기존의 object detection 작업들은 classifier(분류기)가 detection을 수행하도록 변형하는 방법을 사용했습니다.
그러나 YOLO 연구진들은 object detection 문제를 regression 문제로 정의하고 하나의 네트워크를 통해 bounding box와 class probability를 예측하도록 했습니다.
따라서 YOLO는 end-to-end로 학습되며 전체 이미지를 한 번만 보고 모든 예측을 수행합니다.
end-to-end: 문제 해결을 위한 하나의 파이프라인을 하나의 네트워크로 배치하는 것을 의미합니다
YOLO는 굉장히 빠릅니다. YOLO 모델은 45fps (frame per second), 더 작은 버전인 Fast YOLO는 155fps 값을 가지며 동시에 다른 실시간 detector(검출기)들과 비교했을 때 두 배 이상의 mAP(mean average precision) 값을 가집니다.
mAP: object detection 분야에서 흔히 사용되는 성능 평가 지표입니다. recall 값에 따른 최대 precision 값들의 평균을 AP(Average Precision)이라 하는데 이때 두 개 이상의 클래스가 존재할 때 각각의 클래스에 대한 AP 값에 대한 평균 값을 구한 것이 mAP입니다.
다른 state-of-art detection 시스템들과 비교했을 때 YOLO는 localization(위치 식별) 에러를 더 많이 내지만, 배경에서 object를 잘못 검출해내는 경우가 적습니다. 또한 YOLO는 물체에 대한 일반화(generalization)를 굉장히 잘하기 때문에 예술 작품과 같은 다른 분야에 적용했을 때, DPM, R-CNN과 같은 다른 시스템을 훨씬 능가하는 성능을 가지고 있습니다.
1. Introduction
현재의 detection 시스템들은 detection을 수행하기 위해 classifier(분류기)의 용도를 변경하는 방식을 사용하고 있습니다. 이는 전체 이미지의 다양한 위치에 대해 classifier를 통해 분류를 수행한다는 것을 의미합니다. DPM (deformable parts models)과 같은 시스템의 경우에는 sliding window 방식을 사용합니다.
sliding window: 전체 이미지에 대해 일정 간격씩 이동하며 부분적인 이미지를 classifier를 통해 분류하는 방식
조금 더 최근 방식인 R-CNN의 경우에는 region proposal 방식을 통해 bounding box가 될만한 후보들을 뽑아내고 이를 classifier에 넣어 분류를 수행합니다. 그 다음에는 후처리 작업 (post-processing)을 통해 bounding box를 추려내고 중복되는 box를 제거하는 과정을 거친 후에 score를 다시 매기는 작업을 거치게 됩니다.
region proposal: 물체가 있을 만한 후보 영역을 잡아내는 것
이러한 복잡한 파이프라인(pipeline)은 굉장히 느리며 각각의 파이프라인의 구성 요소에 대해 각각 따로 학습하는 과정을 거쳐야하기 때문에 최적화가 어렵다는 단점이 있습니다.
따라서 YOLO의 연구진들은 객체 탐지 (Object detection) 문제를 하나의 회귀 문제 (regression problem)으로 해결할 것을 제안합니다. YOLO는 하나의 convolution network를 통해 예측을 수행하며 굉장히 간단한 구조를 갖고 있고 이러한 단일화된 모델은 이전의 모델과 비교했을 때 여러 장점을 갖습니다.
첫번째, 욜로는 굉장히 빠릅니다.
두번째, 욜로는 이미지 전체를 사용하여 예측을 수행하기 때문에 학습 시와 테스트 시에 문맥적 (contextual) 정보를 인코딩할 수 있다는 장점이 있습니다. 이는 sliding window와 region proposal 기반의 방식처럼 이미지의 작은 단위에서 예측을 수행하는 방식과는 대조되는 장점입니다.
세번째, 욜로는 물체의 일반화된 형태를 학습합니다. 일반 사진에 대해 학습한 후에 예술 작품에 대해 테스트를 수행하는 경우에, 욜로는 DPM, R-CNN를 압도하는 성능을 가지고 있습니다.
그렇지만 욜로는 정확도 부분에서 state-of-the-art detection 시스템들에게 뒤쳐지는 면이 있습니다. 빠르게 예측을 수행할 수 있는 대신에 물체의 위치를 예측(localize)하는 점에서, 특히 작은 물체에 대해서, 정확도가 떨어집니다.
2. Unified Detection
욜로는 객체 탐지의 구성 요소들을 단일 개의 네트워크로 통합합니다. 욜로의 네트워크는 전체 이미지의 feature를 사용하여 각각의 bounding box를 예측하며 전체 bounding box를 동시에(한 번에) 예측합니다.
YOLO는 우선, 인풋 이미지를 SxS 개의 그리드로 나눕니다.
각각의 그리드의 칸(cell)은 B개의 bounding box와 각각의 bounding box에 대한 confidence score를 예측합니다.
이러한 confidence score는 두 가지를 반영하는데 첫번째는 해당 box가 object를 포함할 확률이며 두번째는 예측된 box의 정확도 입니다. 이는 다음과 같은 수식으로 표현됩니다.
해당 그리드 칸에 물체가 존재하지 않는 경우에 confidence score는 0이 됩니다. 물체가 존재하는 경우에는 confidence score의 값이 예측된 box와 정답(ground truth) box와의 IOU(Intersection over union)값과 일치하게 됩니다.
IOU는 쉽게 말해서 두 개의 bounding box가 있을 때, 얼마나 겹치는지(같은지)를 표현하는 지표입니다.
각각의 bounding box는 5개의 예측 값으로 구성됩니다: [x, y, w, h, confidence]. 이때 (x, y)는 각각의 그리드 칸을 기준으로 한 box의 중심 좌표이며, w, h는 전체 이미지를 기준으로 한 box의 너비, 높이 값입니다. 마지막으로 confidence는 예측 값과 정답 값 간의 Iou 값입니다.
그리드의 각 칸은 각 클래스에 대한 조건부 확률도 예측합니다.
이 값은 Bouding box의 개수 B 값과는 별개로 그리드의 한 칸당 하나의 세트만 계산됩니다.
테스트 시에 조건부 확률 값과 각각의 box의 confidence 값을 곱해 각 box에 대한 class별 score 값을 계산합니다.
YOLO의 연구진들은 YOLO를 PASCAL VOC를 통해 평가했으며 이를 위해 S=7, B=2 값을 사용했습니다. 또한 PASCAL VOC가 20개의 클래스를 가지므로 C 값은 20입니다. 따라서 최종 예측값은 7 x 7 x 20 크기의 텐서입니다.
PASCAL VOC는 image detection을 위한 dataset입니다.
2.1. Network Design
YOLO의 네트워크는 이미지 classification을 위한 GoogLeNet 모델의 아키텍처를 가져와 사용했습니다. YOLO는 24개의 convolution layer와 이를 잇는 두 개의 fully connected layer로 구성됩니다. 또한 GoogLeNet의 inception module을 대신하여 1 x 1 reduction layer와 3 x 3 convolution layer를 사용합니다.
다음의 이미지는 GoogLeNet의 아키텍쳐입니다.
본래의 인셉션 모듈은 다음과 같은 구조를 가지고 있습니다. YOLO의 연구진들은 이를 대체하여 1 x 1 reduction layer와 3 x 3 convolution layer를 사용했습니다.
다음의 이미지는 YOLO 네트워크의 아키텍쳐입니다.
YOLO의 더 빠른 버전인 Fast YOLO의 경우에는 convolution layer를 24개가 아닌 9개를 사용했다고 합니다. 네트워크의 사이즈를 제외한 다른 요소(training, testing parameters)는 YOLO와 Fast YOLO가 동일합니다.
2.2. Training
연구진들은 네트워크의 처음 20개의 convolution layer를 ImageNet 1000-class competition dataset에 대해 pretrain (사전 훈련) 했습니다. 그 다음 모델이 detection을 수행할 수 있도록 변환해야하므로 4개의 convolution layer와 가중치가 임의로 초기화된 2개의 fully connected layer를 추가했다고합니다.
네트워크의 최종 레이어가 클래스 확률과 bounding box 좌표(coordinate)를 예측합니다. 연구진들은 bounding box의 높이와 너비가 0과 1 사이의 값을 가지도록 이미지의 높이와 너비에 대해 정규화(normalize) 시켰고 bounding box의 좌표인 x, y 값 또한 0과 1 사이의 값을 갖도록 grid 칸에 대해 정규화시켰다고 합니다.
YOLO는 최종 레이어에 대해서는 linear activation function을 사용하였으며 다른 레이어는 leaky ReLU (rectified linear activation) activation을 사용합니다.
또한 모델의 아웃풋을 최적화하는데에는 SSE (sum-squared error)를 사용했다고 합니다. YOLO의 저자들은 SSE가 optimize 하기에 쉽기 때문에 사용했지만 average precision을 최대화하는 목적과 다소 맞지 않는 부분이 있다고 합니다.
SSE는 localization error와 classification error에 동일한 가중치를 부여하기 때문에 적절하지 않을 수 있습니다. 또한, 이미지에서 많은 그리드 칸이 물체를 포함하고 있지 않는 경우가 많은데 이와 같은 경우에 해당 칸의 confidence score가 0에 가깝게 되기 때문에 object를 포함하고 있는 다른 칸들의 gradient가 굉장히 큰 것처럼 만드는 효과가 있습니다. 이는 모델이 학습 초기에 diverge 하게끔 만들기 때문에 모델을 불안정하게 만들 수 있다는 문제점이 있습니다.
모델이 diverge 한다는 것은 학습시에 적절하지 못한 값으로 튀어 최적값으로 converge 할 수 없게 되는 것을 의미합니다.
이를 해결하기 위해 YOLO의 연구진들은 bounding box 좌표 prediction의 loss는 늘리고 object를 포함하지 않는 box의 confidence prediction에 대한 loss는 줄였다고 합니다. 이는 두 개의 파라미터 λcoord와 λnoobj를 사용하여 달성했으며, 각각의 값은 5, 0.5로 설정했다고 합니다.
또한 SSE는 큰 box와 작은 box의 에러에 같은 가중치를 준다는 문제점도 있었습니다. 하지만 커다란 상자에서의 작은 오차보다 작은 상자에서의 오차가 더 중요하다는 것을 반영해야합니다. 예를 들어 사람을 detect하는 경우 몇 인치 정도 쉬프트하는 것은 문제되지 않지만, 안경을 검출하는 경우에는 몇 인치 정도 쉬프트 하는 것이 큰 에러가 될 수 있습니다. 이를 부분적으로 해결하기 위해 bounding box의 width, heigth값을 그대로 사용하지 않고 루트를 씌워 사용하는 방법을 사용했다고 합니다.
YOLO는 그리드의 한 칸당 다수의 bounding box를 예측하기 때문에 하나의 bounding box predictor가 하나의 object에 할당되도록 (논문에서 저자들은 responsible이라는 단어를 사용했습니다) 하는 과정이 필요했습니다. YOLO의 연구진들은 ground truth와 가장 높은 IOU를 갖는 predictor를 할당했다고 합니다. 이와 같은 과정은 bounding box와 predictor 사이의 specialization으로 이어지며, 각각의 predictor는 특정한 사이즈, 종횡비, 클래스, 물체를 예측하는 것을 더욱 잘 해낼 수 있게 된다고 합니다.
학습시에 최적화 되는 multi-part loss function은 다음과 같습니다.
앞서 설명되었던 부분이 반영되어있는 것을 알 수 있습니다.
YOLO의 연구진들은 PASCAL VOC 2007, 2012 training, validation set을 사용하여 YOLO를 총 135 에포크동안 훈련시켰으며 testing 시에도 2007, 2012 데이터셋을 사용했다고 합니다. 또한 batch size는 64, momentum은 0.9, decay는 0.0005 값을 사용했다고 합니다.
Learning rate schedule은 다음과 같습니다. 첫 에포크에는 learning rate을 10^(-3)에서 10^(-2)로 올렸으며, 10^(-2)의 learning rate으로 75 에포크동안 잔행한 후에 10^(-3) 값으로 30 에포크를 진행한 후에 마지막 30 에포크동안은 10^(-4) 값으로 진행했다고 합니다.
오버피팅을 방지하기 위한 방법으로는 dropout과 data augmentation 기법을 사용했으며 dropout의 경우에는 첫번째 connected layer 이후에 0.5 값을 사용해서 layer 간의 co-adaptation을 방지했습니다. Data augmentation의 경우에는 random scaling, translation, exposure, saturation 값을 조정하였다고 합니다.
dropout은 모델 오버피팅을 방지하기 위한 방법으로, 딥러닝에서 랜덤으로 몇몇 뉴런을 비활성화시키는 방법이며, data augmentation 기법은 원래 가지고 있는 이미지 데이터를 이동시키고, 사이즈를 변경시키고, 색상을 변경시키는 등의 변화를 주어 데이터셋의 크기를 늘리는 기법입니다.
2.3. Inference
학습시와 동일하게, 하나의 이미지에 대해 detection을 predict하는 과정은 한 번의 추론 과정만 거치면 됩니다.
YOLO의 그리드 디자인은 bounding box를 predict 하는 과정에서 공간적 다양성을 강화합니다.
대부분의 경우에서는 그리드의 어떤 칸에 물체가 있는지 확실해서 네트워크가 한 물체에 하나의 box를 예측하지만, 커다랗거나 경계 근처에 있는 물체의 경우에는 NMS(Non-maximal suppression) 기법을 사용할 수 있습니다. NMS를 사용하는 경우 그렇지 않은 경우와 비교했을 때 mAP에 2-3% 정도의 퍼포먼스 향상이 있었다고 합니다.
NMS는, 동일한 물체에 대해 여러개의 bounding box가 생성된 경우가 가장 높은 score를 갖는 bounding box를 제외한 나머지 box를 제거하는 기법입니다.
2.4. Limitations of YOLO
YOLO는 각 그리드 칸마다 두 개의 bounding box만을 예측하며 하나의 클래스만 예측하기 때문에 공간적 제약이 굉장히 큽니다. 이러한 공간적 제약은 모델이 가까이 있는 여러 물체들을 예측하는 것을 어렵게 합니다. 따라서 YOLO는 새 떼와 같이 작은 물체들의 집합을 잘 감지하지 못합니다.
YOLO는 데이터로부터 bounding box를 예측하는 것을 학습하기 때문에 새로운 구성이나 종횡비(aspect ratio, 가로세로의 비율)를 갖는 물체에 대해 일반화하는 것을 잘하지 못합니다. 또한 YOLO는 여러개의 downsampling layer를 갖고 있기 때문에 상대적으로 거친(coarse) feature들을 사용합니다.
마지막으로, YOLO의 loss function은 작은 bounding box와 큰 bounding box에 대해 같은 취급을 합니다. 이는 큰 box에 있는 작은 에러는 일반적으로 괜찮지만 작은 box에 있는 작은 에러는 IOU에 훨씬 더 큰 영향을 주기 때문에 문제가 있을 수 있습니다. YOLO의 에러 중 가장 큰 요인은 부정확한 localization입니다.
3. Comparision to Other Detection Systems
Object Detection 파이프라인은 보통 인풋 이미지로 부터 좋은 피쳐를 뽑아내는 것으로부터 시작합니다. 그 다음에는 classifier 또는 localizer가 feature space 상의 물체를 검출하는데 사용됩니다. 이러한 classifier 또는 localizer는 sliding window 방식, 또는 전체 이미지를 사용하는 방식 또는 이미지의 부분적인 집합을 사용하는 방식이 사용됩니다. 지금부터는 YOLO를 다른 좋은 detection framework들과 다른점, 비슷한 점을 중점적으로 이야기하며 비교해보도록 하겠습니다.
Deformable parts models
DPM은 sliding window 기법을 사용합니다. 또한 DPM은 따로따로 분리된 pipeline을 사용하여 static feature들을 뽑아내고, region을 분류하며 높은 점수를 갖는 region에 대해 bbox (bounding box)를 예측합니다.
YOLO는 이러한 여러 구성 요소들을 하나의 CNN으로 대체합니다. YOLO의 네트워크는 feature extraction, bbox prediction, NMS, contexture reasoning들을 동시에 수행합니다. 그리고, static feature를 대신하여 feature를 in-line으로 훈련시키고 detection task를 위해 최적화합니다. 이러한 단일화된 아키텍처는 DPM보다 더 빠르고, 정확한 모델로 이어집니다.
R-CNN
R-CNN과 다른 변형된 모델들은 sliding window를 대신하여 region proposal 기법을 사용합니다. Selective search는 후보 Bbox를 생성하고 CNN은 feature를 뽑아내며, SVM은 box에 score를 매깁니다. 그리고 NMS 기법을 통해 복제된(겹치는) detection들을 제거합니다. 이러한 복잡한 파이프라인의 각각의 단계들은 하나하나 정교하게 튜닝되어야하며, 시스템을 굉장히 느리게 만들어 테스트시에 이미지당 40초 이상이 걸리게 합니다.
YOLO는 R-CNN과 몇 개의 공통점을 가지고 있습니다. YOLO는 각각의 그리드의 칸을 통해 후보 Bbox를 검출하고 이러한 box에 convolution feature를 통해 점수를 매깁니다. 하지만 YOLO는 그리드의 칸에 공간적 제약을 둠으로써 같은 object에 여러번 중복되는 detection을 줄인다는 특징이 있습니다. 또한 YOLO는 훨씬 더 적은 bbox(selective search에서의 2000개와 비교했을 때 단지 98개)를 도출합니다. 마지막으로 YOLO는 이러한 각각의 구성 요소들을 하나의 최적화된 모델로 통합합니다.
Other Fast Detectors
Fast, Faster R-CNN은 computation을 공유하고, region proposal에 있어서 selective search 기법이 아닌 neural network를 사용함으로써 R-CNN의 속도를 높이는 것을 주 목표로 합니다. 이 둘은 속도와 정확도 측면에서 R-CNN보다 좋은 성능을 갖고 있지만 real time 측면에서는 아직 많이 부족하다고 볼 수 있습니다.
많은 연구진들은 DPM 파이프라인의 속도를 높이는데 노력을 가하고 있습니다. 그들은 HOG computation의 속도를 높이고, cascade를 사용하며, GPU를 사용하여 속도를 개선하려 합니다. 그러나 커다란 파이프라인의 각각의 구성 요소들을 최적화하는 것을 대신하여 YOLO의 연구진들은 하나의 단일화된 파이프라인과 빠른 속도를 추천합니다.
하나의 클래스, 예를 들어 얼굴 또는 사람,만을 검출하는 경우에는 훨씬 작은 양의 변이만을 다루면 되기 때문에 굉장히 잘 최적화할 수 있습니다. 이와는 달리 YOLO는 다양한 물체들을 동시에 검출하는 법을 배울 수 있는 종합적인 목표의 검출기입니다.
Deep MultiBox
R-CNN과 달리 Deep MultiBox는 CNN을 학습시켜 RoI를 예측하도록 합니다. MultiBox는 또한 confidence prediction을 single class prediction으로 대체함으로써 single object detection도 수행할 수 있습니다. 그러나 MultiBox는 general object detection을 수행할 수 없고 여전히 커다란 detection 파이프라인의 하나의 구성요소입니다. YOLO와 MultiBox는 둘다 bbox를 예측하기 위해 Convolutional network를 사용합니다. 그러나 MultiBox와 달리 YOLO는 하나의 완성된 detection system입니다.
OverFeat
OverFeat는 CNN이 localization을 수행하도록 학습시키고 그러한 localizer가 detection을 수행할 수 있도록 적용시킵니다. OverFeat는 sliding window detection을 효율적으로 수행하지만 여전히 분절된 시스템입니다. 또한 OverFeat는 detection이 아닌 localization을 위해 최적화를 수행합니다. DPM과 같이 localizer는 예측을 수행할 때 국소적인 정보만 봅니다. 또한 OverFeat는 전체적인 문맥을 읽을 수 없으며 따라서 막대한 양의 post-processing을 필요로 합니다.
MultiGrasp
YOLO의 그리드를 이용한 방식은 grasp regression을 위한 MultiGrasp 시스템에 기반을 둡니다.. 그러나 grasp detection은 object detection과 비교했을 때 훨씬 더 간단한 작업입니다. MultiGrasp는 하나의 객체를 포함하는 이미지에 대해 하나의 파악 가능한 영역만 예측하면 됩니다. YOLO는 한장의 이미지에서 여러개의 클래스를 가진 여러개의 물체의 bbox와 class probability를 예측한다는 점에서 훨씬 더 복잡하다고 볼 수 있습니다.
4. Experiments
4.1. Comparison to Other Real-Time Systems
Fast YOLO는155 FPS로 PASCAL 데이터셋에 학습된 object detection method 중에 가장 빠릅니다.
YOLO 를 VGG-16을 사용하여 학습시킨 경우에는 정확도가 향상된 것을 볼 수 있지만 굉장히 느려진 것 또한 볼 수 있습니다.
4.2. VOC 2007 Error Analysis
PASCAL에 학습된 detection method 중에 높은 정확도를 내는 Fast R-CNN과 비교한 Error Analysis는 다음과 같습니다.
표를 봤을 때 YOLO는 물체를 정확하게 localization 하는 데에서 에러를 많이 낸다는 것을 알 수 있습니다.Fast R-CNN은 localization 에러는 잘 내지 않지만 배경에서 Fase Positive를 많이 검출해낸다는 것을 알 수 있습니다.
4.3. Combining Fast R-CNN and YOLO
연구진들은 또한 Fast R-CNN을 YOLO와 결합하여 사용했을 때의 성능평가도 실험해보았습니다.
두 가지 모델을 결합해서 사용했을 때 mAP가 향상되는 결과가 있었습니다.
4.4. VOC 2012 Results
카테고리 중에서 bottle, sheep, tv/monitor과 같이 상대적으로 작은 물체에 대해서 성능이 낮다는 것을 볼 수 있습니다.
4.5. Generalizability: Person Detections in Artwork
Yolo를 Picasso Dataset과 People-Art Dataset에 대해 다른 모델과 비교한 결과입니다.
6. Conclusion
YOLO는 구성이 간단하고 전체 이미지에 대해 바로 훈련될 수 있습니다.
Classifier-based 접근 방식과 달리 YOLO는 탐지 성능에 직접 해당하는 loss function 대해 훈련되고 전체 모델이 한번에 훈련됩니다.
Fast YOLO는 가장 빠른 범용 객체 감지기이며, 새로운 도메인으로 잘 일반화되어 빠르고 강력한 객체 탐지에 의존하는 애플리케이션에 이상적입니다.'Computer Vision' 카테고리의 다른 글
Yolov7 커스텀 데이터셋에 학습시키기 (2) 2023.03.07 OverFeat 논문 요약 (1) 2023.03.06 Ground-aware Monocular 3D Object Detection for Autonomous Driving 논문 공부 (0) 2022.08.05 [openCV] YOLO object detection (video) (0) 2022.07.30 [openCV] Object height 알아내기(python) (0) 2022.07.25