본문 바로가기

자율주행/논문리뷰

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

SMALL

2016년에 나온 논문으로 현재 기술들과는 상당히 다른 점이 있어 review부분에서 말하는 시간대는 앞서 논문이 나온 16년도를 배경으로 이야기하겠습니다.

 

0. Abstract

Object Detection에 관해서 새로운 방식으로 연구를 해서 YOLO라는 접근방식 얻었습니다.

이미지 전체에 대해서 하나의 신경망으로 bounding box 예측 및 class probabailites 예측을 가능하게 했습니다.

=> End-to-end 방식으로 optimized 했습니다.

 

※bounding box : 객체를 인식하는 직사각형 box를 말합니다.

※class probabailites : 클래스 확률이라고 직역이 되고 bounding box에서 검출한 객체가 특정 클래스에 해당할 확률을 말합니다.

 

Yolo 모델은 빠르고 다른 real-time detector보다 2배 나은 mAP 검출을 하였습니다.

다른 SOTA detection system과 비교를 했을때,  YOLO는 localization error가 더 많지만 background에서 오탐할 확률은 더 적은걸 알 수 있습니다.

 

YOLO 모델은 자연의 이미지를 artwork와 같은 다른 domain으로 바꿀려고 할 때 DPM, R-CNN과 같은 다른 detection 방법보다 더 나은 성능을 보여줍니다

 

 

1. Introduction

사람이 시각적인 정보처리하는 과정은 매우 빠르고 정확한 알고리즘을 통해서 이루어지게 됩니다.

현재 detection system에서는 detection기능을 수행하기 위해서는 detector의 기능을 변경했어야 했습니다.

객체를 탐지하기 위해서 classifiier(분류자)는 해당 객체를 가져오고 텍스트 이미지에서 다양한 크기와 위치에서 평가를 하였습니다. DPM(defomable parts models)과 같은 경우에는 전체 이미지를 균일한 간격으로 나누고 이를 sliding window 기법을 사용하여서 동작을 하였습니다.

 

그보다 이후에 나온 R-CNN은 region proposal methods (영역 제안)을 사용합니다.

먼저 이미지 내에서 잠재적인 bounding box를 찾습니다. 그 다음 이런 후보로 뽑힌 박스들 중에서 분류기를 실행하는 방법입니다. 분류가 끝났다면 후처리를 통해서 bounding box를 튜닝하고, 중복된 검출은 삭제하고 박스들을 다시 재채점합니다. -> 이런 복잡한 방법의 처리과정들은 느리고 최적화하기 되게 어렵습니다. (각각 요소들이 따로따로 학습이 되기 때문)

 

그래서 YOLO는 되게 심플하게 모델링이 되었습니다.

yolo는 single convolution network로 다중으로 bounding box들을 예측하고 박스들의 클래스 분류를 동시에 할 수 있습니다. 이런 통합된 (unified) 모델은 몇가지 장점이 있습니다.

  • YOLO는 굉장히 빠릅니다. (복잡한 pipeline을 가지지 않았습니다)
  • 이미지에서 예측을 할 때 전체적으로 진행이 됩니다. 
    • DPM에서 쓴 sliding window, R-CNN에서 사용된 region proposed가 아닌 YOLO는 전체 이미지를 학습하고 클래스들에 대해서 상황에 맞는 정보를 인코딩합니다. 
  • 객체의 일반화가 가능한 표현을 학습합니다. (새로운 영역이나 입력이 들어왔을 때에도 적용이 가능)

 

Yolo가 괜찮은 정확성은 보이지만 아직 특정 객체나 아주 작은 객체에 대해서는 인식하는데 어려움을 가집니다.

 

 

 

2.Unfiied Detection (통합 감지)

object detection에서의 구성요소들을 단일 neural network로 통합합니다.

YOLO 디자인은 end-to-end 학습 방법을 가능하게 하면서 높은 정확도를 유지하면서 실시간의 속도로 탐지가 가능합니다.

 

YOLO시스템은 들어온 이미지를 SxS 그리드로 나누는데, 만약 특정 객체의 중심부가 한 그리드 안에 들어온다면 해당 그리드를 검출해야합니다.

각 그리드 셀은 B개의 bounding box로 나뉘어지고 박스들의 신뢰도 예측점수를 측정합니다.(confidence scores)

이런 예측점수들은 얼마나 그 박스에 포함된 객체가 우리가 예상한값과 일치하는지를 수치적으로 알려줍니다.

우리는 이걸 다음과 같이 정의합니다.

우리는 confidence score가 ground truth와 predicted box 사이의 IOU와 같는게 이상적인 score입니다.

 

※IOU는 intersection over union의 약자로 객체의 실제 bounding box와 예측 bounding box의 합집합 면적 대비 교집합 면적의 비율을 뜻합니다. 즉, IOU = (실제 bounding box와 예측 bounding box의 교집합) / (실제 bounding box와 예측 bounding box의 합집합)입니다.

 

각각의 bounding box들은 5개의 예측치로 구성이 되어있습니다. x,y,w,h,confidence.

(x,y) 좌표는 bouning box 중심의 그리드 셀(grid cell) 내 상대 위치를 뜻합니다. 절대 위치가 아니라 그리드 셀 내의 상대 위치이므로 0~1 사이의 값을 갖습니다. 

width, height 모두 전체 이미지에대해서 상대적인 너비와 높이를 의미합니다. 이때 (w, h)는 이미지 전체의 너비와 높이를 1이라고 했을 때 bounding box의 너비와 높이가 몇인지를 상대적인 값으로 나타냅니다. 그러므로 (w, h)도 역시 0~1 사이의 값을 갖습니다.confidence는 앞서 말한것과 같이 confidence score와 같습니다.

 

각 그리드의 셀들은 C conditional class probabilites 값을 예측하는데 이는 다음과 같습니다.

그리드 셀 안에 객체가 있다고 가정할 때 그 객체가 어떤 클래스인지에 대한 조건부 확률입니다.

그리드 셀에 몇 개의 bounding box가 있는지와는 무관하게 하나의 그리드 셀에는 오직 하나의 클래스에 대한 확률 값만을 구합니다.

 

테스트 단계에서는 conditional class probabilities(C)와 각각의 개별적인 box들과의 confidence preditions과 곱한다

이를 통해서 class-specific confidence score를 각 박스마다 구할 수 있다. 이 스코어를 식으로 나타내면 다음과 같다

이 score는 bounding box에 특정 클래스 객체가 나타날 확률 예측된 bounding box가 그 클래스 객체에 얼마나 잘 들어맞는지(fits the object)를 나타냅니다

Pascal VOC 대회에서 YOLO를 평가를 했습니다. 이때 S=7, B=2로 하고 20개의 labelled classed를 주어서 C=20으로 설정이 되었을 때 최종 예측 tensor 차원이 7x7x30이였습니다.

[input 이미지를 7x7로 나누었을거고, 한 셀당 2개의 bounding box로 나누었다는 뜻입니다)

 

 

 

2.1 Network Design

우리는 이 모델이 CNN 기반으로 만들어진 모델이라고 말했습니다. 

이 CNN 앞단은 Convolution Layer로 구성이 되어 있으며 이어서 Fully Connected Layer로 구성이 되어있습니다.

Convolution Layer는 이미지로부터 특징을 추출해내는 것을, Fully Connected Layer는 클래스 확률과 bounding box 좌표를 예측합니다.

네트워크 architecture는 이미지 분류를 위한 GoogLeNet 모델에서 영감을 받았으며 24개의 Convolution layer와 2개의 Fully Connected layers로 구성이 되어있으며 GoogLeNet에서 inception(인셉션)을 사용하는거와 다르게, 우리는 1x1 reduction layer와 3x3 convolution layers를 사용하였습니다. (이는 Lin et al과 비슷하게 구성이 되어있습니다)

+) 우리는 더 빠른 객체 탐지를 위해서 Fast YOLO라는 neural network 아키텍쳐에서 24개의 convolution layer 대신 9개만을 써서 더 적은 필터 레이어를 가지고 탐지를 빠르게 하는 방식도 훈련하였습니다. size만 다르고 훈련이나 테스트 파라미터는 YOLO 나 Fast YOLO 모두 같습니다.

 

 

2.2 Training

1000개의 클래스를 갖는 ImageNet 데이터 셋으로 YOLO의 convolution layer을 pretrain(사전훈련)시켰습니다.사전훈련을 위해서 24개의 convolution layer 중 첫 20개만 사용하고, 이어서 fully connected layer을 연결했습니다.이 모델을 일주일을 연습을 시켰습니다. 사전 훈련된 모델은 ImageNet 2012 검증 데이터 셋에서 88% accuacy를 기록했습니다. YOLO 연구자들은 training과 interference을 위해서 Darknet Framework를 사용했습니다.

 

※ Darknet framework는 YOLO를 개발한 사람이 독자적으로 개발한 신경망 프레임워크입니다. neural network 학습하거나 실행할 수 있는 프레임워크로 YOLO도 Darknet에서 학습된 모델 중 하나입니다.

 

※ ImageNet은 classification (분류)를 위한 데이터 셋입니다.

 

사전 훈련된 모델을 object detection 모델로 바꾸어야 합니다.  사전훈련된 20개의 convolution lyaer 뒤에 4개의 convolution layer 및 2개의 fully connected layer를 추가해서 성능을 개선시켰습니다. 이때 layer의 weight(가중치)는 임의의 값으로 초기화를 하였습니다. 또한 객체 검출을 위해서 이미지 정보의 해상도가 높아야 하기때문에 입력 이미지 해상도를 224x224 -> 448 x 448로 높였습니다.

 

이 신경망의 최종 예측값 (아웃풋)은 class probabilites와 bounding box의 좌표입니다. bounding box의 위치 정보로는 앞서 말한거와 같이 상대 너비(width), 상대 높이(height), bounding box의 중심 좌표 (x,y)가 있으며 이 값 모두 0~1로 normalized 했습니다.

 

신경망의 마지막 layer에는 linear activation function을 적용하였고 나머지 모든 layer층마다 leaky ReLU 함수를 적용했습니다.

leaky ReLU

YOLO의 loss는 SSE(sum-squared error)를 사용합니다. (optimized 하기 쉽다 허나 mAP를 높이는거에는 완벽하게 일치x)

YOLO의 loss에는 bounding box의 위치를 얼마나 잘 예측했는지, loss인 localization loss와 클래스를 얼마나 잘 예측했는지에 대한 loss인 classification loss가 있습니다. 

여기서 이 두 loss의 weight를 동일하게 두고 학습하는것은 ideal 하지 않습니다. 하지만 SSE를 최적화 하는 방식은 이 두 loss의 가중치를 동일하게 취급을 합니다.

 

또 다른 문제는 이미지 내 그리드 셀에는 대부분 객체가 없습니다. 배경 영역이 전경 영역보다 더 크기 때문입니다. 만약 그리드 내에 객체가 없다면 confidence score = 0입니다. 따라서 대부분의 그리드 셀의 confidence score = 0으로 학습할 수 밖에 없어 불균형이 나옵니다.

 

이를 개선하기 위해서 객체가 존재하는 bounding box 좌표에 대한 loss 가중치를 증가시킵니다. 

또한 객체가 존재하지 않는 bounding box의 confidence loss에 대한 가중치는 감소시킵니다.

이에 따라 localization loss 가중치를 증가시키고 , 객체가 있는 그리드 셀의 confidence loss 가중치를 증가시킵니다.

 

SSE는 큰 bounding box보다 작은 bounding box에 동일한 가중치 loss를 계산하지만 실제로는 작은 bounding box에서 위치 변화에 되게 민감합니다. 큰 객체를 둘러싼 bounding box는 조금만 움직여도 상관없지만 작은 객체는 그렇지 않습니다.

이를 해결하기 위해서 너비와 높이에 square root를 취해줍니다. 이에 의해서 h,w가 커져도 증가율은 감소하기 때문에 loss에 대한 가중치를 감소할 수 있습니다.

 

YOLO는 하나의 그리드 셀 당 여러개의 bounding box를 예측합니다. training 단계에서 하나의 bounding box predictor가 하나의 객체에 대해 책임지고 예측해야합니다. (객체 하나 당 하나의 bounding box와 매칭)

따라서 여러개의 bounding box 중 하나만 선택해야 합니다. 이를 위해 예측된 여러 bounding box 중 실제 객체를 감싸는 ground-truth bounding box와의 IOU가 가장 큰 것을 선택합니다. (객체를 잘 감싼 box 선택을 한다는 뜻과 같습니다.)

이렇게 훈련된 bounding box predictor는 size, aspect ratios(종횡비), class of object를 잘 예측합니다.

 

traning 단계에서 사용하는 loss function은 다음과 같습니다.

1_i^obj : 그리드 셀 i 안에 객체가 존재하는지 여부를 의미 (값이 존재하면 1, 존재하지 않으면 0)

1_ij^obj : 그리드 셀 i의 j번째 bounding box predictor가 사용되는지의 여부

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

λ_noobj: 객체가 있는 box와 없는 box간의 균형을 위해서 balancing parameter

출처: curt-park.github.io/2017-03-26/yolo/

 

 

[분석] YOLO

Paper study of YOLO published in May 2016

curt-park.github.io

loss function의 식은 다음과 같은 뜻을 가집니다.

 

1) Object가 존재하는 그리드 셀 i 의 bounding box predictor j에 대해서 x,y의 loss 계산

2) Object가 존재하는 그리드 셀 i 의 bounding box predictor j에 대해서 w,h의 loss 계산

큰 box에 대해서는 작은 분산 (small deviation)을 반영하기 위해 제곱근을 취하고 SSE를 구합니다.

3) Object가 존재하는 그리드 셀 i 의 bounding box predictor j에 대해서, confidence score의 loss 계산 (Ci = 1)

4) Object가 존재하지 않는 그리드 셀 i 의 bounding box predictor j에 대해서, confidence score의 loss 계산 (Ci = 0)

5) Object가 존재하는 그리드 셀 i에 대해 conditional class probability의 loss를 계산 (클래스가 맞다면 p_i(c) = 1)

 

+) 훈련을 시킬 때 overfitting을 막기 위해서 dropout과 data augmentation을 적용하였습니다.

 

 

2.3 Inference

training 단계처럼 inference 단계에서도 테스트 이미지로부터 객체를 검출하는 데에는 하나의 신경망 계산만 하였습니다.

파스칼 VOC 데이터 셋에서 YOLO는 한 이미지당 98개의 bounding box를 예측하였으며, 그 bounding box마다 class probabilites를 구해줍니다. YOLO는 테스트 단계에서 굉장히 빠릅니다. (하나의 신경망만 필요)

 

하지만 하나의 객체를 여러 그리드 셀이 동시에 검출하는 경우가 있을 수 있습니다. 객체의 크기가 크거나 객체가 그리드 셀 경계에 맞딱드린다면 그 객체에 대한 bounding box가 여러 개 생길 수 있습니다.

즉, 하나의 그리드 셀이 아닌 여러 그리드 셀에서 해당 객체에 대한 bounding box를 예측할 수 있다는 뜻입니다.

=> 이를 multiple detections 문제라고 합니다.

이를 non-maximal suppression이라는 방법을 통해서 mAP를 2~3%증가시켰습니다.

 

 

 

 

2.4 Limitations of YOLO

YOLO는 하나의 그리드 셀마다 두 개의 bounding box를 예측합니다. 그리고 하나의 그리드 셀마다 하나의 객체만 검출합니다. 이는 spatial constraints(공간 제약) 문제가 발생합니다. [하나의 그리드 셀에 2개 이상의 객체가 붙으면 잘 검출을 못한다] 예를들어 새 떼와 같이 작은 물체가 몰려있으면 객체 검출이 제한적입니다. 여러 객체가 한 그리드 셀 안에 몰려있다면 검출을 못하는 것입니다.

 

그리고 YOLO 모델은 데이터로부터 bounding box를 예측하는 것으로 training 단계에서 학습하지 못했던 새로운 종횡비를 마주하면 힘들어합니다.

※aspect ratio : 종횡비라고도 불리며 가로세로 비율을 의미합니다.

 

마지막으로 YOLO모델은 큰 bounding box와 작은 bounding box와 같은 가중치를 둔다는 단점이 있습니다. 크기가 큰 bounding box는 위치가 약간 달라져도 비교적 성능에 별 영향이 없지만 크기가 작은 bounding box는 위치가 조금만 달라져도 성능에 영향이 큽니다. 따라서 작은 bounding box는 위치 변화에 따라 IOU 변화가 더 심해서 부정확한 localization error가 나타납니다.

 

 

3. Comparison to Other Detection Systems

DPM (Deformable parts models)

object detection 모델 중 하나인 DPM은 sliding window방식을 사용합니다. DPM은 하나로 연결된 파이프라인이 아니라 분리되어있습니다. 각각의 파이프라인이 feature extraction (특징 추출), region classification(위치 파악), bounding box prediction 등을 수행합니다.

반면에 YOLO는 이렇게 분리된 파이프라인들을 하나의 컨볼루션 신경망으로 대채를 하여 feature extraction, bounding box prediction, non-maximal suppression, and contextual reasoning 모두 한꺼번에 처리합니다.

따라서 YOLO는 DPM보다 더 빠르고 정확합니다.

 

R-CNN

이 detector는 region proposal 방식을 사용하여 객체를 검출합니다. Selective search라는 방식을 통해서 여러 bounding box를 생성하고 CNN으로 feature 추출 및 SVM으로 bounding box에 대한 점수를 측정합니다. 그리고 linear model로 bounding box를 조정 후, non-max suppression으로 중복된 검출을 제거합니다.

이렇게 복잡한 파이프라인을 단계별로 튜닝을 해야하므로 R-CNN은 느립니다. 테스트 단계에서 한 이미지를 처리하는데 약 40초가 걸린다고 합니다.

YOLO는 R-CNN과 비슷한 면이 있는데 각 그리드 셀이 bounding box를 예측한다는 것, 그 box에 대해서 점수를 계산한다는 것이 비슷합니다. 하지만 YOLO는 각 그리드 셀의 공간적 제약이라는 하나의 객체가 여러번 검출되는 경우가 R-CNN에 비해서 적습니다. 그리고 R-CNN에 비해 예측하는 bounding box의 개수도 훨씬 적습니다. 

한 이미지당 bounding box가 2000개인 R-CNN과 , 98개인 YOLO로 YOLO는 모든 절차를 단일 모델로 수행합니다.

 

 

4.Experiments

YOLO를 다른 실시간 객체 검출 모델과 비교를 해보겠습니다. YOLO와 Fst R-CNN의 성능의 차이를 비교하기 위해서 파스칼 VOC 2007 에서의 에러를 구해봤습니다. (Fast R-CNN은 이 논문이 나온 시점을 기준으로 성능이 가장 좋은 R-CNN 모델입니다)

 

4.1 Comparison to Other Real-Time Systems

현재 표는 각종 object detection model별 mAP와 속도(FPS)를 보여줍니다. FPS가 30이상은 되어야 real-time 검출로 사용할 수 있다고 합니다. FPS가 30이라면 1초에 30 프레임 영상처리인데 정확도는 Fast R-CNN과 Faster R-CNN VGG-16이 가장 높지만 이 모델들의 FPS는 너무 낮아 실시간 객체 검출 모델로 사용할 수는 없습니다. 반면 정확도도 적당히 높으면서 속도가 빠른 모델은 YOLO 계열이라는걸 볼 수 있습니다.

 

 

4.2 VOC 2007 Error Analysis

파스칼 VOC 2007 데이터 셋에 대해서 YOLO와 Fast R-CNN 성능을 비교했습니다. 이를 위해서 여러 에러측정 방법론을 사용을 했는데 다음 기준으로 객체 검출이 정확한지, 틀렸다면 어떤 에러타입인지를 구분했습니다.

  • Correct : correct class and IOU > .5
  • Localization : correct class, .1 < IOU <.5
  • Similar : class is imilar, IOU > .1
  • Other: class is wrong, IOU > .1
  • Background: IOU < .1 for any object

Fast R-CNN와 YOLO의 비교를 보면 알듯이 YOLO는 localization error가 상대적으로 큽니다. Fast R-CNN은 YOLO에 비해서 localization error가 작습니다. 반면 background error는 큰 것을 알 수 있습니다. (background error는 배경에 아무런 물체가 없지만 있다고 판단하는 false positive error입니다)

 

 

 

4.3 Combining Fast R-CNN and YOLO

YOLO는 Fast R-CNN보다 background error가 적은것으로 Fast R-CNN과 YOLO를 결합해서 background error를 줄인다면 높은 성능을 낼 수 있다고 생각했습니다. R-CNN이 예측한 bounding box에서 YOLO도 유사하게 예측하는지 체크를합니다. 만약 둘다 예측한 bounding box가 유사하다면 bounding box가 겹치는 부분을 잡으면 됩니다.

 

파스칼 VOC 2007데이터 셋에 대해서 성능이 가장 좋은 Fast R-CNN과 YOLO를 결합하면 mAP가 75%까지 올라갑니다.

Fast R-CNN과 다른 모델과 앙상블을 해봤지만 mAP향상은 미미했습니다.

이에 따라서 Fast R-CNN을 그냥 사용하는것보단 YOLO와 combined 해서 사용하는것이 더 효과적임을 알 수 있습니다.

 

속도 측면에서는 YOLO가 빠르고 정확도 측면에서는 Fast R-CNN과 YOLO가 결합한 모델이 가장 좋은걸 알 수 있습니다.

 

4.4 Generalizbility Person Detecton in Artwork

object detection 연구를 위해 사용하는 데이터 셋은 훈련 데이터 셋과 테스트 데이트 셋이 동일한 분포를 지닙니다. 하지만 실제 이미지 데이터는 훈련 데이터 셋과 테스트 데이터 셋의 분포가 다를 수 있습니다. 

YOLO에서 훈련 데이터 셋과 다른 분포를 지닌 테스트 데이터 셋 (훈련 데이터에서 보지 못한 새로운 데이터 셋)을 활용해서 테스트를 했습니다. 여기서는 피카소 데이터 셋과 일반 예술작품을 사용하였습니다.

훈련 단계에서는 실제 이미지로 학습했지만 테스트 단계에서는 예술 작품을 활용해 테스트를 했습니다.

 

표는 YOLO와 다른 detection model 성능을 측정했습니다. 파스칼 VOC 2007에서 학습한 YOLO, R-CNN,DPM등의 성능을 비교했습니다. R-CNN는 예술작품에 대해서는 낮은 정확도를 보이고 DPM은 AP가 크게 떨어지지는 않았습니다. 그렇지만 그렇게 높은 정확도를 보이진 않습니다. YOLO가 가장 높은 정확도를 보이고, 예술 작품에 대해서도 정확도가 크게 안떨어집니다.

 

5. Conclusion

지금까지 객체 검출을 위한 통합 모델인 YOLO에 대해 소개했습니다. YOLO는 단순하면서도 빠르고 정확합니다. 또한 YOLO는 훈련 단계에서 보지 못한 새로운 이미지에 대해서도 객체를 잘 검출합니다. 즉, 새로운 이미지에 대해서도 강건하여 애플리케이션에서도 충분히 활용할만한 가치가 있습니다.

 

 

논문 출처 : https://arxiv.org/pdf/1506.02640.pdf

LIST