논문 리뷰

YOLO paper review

cottonlove 2022. 12. 2. 15:10

You Only Look Once: Unified, Real-Time Object Detection

https://arxiv.org/pdf/1506.02640.pdf

 

Background

- fps: frame per second의 약자로 1초당 frame 수. mAP와 함께 Object detection의 또 다른 성능지표로 초당 detection하는 비율을 의미. 참고로 우리가 real time이라고 느끼는 fps는 30fps이다. 즉, 초당 연속적인 frame을 30개 이상 처리할 수 있어야.

- non-maximum suppresion: object detector가 예측한 bounding box중 정확한 bounding box를 선택하도록 하는 기법 (출처: https://wikidocs.net/142645)

<일반적인 NMS 과정>

1. 모든 Bounding box는 자신이 해당 객체를 얼마나 잘 잡아내지 나타내는 confidence score를 가집니다. 모든 bounding box에 대하여 threshold 이하의 confidence score를 가지는 Bounding Box는 제거합니다. Confidence score가 일정 수준 이하인 bounding box들에 대해 일차적으로 필터링을 거치는 과정입니다.

2. 남은 Bounding Box들을 Confidence score 기준 모두 내림차순 정렬합니다.

3. 맨 앞에 있는 Bounding box 하나를 기준으로 잡고, 다른 bounding box와 IoU 값을 구합니다. IoU가 threshold 이상인 Bounding box들은 제거합니다. Bounding box끼리 IoU가 높을수록, 즉 많이 겹쳐질수록 같은 물체를 검출하고 있다고 판단하기 때문입니다.

4. 해당 과정을 순차적으로 시행하여 모든 Bounding box를 비교하고 제거합니다.

5. Confidense threshold가 높을수록, IoU threshold가 낮을수록 더 많은 bounding box가 제거됩니다.

<YOLO에서의 NMS>

출처:&nbsp; &nbsp;https://wikidocs.net/142645

Abstract

본 논문은 object detection에 대해 새로운 접근인 YOLO(You Only Look Once) model을 제안하고 있다.

이전의 object detection model은 detection task를 수행하기 위해 classifiers를 변형하여 사용했다면 YOLO는 detection 문제를 regression 문제로 봄으로써 입력 이미지에서 direct하게 bounding box 좌표와 각 클래스일 확률을 구한다.

또, YOLO는 전체 파이프라인이 하나의 네트워크라서 optimization이  End-to-End 방식으로 쉽고 input image를 CNN에 한번 inference하는 것을 통해 동시에 여러개의 bounding box와 class일 확률을 구할 수 있어 매우 빠르다고 한다. (45 fps, 빠른 버전의 경우 155fps)

SOTA와 비교했을 때, YOLO는 localization error는 더 많지만 background문제로 인한 false positive는 적다고 한다.

또 YOLO는 object의 general한 표현을 더 잘 학습하는데 natural images로 학습한 후 artwork에 적용했을 때 이전의 DPM, R-CNN과 비해 상당히 큰 격차로 좋은 성능을 보였다고 한다.

01 Introduction

abstract에서 말했듯이 이전의 object detection system들은 classification model을 object detection system에 맞게 변형한 모델들이 대부분이었다고 한다. 기존의 대표적인 object detection model로는 DPM과 R-CNN이 있다.

DPM의 경우 sliding window 방법론을 사용했고 R-CNN의 경우 regional proposal(BB일 확률이 높은 곳을 제안), classification(제안된 box영역을 classifer에 넣어 classification 수행), 후처리(BB 개선) 이렇게 3가지 단계를 거쳐 detection을 수행한다.

R-CNN의 파이프라인

이처럼 R-CNN은 3가지 단계를 거쳐 detection을 수행하고 개별적으로 3가지 단계를 학습해야하므로 복잡한 파이프라인을 갖고 이로 인해 optimization이 어렵고 굉장히 큰 inference time을 갖는 다는 단점이 있다.

그래서 본 논문에서 저자는 object detection을 input image의 pixels에서 bounding box좌표와 class일 확률을 구하는 "a single regression problem"으로 보았다고 한다. 이 방식을 쓰게 되면 어떤 물체가 어디 있는지를(object detection) 이미지를 한번만 보고(You Only Look Once) 예측할 수 있게 된다.

논문에 의하면,,,ㅎ YOLO는 간단한데

Fig.1

위의 그림을 보면 먼저 input image를 448x448크기로 만든 다음 a single CNN에 통과시키고 Non-max supperssion을 통해 object detection을 수행한다고 한다. 이처럼 a single CNN이 여러개의 boudning box와 class일 확률을 동시에 예측한다. 

이렇게 YOLO는 전체이미지에 대해 directly detection성능을 최적화하는데 이런 unified model은 이전의 object detection 방식에 비해 몇가지 이점이 있다. (abstract에서 말한 내용)

1. 겁나 빠르다. object detection을 regression 문제로 봄으로써 complex pipeline이 필요없다. 그냥 test할 때 test image를 NN에 통과시키면 된다. 

2. 다른 real-time systems에 비해 2배 이상의 mAP를 갖는다. 

3. image의 global한 정보를 사용해 예측한다. sliding window나 regional proposal방식에 base를 둔 다른 model과 달리 학습과 test때 전체 이미지를 봄으로써 appearance뿐만 아니라 class에 대한 contextual 정보를 암묵적으로(implicitly) encoding한다. 그래서 YOLO는 fast R-CNN보다 background로 인한 false positive error가 적다고 한다.

4. object의 gerneral 표현을 잘 학습한다. (일반화 성능이 좋다) 그래서 natrual image로 학습후 art-work에 대해 test했을 때 DPM, R-CNN보다  성능이 좋았다. 

물론 단점도 있다.

SOTA에 비하면 정확성이 떨어지고 작은 object에 대해 정확하게 detect하지 못한다. (이런 tradeoff에 대한 내용은 experiment section에서 다룬다.)

02 Unified Detection

YOLO는 단일 convolutional neural network 모델 하나로 object detection task를 수행하기 위해 필요한 연산인 특징 추출, 바운딩 박스 계산, 클래스 분류를 모두 수행합니다. 

즉, 전체 이미지를 입력으로 받은 모델이 object detection에 필요한 모든 연산을 수행함으로써 bounding box regression과 multi-class classification을 동시에 수행할 수 있다! 이것이 바로 YOLO에서 말하는 Unified Detection의 개념입니다.

We unify the separate components of object detection into a single neural network. 

Introduction에서 말했듯이 YOLO는 Unified Detection을 함으로써 기존의 모델에 없었던 다양한 이점들이 있다.

모델이 이미지 전체를 보고 bounding box를 예측하므로써 image의 global feature를 잘 이용해서 추론할 수 있고 end-to-end 학습이 가능하고, 실시간 추론 속도가 가능해지며 높은 mAP를 유지할 수 있다고 한다.

Our network uses features from the entire image to predict each bounding box. It also predicts all bounding boxes across all classes for an image simultaneously. This means our network reasons glob-ally about the full image and all the objects in the image. The YOLO design enables end-to-end training and real- time speeds while maintaining high average precision. 

 

조금 더 깊게 YOLO 모델을 알아보자.

먼저 YOLO model은 입력 이미지를 SxS grid로 나눈다.

만약 어떤 객체의 중심이 특정 그리드 셀 안에 존재한다면, 해당 그리드 셀이 그 객체를 검출해야한다.

그리고 각 grid cell은 B개의 bounding box를 예측한다. 각 BB마다 confidence scores를 예측하는데

confidence scores란 해당 BB안에 객체가 존재한다는 것이 얼마나 믿을 만한지, 그리고 예측한 BB가 얼마나 정확한지를 의미하며 0에서 1사이의 값을 갖는다.

수식적으로 나타내면 아래와 같다.

confidence score

위 수식에서 IOU는  intersection over union의 약자로 객체의 실제 bounding box와 예측 bounding box의 합집합 면적 대비 교집합 면적의 비율을 뜻한다. 즉, IOU = (실제 bounding box와 예측 bounding box의 교집합) / (실제 bounding box와 예측 bounding box의 합집합)이다.

그래서 어떤 grid cell안에 객체가 없으면 Pr(Object) = 0이므로 confidence score는 0이다. 만약 grid cell안에 어떤 객체가 확실히 있다고 예측했을 때 즉, Pr(Object) = 1일 때가 가장 이상적이므로 confidence score가 IOU와 같을 때가 가장 이상적인 confidence score이라고 한다.

그리고 각 bounding box예측에는 x, y, w, h, confidenc 5개의 값을 포함한다.

이때 (x,y)는 BB의 중심점이며, 각 grid cell마다 상대적인 값으로 표현한다. (0-1사이의 값)

(w,h)는 BB의 너비, 높이인데 전체 이미지에 대해 상대적인 값으로 표현한다. (0-1 사이의 값)

confidence는 앞에서 다룬 confidence score와 동일하다.

각 grid cell마다 C개의 조건부 확률값을 예측한다.

조건부 확률값은 해당 grid cell안에 객체가 있다는 조건 하에 그 객체가 어떤 class인지에 대한 조건부 확률 값으로 수식으로 나타내면 아래와 같다.

YOLO에서는 grid cell당 예측하는 bounding box의 갯수(=B개)와 상관없이 grid 당 오직 하나의 각 class일 확률만 예측한다. (그래서 it struggles to precisely localize some objects, expecially small ones인 듯,,?)

그리고 test시 conditional class probability인 C와 개별 bounding box의 confidence socre를 곱해주는 데

이것을 각 bounding box에 대한 class-specific confidence score라고 한다.  수식으로 표현하면 아래와 같다.

위 class-specific confidence score는 해당 bounding box에 특정 class 객체가 나타날 확률(= Pr(Class i))과 예측된 boudning box가 실제 객체에 얼마나 잘 들어맞는 지(=IOU)를 나타낸다.

These scores encode both the probability of that class appearing in the box and how well the predicted box fits the object.

 

정리하자면,

- Input image -> SxS gird cells로 나눔

- 각 gird cell은 B개의 바운딩 박스와 각 바운딩 박스에 대한 confidence scores를 갖는다.

- 각 grid cell은 C개의 conditional class probability를 갖는다.

- 각 bounding box는 x,y,w,h, confidence로 구성된다.

- Test시에는 conditional probability와 boudning box의 confidence score를 곱해 class-specific confidence score를 얻는다.

논문에서는 YOLO의 성능 평가를 위해 PASCAL VOC dataset을 사용했으며 S=7, B=2로 셋팅하고 파스칼 VOC에 총 20개의 labeling된 class가 있으므로 C=20이다. 따라서 이미지는 7x7 grid cell로 나뉘고 하나의 grid cell에서 2개의 boudning box를 예측한다. 

이렇게 했을 때 최종 output tensor는 SxSx(Bx5 + C) 크기의 tensor이므로 최종 예측 텐서의 dimension은 7x7x30이다.

## Output tensor 해석

출처: deepsystem.io의 slide (https://docs.google.com/presentation/d/1aeRvtKG21KHdD5lg6Hgyhx5rPq_ZOsGjG5rJ1HP7BbA/edit#slide=id.g137784ab86_4_739)

본 논문에서는 7x7 grid cells로 Input image를 나누었음. 그리고 각각의 grid cell은 2개의 BB를 가짐.

7x7x30 output tensor에서 1x1x30 tensor가 하나의 grid cell안에 있는 BB의 정보를 갖고 있는데

먼저 앞의 5개 값은 해당 grid cell의 첫 번째 BB에 대한 정보인 x,y,w,h,c 값을 의미한다.

그리고 다음 5개 값은 해당 grid cell의 두 번째 BB에 대한 정보인 x,y,w,h,c 값을 의미한다.

그리고 나머지 20개 값은 20개(C = 20)의 class에 대한 conditional class probability에 해당된다.

그래서 아까 언급한 것처럼 Test시에는

첫 번째 BB의 confidence score와 각 class에 대한 conditional class probability를 곱해 첫 번째 BB의 class-specific confidence score를 얻는다.

마찬가지로 두 번째 BB의 class-specific confidence score를 얻는다.

이런 식으로 모든 grid cell의 BB에 대해  class-specific confidence score를 구하면 7x7x2  = 98. 98개의 class-specific confidence score를 얻을 수 있고 이 98개의 class specific confidence score에 대해 각 20개의 클래스를 기준으로 non-maximum suppression 을 하여, Object에 대한 Class 및 bounding box Location를 결정한다고 한다.

2.1 Network Design

앞에서 말했듯이 YOLO는 하나의 CNN(Convolutional Neural Network)구조로 디자인되었다.

파스칼 VOC 데이터셋으로 성능을 평가했고

CNN의 앞단은 convolutional layers로 구성되어 있고 이어서 Fully Connected layers로 구성되어 있다. 이때 convolutional layers는 이미지로부터 특징을 추출하고 뒤의 FC layers는 클래스 확률과 bounding box의 좌표를 예측한다.

YOLO의 신경망 구조는 이미지 분류에 사용되는 GoogLeNet에서 들고왔다고 한다. YOLO는 총 24개의 convolutional layers와 2개의 FC layers로 구성되어 있고 GoogLeNet의 inception module 대신 1x1 reduction layer와 3x3 convolution layer의 결합을 사용했다고 한다. 

YOLO의 전체적인 구조는 아래 그림과 같고 앞서 말한대로 최종 아웃풋은 7x7x30 tensor이다.

좀 더 빠른 객체 인식을 위해 더 적은 convolution layers(24개->9개)와 필터를 사용하는 fast YOLO도 있음.

2.2 Training

<Pretraining>

우선 1000개의 class를 갖는 ImageNet 데이터 셋으로 YOLO의 convolutional layers를 사전훈련(Pretraining)시켰다고 한다.

이때, 24개중 첫 20개의 컨볼루션 레이어와 FC layer를 연결해 ImageNet으로 사전학습(task: Image Classification)시키고 모든 훈련과 추론을 할 때 Darknet framework를 사용했다고 한다.

이렇게 사전 훈련 시킨 분류모델을 object detection model로 바꾸기 위해 사전 훈련된 20개의 conv layers뒤에 4개의 conv layers와 2개의 FC layers를 추가하고 random으로 가중치 초기화하고 이미지의 해상도를 224x224 -> 448x448로 증가시켜 학습시켰다고 한다.

그리고 앞에서 말한 것처럼 예측할 bounding box의 w,h,x,y를 모두 0과 1사이 값으로 정규화했다.

YOLO 신경망의 마지막 계층에는 선형 활성화 함수(linear activation function)를 적용했고, 나머지 모든 계층에는 leaky ReLU(non-linear activation function)를 적용했다.

 <Loss Function>

그리고 loss function은 SSE(sum-squared error)를 기반으로 했기에 최종 output의 SSE를 최적화하는 것이 목표가 되었다고 한다.

이때 SSE를 사용한 이유는 SSE가 최적화하기 쉽기 때문. 

근데 이때 SSE를 기반으로 loss function을 설정했을 때 3개의 문제가 생기는데 저자는 문제 해결을 위해 3가지 개선안을 적용했다고 했다.

* 3가지 문제

1) SSE를 최적화화는 것과 YOLO의 최종 목표인 mAP를 높이는 것이 완벽하게 일치하지 않음. YOLO의 lossd에는 bounding box의 위치를 얼마나 잘 예측했는지에 대한 loss인 localization loss와 class를 얼마나 잘 예측했는지에 대한 loss인 classification loss가 있다. 이때 localization loss와 classification loss의 가중치를 동일하게 두고 학습시키는 것은 좋은 방식이 아니지만 SSE를 최적화하는 방식은 이 두 loss의 가중치를 동일하게 취급한다.

2) 이미지 내 대부분의 grid cell에는 object가 없음. 이때 grid cell에 객체가 없다면 confidence score = 0이다. 따라서 대부분의 grid cell의 confidence score = 0이 되도록 학습되는 데 이는 모델의 불균형을 초래한다.

3) SSE는 큰 bounding box와 작은 bounding box에 대해 동일한 가중치로 loss를 계산한다. 그러나 실제로 작은 bounding box가 큰 bounding box보다 작은 위치 변화에 더 민감함 (왜냐면 큰 물체의 경우 BB가 조금 달라져도 여전히 BB안에 큰 물체가 있지만 작은 물체는 아님)

* 해결책

1,2번 문제 -> 객체가 존재하는 bounding box의 좌표에 대한 loss의 가중치를 증가시키고 객체가 존재하지 않는 bounding box의 confidence loss에 대한 가중치는 감소시킴. 이는 곧 localization loss와 classification loss 중 localization loss에 대한 가중치를 증가시키고 객체가 없는 grid cell의 confidence loss보다 객체가 있는 grid cell의 confidence loss의 가중치를 증가시킨 다는 의미이다. 따라서 1,2번 문제가 해결되고 이를 위해 λ_coord와 λ_noobj 두 개의 파라미터를 사용했다. 논문에서 λ_coord=5, λ_noobj=0.5로 가중치를 줬다.

3번 문제 -> bounding box의 너비와 높이에 square root를 취해주었다. 너비와 높이에 square root를 취해주면 너비와 높이가 커짐에 따라 그 증가율이 감소해 loss에 대한 가중치를 감소시키는 효과가 있기 때문입니다.

그리고 YOLO는 하나의 그리드 셀 당 여러 개의 bounding box를 예측한다.(이 논문의 경우 2개의 bounding box) 

근데 훈련(training) 단계에서 하나의 bounding box predictor가 하나의 객체에 대한 책임이 있어야 한다. 즉, 객체 하나당 하나의 bounding box와 매칭을 시켜야 한다. 따라서 여러 개의 bounding box 중 하나만 선택해야 한다. 이를 위해 예측된 여러 bounding box 중 실제 객체를 감싸는 ground-truth boudning box와의 IOU가 가장 큰 것을 선택한다. 이렇게 훈련된 bounding box predictor는 특정 크기(size), 종횡비(aspect ratios), 객체의 클래스(classes of object)를 잘 예측하게 된다고 한다.

종합하자면 training 시 사용하는 loss function을 수식으로 표현하면 아래와 같다.

*설명 참고 출처: https://curt-park.github.io/2017-03-26/yolo/

Loss function을 이해하기 위해 필요한 전제조건 몇가지는 다음과 같다.

- Grid cell의 여러 bounding box들 중, ground-truth box와 IOU가 가장 높은 bounding box를 predictor로 설정한다.

denotes that the jth bounding box predictor in cell i is “responsible” for that prediction.

- 기준에 따른 각 기호의 의미

  • (1): object가 존재하는 grid cell i의 predictor bounding box j (object가 존재하는 i번째 grid cell의 BB 중 predictor bounding box인 j번째 BB)
  • (2): object가 존재하지 않는 grid cell i의 bounding box j
  • (3): object가 존재하는 grid cell i

- Ground-truth box의 중심점이 어떤 grid cell 내부에 위치하면, 그 grid cell에는 object가 존재한다고 본다.

위 loss function의 5개 식은 차례대로 아래와 같은 의미를 갖습니다. (0<=i<=49, 0<=j<=2 ...? 인덱스이면 48, 1이어야하는 게 아니라...? 시그마는 마지막 값을 포함하는 걸로 알고있는데... 이거 아시는 분 알려주세요! ㅎㅎ)

(1) Object가 존재하는 모든 i번째 grid cell 의 bounding box predictor jth BB에 대해, 예측한 x와 y의 loss를 계산.

(2) Object가 존재하는 모든 i번째 grid cell 의  bounding box predictor jth BB 에 대해, 예측한 w와 h의 loss를 계산. 위에서 언급한 것처럼 큰 box에 대해서는 작은 분산(small deviation)을 반영하기 위해 제곱근을 취한 후, sum-squared error를 구한다. (같은 error라도 큰 box의 경우 상대적으로 IOU에 영향을 적게 줌.)

(3) Object가 존재하는 모든 i번째 grid cell 의 bounding box predictor jth BB에 대해, confidence score의 loss를 계산. (Ci = 1)

(4) Object가 존재하지 않는 grid cell i의 bounding box predictor j에 대해, confidence score의 loss를 계산. (Ci = 0)

(5) Object가 존재하는 grid cell i에 대해, conditional class probability의 loss를 계산. (p_i(c)=1 if 예측된 class c is correct, otherwise: p_i(c)=0)

위에서 언급한대로 loss function에 사용한 두개의 파라미터

- λ_coord: coordinates(x, y, w, h)에 대한 loss와 다른 loss들과의 균형을 위한 balancing parameter.

- λ_noobj: 객체가 있는 box와 없는 box 간에 균형을 위한 balancing parameter. (일반적으로 image내에는 객체가 있는 그리드 셀보다는 없는 셀이 훨씬 많으므로 모델 불균형 문제 해소하기 위해)

loss function을 보면 알겠지만 1의 여러 기호를 사용해

- object가 해당 grid cell에 있을 때만 classification error를 더하고 (5) 

loss function only penalizes classification error if an object is present in that grid cell (hence the con- ditional class probability discussed earlier).

- 예측된 여러 bounding box 중 G/T BB와 IOU가 가장 높은 BB의 예측된 좌표값의 error만 더함 (1),(2)

It also only penalizes bounding box coordinate error if that predictor is “responsible” for the ground truth box (i.e. has the highest IOU of any predictor in that grid cell).

<학습 및 hyperparameter>

YOLO 연구진은 파스칼 VOC 2007, 2012 훈련 및 검증 데이터 셋을 활용하여 135 epochs로 YOLO 모델을 훈련을 시켰다.

이때 batch size=64, momentum=0.9, decay=0.0005로 설정.

<Learning Rate Scheduling>

초반에는 학습률(learning rate)을 0.001에서 0.01로 천천히 상승시킴. (만일 처음부터 높은 learning rate로 훈련시켰다면 기울기 폭발(gradient explosion)이 발생하기 때문에 처음에는 작은 값부터 시작.)

이후 75 epoch 동안에는 0.01, 30 epoch 동안에는 0.001, 그리고 마지막 30 epoch 동안은 0.0001로 learning rate를 설정. (learning rate를 처음에는 점점 증가시켰다가 다시 감소시킴)

<Overfitting 방지>

과적합(overfitting)을 막기 위해 드롭아웃(dropout)과 data augmentation을 적용.

- 드롭아웃 비율은 0.5로 설정.

- data augmentation을 위해 원본 이미지의 20%까지 랜덤 스케일링(random scaling)과 랜덤 이동(random translation)을 적용. 

2.3 Inference

training때와 마찬가지로 inference에서도 test image로부터 객체를 검출하는데 하나의 신경망 계산만 하면 된다. 파스칼 VOC dataset에 대해 YOLO는 한 이미지당 98개의 Bounding box를 예측하고 각 bounding box마다 클래스 확률을 구한다. 하나의 신경망 계산만 필요하므로 test 단계에서 YOLO는 매우 빠르다는 장점이 있다.

물론 단점도 있다. YOLO의 grid design은 한 가지 단점이 있는데 바로 하나의 객체를 여러 grid cell이 동시에 검출하는 경우이다. 객체의 크기가 크거나 객체가 grid cell의 경계에 가까운 경우, 여러 grid cell에서 그 객체를 포함한 bounding box가 여러 개가 생길 수 있다. 이를 다중 검출(multiple detection)문제라고 하는데 이는 non-maximal suppresion 방법을 통해 개선할 수 있다. YOLO는 non-maximal suppresion 방법으로 mAP를 2-3%가량 향상시켰다.

2.4 Limitations of YOLO

- 하나의 grid cell마다 2개의 BB를 예측하고 한개의 grid cell마다 오직 1개의 객체 검출할 수 있다. 따라서 공간적 제약(spatial constraints)을 야기한다. 이때 공간적 제약은 하나의 grid cell이 한 개의 object를 검출하므로 하나의 grid안에 두 개 이상의 object가 있다면 잘 검출하지 못하는 문제를 의미한다. ex. 새 떼 

- 데이터로부터 BB를 예측하도록 학습하기 때문에 훈련 단계에서 학습하지 못한 새로운 이미지 비율을 test에서 사용하면 성능이 별로

- BB 예측할 때 비교적 coarse features를 사용함

- 작은 BB와 큰 BB의 loss에 대해 동일한 가중치를 둔다

03 Comparison to other Detection Systems

(생략)

여기 잘 정리되어 있다... (https://bkshin.tistory.com/entry/%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-YOLOYou-Only-Look-Once)

04 Experiments

참고: https://bkshin.tistory.com/entry/%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-YOLOYou-Only-Look-Once

4.1 먼저 YOLO와 다른 실시간 detection system을 PASCAL VOC 2007데이터셋에 대해 비교했다.

기존 모델에 비해 속도(FPS)는 월등히 빠르고 정확도(mAP)도 높은 편이다.

4.2 YOLO와 fast R-CNN을 VOC 2007 데이터셋으로 평가했을 때 errors 탐구했다.

YOLO가 localization error가 상대적으로 큼.

Fast R-CNN은 YOLO에 비해 localization error는 작지만 background error가 크다.

4.3 YOLO와 fast R-CNN을 합쳐봄.

결합하므로써 Fast R-CNN의 단점 보완 (YOLO가 background error 작기 때문)

4.4 VOC 2012 데이터셋으로도 비교.

YOLO랑 Fast R-CNN결합한게 YOLO보다 잘 나왔고 YOLO는 SOTA보다 mAP 안좋지만

그래도 original R-CNN과 비슷한 값을 보임.

4.5 YOLO가 artworks에서도 일반화 잘됨을 보임. 

train dataset과 다른 분포를 보이는 test dataset을 사용해 실험함. 피카소 데이터셋과 일반 예술 작품 사용. 위 표는 YOLO과 다른 객체 검출 모델의 성능을 측정한 것. 파스칼 VOC 2007에서 학습한 YOLO, R-CNN, DPM 등의 성능을 서로 비교했을 때 R-CNN은 VOC 2007에서는 높은 정확도를 보이지만 예술작품에 대해서는 굉장히 낮은 정확도를 보였음. DPM은 예술 작품에 대해서도 정확도가 크게 떨어지지는 않았지만 VOC 2007에서의 정확도도 그리 높은 편은 아님. 반면 YOLO는 VOC 2007에서도 가장 높은 정확도를 보였고, 예술 작품에 대해서도 정확도가 크게 떨어지지 않았다.

즉, YOLO는 훈련 단계에서 접하지 못한 새로운 이미지도 잘 검출한다.

05 Real-Time Detection In The Wild

웹캠과 YOLO 연결해서 실시간 detection해봄.

결과는 아래링크에서 볼 수 있음.

https://pjreddie.com/darknet/yolo/

06 Conclusion

본 논문은 object detection task를 위한 unified model인 YOLO를 소개하고 있다.

YOLO는 간단하고 full image에 대해 직접적으로 학습이 가능하며 빠르고 일반화가 잘 된다는 장점이 있다...

Refereces