본문 바로가기
Deep Learning (Computer Vision)/YOLO

YOLOv1 논문리뷰

by 187cm 2022. 7. 15.
반응형

처음 읽어보는 논문입니다. 또한 학부생이기 때문에 틀린부분이 있을 수 있습니다.

틀린 부분이 있다면 지적해주시면 감사하겠습니다.

 

어떤 부분은 번역이, 어떤부분은 의역이, 어떤 부분은 저의 생각이 들어가 있습니다. 양해 부탁드립니다.

 

 

YOLO는 You Look Only Once의 줄임말로 대표적인 Real-Time Object Detection을 가능하게 하는 새로운 접근 방법의 Object Detection 이다.

 

Object Detection이란 컴퓨터가 시각적 세계를 이해하고 학습하도록 하는 인공지능 분야인 Computer Vision의 한 분야로 Multiple objects Classification + Localization을 수행하는 것이 Object Detection이라 보면 된다.

 

 

시작에 앞서 Object Detection의 역사를 살펴보자

Tranditional Detection MethodDeep Learning Based Detection Method로 크게 나뉘는데 Deep Learning Based Detection Method의 경우 Two-stage DetectorsOne-stage Detectors로 나뉘는 것을 볼 수가 있다.

논문에서는 각각의 대표적인 모델로 DPM Detector RCNN 을 예시로 든다. (Fast/Faster RCNN) 도 간간히 등장한다. YOLO에 대해 설명하기 전 논문에서 주로 다루는 DPM Detector와 R-CNN을 한번 살펴보자

 

DPM Detetor

우선 DPM Detetor를 간단하게 살펴보자 DPM Detector의 경우 Tranditional Detection 방법인 Sliding window 방식을 통해 Object Detection을 수행한다. 또한 분리된 파이프라인을 통해 extract static features, classify regions, predict bonding boxs for high scoring regions 등 여러가지 작업을 수행한다.

Object Detection with Discriminatively Trained Part Based Models. Figure 4 Image

위의 그림을 보면 앞서서 말한 것 처럼 분리된 파이프라인이 매우 복잡하며,  Sliding window 방식을 사용하기 때문에 느리다. 정확도 부분에서도 다른 모델에 비하면 많이 떨어진다.

R-CNN

R-CNN은 Regions Based Convolutional Networks로 지역을 기반으로 한 CNN이라는 뜻이다. R-CNN은 전통적인 Sliding window 방식 대신 Region proposal 방식과 Selective Search 방식을 사용한다. R-CNN은 2000개의 잠재적인 바운딩 박스를 추출한 후 (PASCAL VOC dataset 기준) 후처리를 통해 박스를 재정의하고 , 중복을 제거하며, 박스에 대한 점수를 매긴다. 위와 같이 R-CNN은 Object Detection 과정이 크게 두가지로 나뉘기 때문에 Two-Stage Detector라고 불린다. (Region Propsals & Region Classification)

R-CNN은 위와 같이 크게 2단계로 분류되기 때문에 파이프라인이 복잡하며 느리다. 또한 각각의 요소가 분리되어 학습되기 때문에 최적화하기 어렵다. R-CNN의 경우 test time에서 이미지 당 40초의 시간이 걸리기 때문에 실시간탐지는 불가능에 가깝다고 할 수 있다.

Real-Time Object Detection 

실시간 물체 탐지를 위해서는 초당 30프레임, 30FPS 이상 나와야 한다고 저자는 말하고 있다.

실시간 물체 탐지가 모른다면 해당 영상을 한번 보는 것을 추천한다.

 

http:// https://www.youtube.com/watch?v=MPU2HistivI

YOLO (You Look Only Once - Unified Detection) 

YOLO의 첫 시작인 Abstract에서는 YOLO를 기존의 Object Detection 과는 다른 목적의 접근법이라고 소개를 한다. 위에서 소개한 방식들의 공통적인 단점인 실시간 탐지가 불가능하고 복잡한 파이프라인을 가지는 문제를 하나의 회기문제로 취급하여 Nerual Network를 통해서 처리를 했다는 것이다. 이 하나의 Neural Network는 Bounding Box 예측과 Class probabilites 모두 예측한다. 특히 Bounding Box 예측은 Box의 좌표를 예측하는 회기문제로 취급한다 (Class Probabilites는 동일)

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

위의 그림이 전체적인 YOLO의 구조이다. YOLO의 경우 하나의 Neural Network만 사용하였기 때문에 One-Stage Detector라고 한다. 

YOLO의 장점이라고 하자면 

1. 매우 간단하다.

2. 매우 빠르다

3. YOLO는 예측할 때 이미지 전체를 본다. -> Background Error가 적음

4. 물체의 일반적인 특징을 학습한다. -> 그림 이미지 예측에 대해 좋은 성능을 보인다.

 

Figure 1. YOLO의 장점 1, 매우 간단하다.

(1) 이미지의 크기를 448x448 크기로 늘린다 (더 세분화 된 정보를 얻기 위해)

(2) Single Network를 실행시킨다.

(3) 모델은 여러개의 Bounding Box 와 박스별 클래스의 확률을 동시에 예측.

 

Table 1 Real-Time System on PASCAL VOC on 2007, YOLO is Extremly Fast

YOLO는 Object Detection을 하나의 회기 문제로 취급하기 때문에 복잡한 파이프라인이 필요가 없음. 따라서 복잡한 파이프라인을 하나의 Neural Network로 처리하여 속도가 빠름.

 

실시간 탐지를 하기 위해서는 30FPS 이상 필요함. 우리의 YOLO는 초당 45FPS의 성능을 가지며 정확도 또한 63.4%, Fast YOLO는 정확도는 떨어지지만 155FPS까지 나옴. 하지만 실시간 탐지 모델의 경우와 비교했을 때 2배 이상의 mAP를 기록

 

YOLO를 VGG-16과 결합하였을 때 정확도는 높아졌으나 기존 YOLO에 비해 느려진 것을 알 수 있음. 다른 모델에 VGG-16을 결합하였을 때, 정확도는 상승하였으나 실시간 탐지로는 불가능 한 것을 볼 수 있음.

 

GPU :TITAN X

Train : PASCAL VOC 2007 or 2012

mAP (mean Average Precision)

 

Unfied Detection

YOLO는 이미지를 SxS 형태의 Grid로 쪼갠다. Input 이미지의 크기인 448x448을 7x7 크기까지 쪼갬. 각각의 Grid cell은 B개의 Bounding Box와 Confidence Score를 가진다. 여기서의 B=2를 나타낸다. 따라서 이 이미지에서 최대 생성되는 Bounding Box의 수는 98개가 된다. (7x7x2 이기 때문) . 2000개의 지역을 제안하는 R-CNN과 비교하면 매우 적은 수의 Bounding Box 예측이다. Confidnece Score는 Pr(Object) * IOU(truth pred) 로 박스가 물체를 포함하는지를 나타내는

(0 or 1) Pr(Object) 와 얼마나 박스를 정확하게 예측했는지 나타내는 IOU(truth pred) 를 곱해 표기할 수 있다.

 

IOU : Intersection over Union (실제 예측과 정답값의 겹치는 부분)

다시 정리를 하지면 이미지를 SxS Grid로 나누고 각각의 Grid Cell은 B개의 Bounding Box와 Confidence Score를 가진다. 각 Bounding Box는 다시 5개의 정보를 가지는데 그것이 바로 (x, y, w, h, confidence) 이다. x,y는 박스의 중심좌표를 나타내며, w,h는 박스의 가로 세로 길이를 말한다. x,y는 grid cell 위치에 따른 0~1 사이의 값으로, w,h는 전체 이미지의 길이에 따른 0 ~ 1 사이의 값으로 Normalize 된다. 마지막 Confidence 값은 IOU값 이다.

각각의 Grid Cell은 B개의 Bounding Box와 Confidence score 외의 C라는 조건부 확률을 가지고 있다. Pr(Class_i | Object)으로 표기하며, 각각의 그리드 셀에 대한 클래스의 확률을 나타낸다. 

 

따라서 위의 내용을 정리하면 다음과 같은 수식이 된다. 위의 스코어는 모델이 Box의 Score를 얼마나 잘 예측했는지, 박스가 얼마나 물체랑 가깝게 학습이 되었는지를 의미한다.

 

위의 Figure2를 보면 Bounding boxes + Confidencce 와 Class Probability map 2개로 나뉘는 것을 볼 수 있다.

또한 PASCAL VOC의 클래스 수는 20개 이기 때문에 20개 클래스에 대한 조건부 확률을 구해야 하므로 C는 20이 된다.

공식에 의하면 SxSx(B*5 + C) 의 형태의 output이 나오게 되는데 S=7, B=2 이므로 7x7x30이 나오며 이는 FIgure 3의 Output 차원과 동일하다.

2.1 Network Design

 

네트워크의 구조는GoogLeNet에서 영감을 받아 24층의 Convolutional Layer와 2개의 Fully connected Layer로 이루어져 있습니다. 초기의 Convolutional layer는 FC layer가 확률과 좌표를 예측할 때 네트워크에서 특징을 추출합니다. GoogLeNet의 인셉션 모듈 대신 1x1 차원축소와 3x3 크기의 Convolutional layer를 사용하여 인셉션을 대체합니다. Fast YOLO는 24개의 Convolutional layer 대신 9개의 Convolutional Layer를 사용합니다.

 

2.2 Training

우선 1000개의 클래스를 가지는 ImageNet 데이터를 통해 초기 20개의 Convolutional layer에 대해 pretrain을 진행한다. (224x224의 이미지) 그 다음  4개의 Convolutional Layer와 FC layer를 결합 후 PASCAL VOC 데이터를 통해 다시 또 학습을 진행합니다. (448x448) 

우리의 마지막 Layer는 Class 확률과 bounding box의 좌표를 예측한다. 이 때 Bounding box의 width와 height는 이미지의 width, height에 맞게 0~1 사이로 변환 후 반환되며.  좌표는 grid cell의 위치에 따라 0 ~ 1 사이의 값으로 변환된다.

 

- Optimizer 

 - Linear Activation Function

leaky rectified lienar activation이라 불리는 leaky-ReLU사용

- Sum Squared Error

YOLO는 Loss Function으로 Sum Squared Error를 사용한다. 이 Sum Squared Error의 경우 최적화 하기가 쉽지만 우리의 목표인 정확도를 최대로 끌어올리는 것과는 일치하지 않다. 특히 Weight localization Error와 Classification Error를 동일하게 취급하기 때문에 이상적이지 않다. 또한 많은 셀은 물체를 포함하지 않기 (주로 배경이기) 때문에 Grid cell의 Confidence Score가 0으로 수렴한다. 반대로 일부의 셀을 물체를 포함하기 때문에 Gradient가 발산하는 경우도 있다. 이는 모델의 불안정성으로 이어지며, 모델의 학습이 빠르게 발산하는 원인이 된다.

위의 문제를 방지하기 위해 bouding box에 대한 Loss는 늘리고 (coord = 5), 물체를 포함하지 않는 grid cell의 confidence score의 Loss는 줄이는(noojb = 0.5) 방법을 도입했다.

Sum Squared Error는 큰 박스와 작은 박스에 대해 동일한 Weight 에러를 반영한다. 하지만 우리의 metric은 큰 박스가 아닌 작은 박스에 대해 더 큰 Error를 반영해야 하므로 width와 height에 대해 Square root를 씌워서 예측합니다.

바운딩 박스의 width height와 좌표값인 x,y에 대해서는 coord를 곱해주어 Weight localization Error의 가중치를 더 두었다는 것을 알 수 있으며, Class probabilites의 경우 물체가 있는 경우와 없는 경우를 구분하여 물체가 없을 경우의 Loss를 줄여주었다. (이미지에서 배경 부분이 물체가 있는 부분보다 비중을 더 많이 차지하기 때문)

 

첫번째 줄은 Weight Localization 중 x,y 중심좌표의 Loss를 구하는 부분. (coord를 곱해 가중치를 더 줌)

두번째 줄은 Weight Localization 중 width, height의 Loss를 구하는 부분. 작은 박스의 가중치를 더 주기 위해 Squared Root를 씌웠으며, coord를 곱해 Weight Localization의 가중치를 높였다.

세번째 줄은 물체가 있을 경우의 Class probabilites Error

네번째 줄은 물체가 없을 경우의  Class probabilites Error이다. 일반적으로 물체가 없는 경우가 더 많기 때문에 noobj를 곱해준다.

마지막 줄은 클래스 별 확률인 조건부 확률에 대한 Error를 계산하는 부분이다.

 

학습 데이터는 위에서 간단하게 설명한 것처럼 pretrain (20개의 Convolution Layer - ImageNet) , train (24 Conv layer + 2 FC layer - PASCAL VOC) 로 나누어서 학습한다. 학습 epochs는 135회인데 0 epoch 부터 75 epoch까지는 Learning Rate를 0.01 부터 0.1까지 서서히 높여가다가 75 epoch 부터 105 epoch까지는 다시 learning rate를 0.01로 조절하여 학습한다. 마지막 30 epoch는 0.001로 학습을 진행한다. Batch size는 64, momentum = 0.9, weight decay = 0.0005를 사용했다.

 과대적합을 방지하기 위해 dropout(0.5) 와 광범위한 Image Augmentation을 사용하였다. Image Augmentation으로는 최대 20프로 까지 적용하였는데, Random Scaling, translations, HSV 컬러 공간 변화를 사용하였으며, HSV의 경우는 원본 이미지의 1.5배를 적용하였다. 

2.3 Inference

학습과 마찬가지로, Test time에서도 하나의 네트워크로 평가를 진행한다. YOLO가 test time에서 매우 빠른 이유는 test time에서 다른 네트워크와 다르게 하나의 네트워크를 사용하기 때문이다. Test Image Detection 단계에서는 PASCAL VOC 데이터를 통해 예측을 진행하였는데, YOLO 모델의 마지막 Layer는 7x7x30 형태의 Tensor를 반환한다. 즉 이미지를 49개의 Grid Cell로 분할하며, 하나의 Cell은 (B==2) 개의 Bounding Box를 만들어 내므로 이미지당 98개의 잠재적인 바운딩 박스와 박스 별 클래스의 확률을 만들어 낸다. (잠재적인 바운딩 박스 2000개를 예측하는 R-CNN과 비교하였을 때 엄청난 수치의 차이이다.) 

YOLO의 grid design에서 단점이 있다면, 큰 물체의 경우 하나의 물체를 여러 Grid cell에서 검출이 가능하므로 하나의 물체에 대해 여러개의 Bounding Box가 생길 수 있다는 점입니다. YOLO는 Non-maximal suppression을 통해 하나의 물체에 대해 여러개의 바운딩 박스가 생기는 것을 방지합니다. R-CNN, DPM 방식과 다르게 YOLO는 Non-maximal suppression을 통해 2~3% 의 성능 향상을 가져다 주었습니다.

 

- Non-maximal suppression이란?

YOLO에서 중복된 Bounding Box를 제거하기 위해 사용하는 방법이다.

1. Confidence Score값이 Threshold보다 작으면 제거한다.

2. 바운딩 박스를 Confidence Score 순서로 정렬한다.

3. Confidence Score 값이 가장 높은 값 하나를 고른다.

4. 다른 박스들과(Confidence Score가 더 낮은 박스) IOU가 0.5 이상이면(Threshold로 조절가능) 박스를 제거한다.

5. 이 과정을 반복한다.

 

 

2.4 Limitations of YOLO

1. YOLO는 강력한 공간적 제약 때문에 하나의 Grid cell은 2개의 바운딩 박스 예측이 가능하지만 오직 하나의 Class 예측만 가능합니다. 따라서 YOLO는 작은 물체가 그룹지어 나타나는 양 떼, 새 떼 와 같은 작고 몰려있는 물체에 대해 예측이 어렵습니다.

2. YOLO는 data에 대한 bounding box를 학습하기 때문에 새로운 종횡비나, 배열에 대해 예측하는데 어려움을 겪습니다.

3. YOLO는 학습시 큰 박스와 작은 박스에 대해 Error를 똑같이 취급합니다. 큰 박스에 대한 작은 에러와 비교하였을 때 작은 박스에 대한 작은 에러가 더 큰 영향을 미치기 때문에 우리는 incorrect localizatios라고 부릅니다.

 

3. Comparison to Other Detection Systems

- Defromable parts models

1. Sliding window 방식 사용. (CNN)

2. 분리된 파이프라인 (위의 이미지 참조) 을 통한 특징 추출, 지역 분류, 박스 예측 수행.

->  YOLO는 통합된 Single Network 사용하므로 위의 2번을 하나의 Neural Network가 수행 -> 빠름.!

 

- R-CNN

1. Sliding Window 방식 대신 Region Proposal 방식 사용.

2. Selective Search 방식을 통해 잠재적인 바운딩박스를 생성 (2000개) 후, Convolutional Network를 통해 특징을 추출하고, SVM Score를 매긴다음, non-maximal suppression을 통해 중복된 박스를 제거합니다.

=> 각각의 시스템이 매우 느림.  Test time에서 이미지 당 40초가 소요됨.

 

R-CNN과 YOLO의 공통점과 차이점

공통점 :  각각의 Grid cell은 잠재적인 Bounding box를 찾고, Convolutional 특징을 이용해 점수를 매김.

차이점 :  YOLO는 강한 공간적 제약을 두어 같은 물체에 중복된 Bounding Box 예측을 막음 (non-maximal Suppression).                       또한 YOLO는 Test Time에서 98개의 잠재적인 bounding box를 예측하지만 R-CNN은 2000개를 예측함. 

                  마지막으로 우리의 YOLO는 one-stage Detector이다. 즉 하나의 통합된 모델을 사용함.

- Other Fast Detectors

Fast and Faster R-CNN : 연산을 나누고, 지역제안 방식과 Selective Search 대신 Neural Network사용.

(Fast R-CNN에서는 Selective Search 사용하는 것으로 알고있는데.. 어쨌든) R-CNN과 비교하였을 때 정확도는 올라갔으나 탐지속도는 여전히 느리기 때문에 Real-time Object Detection으로는 부적합

Speeding up DPM : HOG 연산을 사용하여 속도가 빨라짐. 하지만 뒤에 나오는 자료를 보면 정확도가 매우 낮은 것을 볼 수 있음.

 

4. Experiments

사용 GPU : TITAN X

예측 데이터 : PASCAL VOC 2007 + 2012

 

다른 Real-Time Detector와 YOLO를 비교해 보았을 때 우리의 YOLO가 mAP(mean Average Precision) 이 2배 이상 더 높다. 30Hz 혹은 100Hz DPM과 YOLO를 비교해 본 그림은 위를 참조하면 된다. 또한 YOLO와 VGG-16을 결합하였을 때 정확도는 3%정도 증가하였으나 속도는 상당히 느려진 것을 볼 수 있다. 하지만 그래도 Less Than Real-Time 모델들과 비교하였을 때 더 빠른 것을 알 수 있다. Fastest DPM의 경우 speeds up DPM보다 더 높은 mAP를 기록하였지만 여전히 실시간 성능으로는 부족합니다.

 

R-CNN-R 은 지역 제안 대신 Selective Search 방법을 사용하여 기존의 R-CNN보다 빠릅니다. 하지만 그래도 실시간 탐지로는 부족합니다. Fast R-CNN의 경우 박스를 제안하는데 이미지당 2초가 걸리는 Selective Search에 의존하기 때문에 높은 mAP를 보여주더라도 0.5 FPS로 매우 낮은 실시간 탐지 성능을 보여줍니다.

 

Faster R-CNN은 Selective Search 대신 Neural network를 사용하여 Bounding Box를 제안함. VGG-16 버전의 Faster R-CNN의 경우 YOLO와 비교하였을 때 mAP가 10정도 높아졌지만, 속도는 더 느려졌습니다.

- VOC 2007 Error Analysis

 

- Correct : 물체를 맞추고 , IOU값도 0.5 보다 큼

- Localization : 물체는 맞췄으나 IOU값이 0.1 부터 0.5사이

- Similar : 클래스가 유사함, IOU값도 0.1 이상

- Other : 클래스가 틀리고 IOU값은 0.1 이상

- Background Error : IOU값이 0.1 이하.

 

주목해야할 점 : YOLO의 Background Error가 Fast R-CNN과 비교했을 때 3배나 적음. 하지만 물체를 정확하게 예측하는 Localization Error는 YOLO가 더 많음.

- Combining Fast R-CNN and YOLO

YOLO는 Fast R-CNN에 비해 Background Error가 더 낮기 때문에 YOLO를 사용하여 Background 탐지를 없애 성능 향상을 가져올 수 있을거라 예측함. 따라서 Fast R-CNN이 예측하는 바운딩 박스에 YOLO도 비슷하게 예측하는지 확인한다. 두 박스가 겹치는 부분을 Bounding Box로 예측한다. Fast R-CNN과 YOLO를 결합하였을 때 최대 정확도가 3.2% 더 높아진 것을 알 수 있다. 

YOLO와 Fast R-CNN의 결합은 단순한 앙상블이 아닙니다. YOLO는 Test time에서 다른 종류의 Error를 만들기 때문에 Fast R-CNN의 성능이 향상됩니다.

하지만 이러한 결합은 두 모델이 각각 예측한 후 겹치는 바운딩 박스를 예측하는 것이기 때문에 YOLO에게 속도로 이익이 되지 않습니다. 하지만 YOLO는 매우 빠르기 때문에 앙상블 모델과 Fast R-CNN의 연산시간과 비교하였을 때 중요한 연산 차이는 없습니다.

4.4 VOC 2012 Result

YOLO는 최신 모델들에 비해 mAP가 많이 떨어짐. 하지만 Fast R-CNN과 YOLO를 결합한 모델은 높은 성능을 보임.

YOLO는 bottle, sheep, tv/monitor와 같은 물체들에 대해 R-CNN에 비해 낮은 성능을 보임. 하지만 Cat/train과 같은 물체들에 비해서는 더 좋은 성능을 보임. 

4.5 Generalizability : Person Detection in Artwork

PASCAL VOC 데이터 셋으로 학습을 한 후 Picasso Dataset, VOC2007 Dataset, People-Art Datasett을 통해 성능을 확인하였을 때 YOLO의 경우 크게 정확도가 떨어지지 않는 모습을 보였다. 다만 R-CNN의 경우 VOC 2007 데이터 셋과 Picasso 데이터 셋의 정확도 차이가 크게 나는 것을 보여주고 있다.

DPM의 경우 Picaaso와 People-Art에 대해 성능이 어느정도 유지 되는 것을 볼 수 있다. 그 이유는 물체의 shape과 Layout에 강력한 공간 모델을 이론적으로 가지고 있기 때문이다.

 

위의 Figure5 그래프는 YOLO가 얼마나 일반화 가능성이 높은지를 보여주고 있다.

5. Real-Time Detection in Wild

YOLO는 컴퓨터 비전 분야의 이상적인 빠르고, 정확한 물체 탐지기이다. YOLO를 웹 캠에 연결하여 확인했을 때 이미지를 불러옴과 동시에 바로 결과를 예측하는 것을 볼 수 있다. (이미지 트래킹과 같이 실시간으로 이동하는 물체 예측가능)

위의 Figure 6는 YOLO의 실시간 예측과 일반화 가능성이 높다는 것을 보여주고 있다.

 

6. Conclusion

1. 실시간 탐지를 가능하게 하는 모델 (One-Stage Detector이기 때문)

2. YOLO는 Loss Function을 학습시켜서 실시간 탐지 성능을 가능하게 했다.

3. 새로운 도메인에 일반화를 잘 해주므로 빠르고 거친 물체 탐지 어플리케이션에 적합 

 

7.  내 의견

1.  왜 마지막에 fc layer를 추가하였을까..? -> 이전에 얻은 위치 정보가 다 날아감.

2. pre-train과 fine-tuning의 이미지 사이즈를 왜 다르게 하였을까.

반응형