[논문읽기] Yolo v1

임종우·2023년 3월 22일
0

두 번째로 살펴본 논문은 1-stage detector의 대표적인 model인 YOLO 이다.
가장 첫 모델인 Yolo v1부터 살펴보는 것이 맞을 것 같아서 이 논문을 읽어보게 되었다.
지난번에 한번 읽어보았으니,,, 지난번보단 빨리 읽을 수 있겠지?
파이팅해보자~!

영어가 안되가지고 해석이 너무 힘들었다...
오늘은 블로그에 정리되어 있는 논문 리뷰 글을 읽은 후 논문을 읽어보았다.
참고한 블로그
그랬더니 그나마 좀 읽힌다...
파이팅!


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

Abstract

  • 이전 object detection 기술들은 detection을 수행하기 위해 classifier를 여러번 사용하였다.
  • YOLO는, object detection을 공간적으로 나눠진 bounding box들과 관련된 class 확률들의 regression problem으로 처리한다.
  • 하나의 network가 bounding box와 class 확률을 전체 이미지에서 한번에 예측한다.
  • 전체 detection과정이 하나의 네트워크 안에서 일어나는 end-to-end 모델로써 최적화에 좋다.
  • 속도 역시 YOLO는 1초에 45frame을, Fast YOLO는 1초에 155 frames를 처리할 수 있을 정도로 빠르다.
  • SOTA 모델들보다 localization error는 더 많이 발생하지만, background의 false positive는 줄어들었다.
  • 또한, natural image 뿐 아니라 artwork 같은 다른 도메인에서도 우수한 성능을 보인다.

1. Introduction

  • 한번에 보고 인지하는 사람의 시각 시스템이 빠르고 정확하기 때문에 사람은 다양한 일을 할 수 있다. 만약 컴퓨터가 그렇다면? 아주 다양한 가능성이 열릴것이다.
  • 현재의 object detection system : 물체를 인식하기 위해서, 시스템은 classifier를 가지고 이미지의 여러 부분을 평가해야만 한다.
  • DPM과 같은 모델은 sliding window 방식을 사용하여 심지어 빈 공간에조차 classifier를 작동시켜야 한다.
  • 더 최근의 방식인 R-CNN은 먼저 물체가 있을 것으로 예상되는 region proposal을 만들어 낸 후, 이 proposal 들에만 classifier를 작동시킨다. classification 후에, bounding box를 더 잘 예측하기 위한, 중복된 detection을 제거하기 위한 후처리도 필요하다.
  • 이러한 과정은 너무 복잡하여 느리고, 각각의 학습 과정이 개별적으로 일어나기 때문에 최적화하기에도 힘들다.
  • 따라서 이 논문에서는, object detection을 single regression problem 으로 단순화한다.
  • image pixel에서 bounding box 좌표와 class 확률을 직접 regression 한다.
  • 이러한 방식으로, 어떤 물체가 어디에 존재하는지 detection 하기 위해서 이미지를 '한번만 본다.'

  • YOLO는 아주 단순하다. 위의 figure를 보면, 하나의 convolutional network가 동시에 여러 bounding box와 그 box들의 class probabilites를 예측하고 있다.
  • YOLO는 전체 이미지에 대해서 학습을 진행하고, detection performance를 토대로 즉각적인 최적화를 시행한다. 이 unified 된 모델은 object detection 의 기존 모델에 비해 여러 장점을 가지고 있다.
  • 먼저, 아주 빠르다. object detection 과정을 regression problem 으로 여기기 때문에, 마지막에 classifier를 사용해야 하는, 그러한 류의 복잡한 과정이 존재하지 않는다. 그냥 단순히 네트워크 하나를 작동시키면 될 뿐이다. YOLO는 실험에서 초당 45 frame 의 이미지를 처리하였고, Fast YOLO는 150프레임까지 처리하기도 하였다. 이것은 우리가 video와 같은 real-time 이미지를 거의 지연 없이 처리할 수 있음을 의미한다.
  • 다음으로, YOLO는 이미지 전체를 통해 예측을 진행한다. sliding window나 region proposal 같은 방법과 달리, YOLO는 학습이 진행되는 동안 image 전체를 다루고 있다. 따라서 이미지 전체에 대한 문맥적인 정보를 즉각적으로 반영할 수 있다. Fast R-CNN은 이러지 못하므로 background를 object로 잘못 인식하는 경우가 많은데, YOLO는 과정동안 이미지 전체를 다룸으로 이러한 문제를 해결한다.
  • 세번째로, YOLO는 물체의 일반적인 표현을 잘 학습한다. natural image 를 통해 학습하여 artwork 에서 test를 진행했을 때, YOLO는 DPM과 R-CNN 같은 방법들보다 더 좋은 성능을 내었다. 따라서 새로운 도메인이나 예측하지 못한 input에 더 잘 대응할 수 있다.
  • 그러나 YOLO는 SOTA에 비해 accuracy가 떨어진다. 빠르게 물체를 인식하는 동안 정확히 물체의 위치를 파악하는데, 특히 작은 물체에 대해 어려움을 겪는다.

2.Unified Detection

  • 이전까지 여러 단계로 나누어져 있던 object detection의 요소들을 하나의 neural network로 unify 하였다.
  • entire image로부터 추출된 feature를 사용하여 bounding box를 예측한다. 또한 모든 bounding box에 대해 모든 class에 대한 확률을 동시에 계산한다.
  • 즉, network가 이미지 전체와 이미지 내의 모든 물체들에 대해 근거를 두고 있음을 의미한다.
  • 이로 인해 YOLO는 end-to-end 방식의 학습과 높은 정확도를 겸비한 real time speed를 가능하게 하였다.

그렇다면 YOLO의 동작 과정에 대해서 살펴보자.

  • YOLO는 input image를 S×SS \times S 의 grid로 나눈다. 어떤 물체의 중심이 어떤 grid cell 안에 있으면, 그 grid cell이 그 물체를 감지하는데 책임이 있다.

  • 각각의 grid cell에선 B개의 bounding box와 그 box들에 대한 confidence score를 예측한다. 이 confidence score는 bbox에 물체가 있고 어떤 물체인지가 얼마나 정확한지에 대한 신뢰도를 나타낸다. 각각의 bbox는 x,y,w,h,confidence의 5개 정보로 구성된다. confidence는 결국 예측된 box와 ground truth box 사이의 IOU * 클래스로 분류될 확률을 의미한다.

  • 또한 각각의 grid cell에서는 또한 C개의 conditional class probabilities를 예측한다. 이 확률들은 grid cell이 물체를 포함하고 있다는 가정하의 조건부 확률이며, 각 grid cell에서의 bbox의 수와 상관 없이 1세트의 class probabilites만 예측한다.

  • test 과정에서는 conditional class probabilities와 indeividual box confidence predictions를 곱한다. 이는 각각의 bbox별로 class specific confidence를 제공한다. 해당 점수는 box안에 나타난 물체의 class에 대한 확률과 bbox가 얼마나 물체에 잘 맞게 형성되었는지에 대한 정보를 가지고 있다.

  • 이러한 과정을 거쳐서 나온 output은 tensor 형태를 띠는데, S×S×(B5+C)S \times S \times (B *5 + C) size의 tensor가 된다.
  • B * 5 의 의미? 각 bbox가 5개의 정보를 담고있다.

2.1. Network Design

그럼 이제 Yolo의 Network Design에 대해서 살펴보자.

  • 첫번째 convolutional layer는 image에서 feature를 추출하고, Fc가 output probabilities와 coordinates를 계산한다.
  • 네트워크 구조는 GoogLeNet model의 구조를 사용하였다. 24개의 convolutional layer와 2개의 Fc layer가 있다. GoogLeNet에서는 inception modules를 사용하였지만, 여기서는 간단한 3X3 convolutional layer 뒤에 1X1의 reduction layer를 사용함으로써 계산을 줄였다.

2.2 Training

  • 먼저 20개의 Convolution layer를 ImageNet data에 대해 pretrain 하였다. 그 후 detection을 수행하기 위해 4개의 convolutional network와 2개의 fully connected network를 추가하였다. 또한, 좋은 해상도의 이미지에 대해 detection이 더 잘 작동하므로 input size를 224 x 224에서, 448 x 448로 바꾸었다.
  • 마지막 layer가 bbox의 좌표와 class probabilites를 모두 예측하는데, bbox의 너비와 높이, 중심점의 좌표는 0~1의 값을 가지도록 normalize하였다.
  • activation function으로는 leaky relu 함수를 사용하였다. 함수는 다음과 같다.
  • 모델을 평가하기 위한 loss로는 SSE(Sum Squared Error)를 사용하였다. 이는 optimize 하기 쉽기 때문이다. 다만, 이를 최적화하는 것이 mAP를 높이는 것을 보장하지는 않는다. SSE의 경우 localization error를 classficiation error와 동일하게 가중치를 두는데, 이는 이상적이지 않다. 또한, 이미지에서 상당수의 grid cell들은 object를 가지고 있지 않은 background이다. 이러한 cell들의 confidence score를 모두 0로 만드는 것은 object를 포함하고 있는 cell들에 비해 너무 많은 가중치를 부여하게 된다. 이는 모델의 불균형으로 인한 불안정성을 유발할 수 있다.
  • 이를 해결하기 위해서, bbox 좌표 예측에 대한 loss는 큰 가중치를 부여하고(bbox 좌표가 있다는 것은 일단 물체가 존재한다는 뜻. 이 loss에 가중치를 부여한다면 background가 너무 많아 생기는 데이터 불균형 문제에 대한 해결책이 될 수 있는 것 같다), 물체를 가지고 있지 않은 box의 confidence loss에 대해서는 작은 가중치를 부여한다. 이를 위해 λcoord=5\lambda_{coord} = 5λnoobj=0.5\lambda_{noobj} = 0.5를 사용한다.
  • SSE가 가지는 또 다른 문제는 large box와 small box의 loss에 같은 가중치를 부여한다는 것이다. error metric은 large box에서의 작은 편차를 small box에서보다 덜 중요하게 여겨야 한다고 한다. 왜? 당연히 클수록 조금만 움직여도 움직인 절대적 크기는 커질거니까. 같은 거리를 움직였어도 큰 박스가 움직인 것과 작은 박스가 움직인것의 중요도는 다를 수 밖에 없다. 따라서 이를 해결하기 위해 bbox의 width와 height에 root를 취해준다.
  • YOLO는 grid cell 하나마다 여러개의 bbox를 예측한다. 학습을 시킬때에는 하나의 bbox가 각각의 물체에 책임이 있기를 원한다. ground truth와 IOU가 가장 높은 값을 가지는 bbox에 대해 한 물체에 책임을 지게 한다. 이것은 bbox 사이의 구분(specialization)을 이끌어낸다. 각각의 bbox는 특정 사이즈, 비율, 클래스 예측을 더 잘 해내게 된다.
  • 학습을 시키는 동안 다음과 같은 loss function을 사용한다.
  • 식을 보면, classification error의 경우 해당 grid cell안에 물체가 존재할때만 penalize 하고 있다.
    마찬가지로, bbox의 좌표에 대해서는 해당 bbox가 ground truth box에 responsible 할 때, 즉 IOU가 가장 높아 해당 물체의 예측을 담당할때에만 penalize 하도록 하고 있다.

    식의 의미를 조금 더 살펴보자.

    먼저 첫번째와 두번째 line은 localization loss계산을 담당하는 부분이다. 해당 부분에서는 해당 물체를 예측하는 bbox predictor의 coordinate에 대한 loss를 계산한다. 앞에서 언급한바와 같이 λcoord\lambda_{coord}를 통해서 큰 가중치를 두어 loss를 계산하는 모습을 살펴볼 수 있으며, width 와 height는 root를 씌워서 scaling 한 모습을 확인할 수 있다.

    세번째와 네번째 line은 confidence loss를 담당하는 부분인데, 물체가 존재하는 bbox predictor에 대해서는 그냥 SSE를 더해주고, 물체가 존재하지 않는 bbox에 대해서는 λnoobj\lambda_{noobj}를 곱하여 더해줌으로써 적은 가중치만 두는 모습을 확인할 수 있다.

    마지막으로 다섯번째 줄은 물체가 존재하는 bbox에 대해서 class probabilites의 loss를 계산해주는 term이라고 볼 수 있을 것이다.

    움 약간 의문이라면, 3와 4 line의 confidence loss를 계산하는 부분과 5 line의 class probabilites loss를 계산하는 부분이 약간 겹치는거 아닌가? 다르다. 마지막은 classfication 자체의 loss를 계산한다고 볼 수 있다. 분류기의 (yolo에서는 회귀로 동작하지만) 성능을 높이기 위한 loss인 것이다.

  • training 과정에서 PASCAL VOC 2007, 2012 data에 대해 135 epoch의 학습을 진행하였고, batch size 는 64, momentum은 0.9, weight decay는 0.0005를 적용하였다.
  • lr scheduler의 경우 첫번째 epoch에서는 lr을 0.001에서 0.01까지 천천히 상승시켰다. 높은 lr로 학습을 시작하면 unstable gradient로 인해 모델이 자주 diverge(기울기 폭발)하는 모습을 보였다. 이후 0.01의 lr로 75 epochs동안 학습을 진행하였고, 0.001의 lr로 이어서 30 epoch, 마지막으로 0.0001의 lr로 30 epoch의 학습을 진행하였다.
  • overfitting을 방지하기 위해서 dropout을 사용하였고, data augmentation도 사용하였다. 첫번째 connected layer뒤에 나오는 0.5의 dropout layer는 layer들 사이의 중복 적용을 방지한다. 데이터 증강의 경우 random scaling 과 translation을 적용하였다.

2.3 Inference

  • 학습에서와 마찬가지로, YOLO는 test image에서의 object detection 역시 하나의 network만 사용한다.
  • pascal voc dataset에서 네트워크는 이미지 별로 98개(7X7X2)의 bbox와 각 box별 class probabilities를 계산한다.
  • grid design 은 bbox prediction에 공간 다양성을 적용한다. 특수한 경우에는 물체 하나가 특정 grid cell 하나에 딱 들어가고, network가 그 물체에 대해 하나의 box만 예측하기도 하지만, 큰 물체 혹은 grid의 경계 근처에 있는 물체의 경우, 여러 cell 들에 의해 localize 된다. 이러한 multiple detection을 제거하기 위해서는 Non Maximal Suppresion을 사용한다.

2.4 Limitations of YOLO

  • YOLO는 각 grid cell이 2개의 bbox만 예측하고, 하나의 class 만 가질 수 있게 함으로써 강력한 공간적 제약을 부과한다. 이런 공간적 제약은 모델이 예측할 수 있는 가까이 존재하는 물체들의 수를 제한한다. 따라서 YOLO 모델은 뭉쳐있는 작은 물체들의 group을 detection 하는데에 제한사항을 가진다.
  • 또한 YOLO는 새로운 종횡비나 특별한 외형을 가지는 물체에 대해 일반화하는데에 어려움을 겪으며, 여러 downsampling layer를 거친 후에 예측을 진행하기 때문에 조잡한 feature를 사용한다는 단점도 있다.
  • 그리고, loss function에서 small bounding box와 larege bounding box간의 loss를 동일하게 취급한다는 문제가 있다. 큰 박스의 작은 에러는 일반적으로 괜찮지만 작은 박스의 작은 에러는 IOU에 엄청난 영향을 줄 수 있다. YOLO의 대부분의 error는 incorrect localization에서 온다.

3. Comparison to Other Detection Systems

DPM(Deformable parts models)

  • DPM은 object detecion을 위해 sliding window 기법을 사용한다. feature를 추출하고, 각 region을 분류하고, bbox를 예측하기 위해 연결되지 않은 pipeline을 사용한다. YOLO는 이러한 pipeline을 하나의 single convolutional neural network로 변경하였고, 그 network 하나가 feature extraction, bbox prediction, nms 등을 모두 진행한다. 따라서, DPM은 static feature를 사용하는 반면, YOLO는 feature를 detection task에 맞게 최적화시킬 수 있다. DPM에 비해 YOLO가 더 빠르고 더 정확하다.

R-CNN

  • R-CNN은 sliding window가 아닌 region proposals를 사용한다. selective search 방법이 region proposal을 찾기 위해 사용되고, CNN이 feature를 추출하며, SVM이 classification 의 score를 정하고, linear model로 bbox의 위치를 조정한다. 그리고 nms를 사용하여 중복되는 detection을 제거한다. 과정 자체가 복잡하여 매우 느리며, end - to - end가 아니어서 각각의 과정을 tuning 시켜야한다.
  • YOLO와 R-CNN 사이에 공통점도 존재한다. 각각의 grid cell이 bbox를 제안하고 이 box들을 convolutional feature를 통해 점수를 매긴다는 점이다. 그러나, YOLO가 공간적 제약을 부과하여 동일한 물체에 대해 여러 detection이 생기는 것을 더 방지해준다. yolo는 이미지별로 98개의 bbox만 생성하는데 반해, R-CNN에서는 2000개의 region proposal이 생기게 된다.

Other Fast Detectors

  • Fast R-CNN과 Faster R-CNN은 같은 계산을 공유하고(CNN을 한번만 통과하여 feature사용, end-to-end 방식), region proposal을 만드는 과정을 GPU에서 진행함으로써 R-CNN이 빠르게 동작하도록 만든 것이다. 하지만, 그럼에도 불구하고 여전히 실시간 처리는 불가능한 속도를 제공한다.
  • YOLO는 거대한 detection pipeline의 각 요소들의 속도를 높이는 대신, pipeline 전체를 버려버리고, 1-stage detector라는 새로운 design 을 창조함으로써 빠른 속도를 이끌어내었다.

4. Experiments

4.1 Comparison to Other Real-Time Systems

  • 다른 Real Time Systems로는 30Hz 혹은 100Hz에서 작동하는 DPM 모델이 존재한다.
  • Fast YOLO는 가장 빠른 object detection method이다. mAP는 52.7%이고, 이는 기존의 real time detection 보다 2배의 정확도를 보여준다. 그냥 YOLO는 mAP가 63.4%로 높다.
  • YOLO를 VGG-16을 통해서 학습시키면 더 정확하지만 느려진다.
  • Fastest DPM은 정확도도 상대적으로 낮으며, 속도도 더 느리다.
  • R-CNN minus R 모델은 selective search를 static bounding box proposal로 변경하였지만, 여전히 느리고 proposal이 좋지 않아 정확도도 낮다.
  • Fast R-CNN은 R-CNN보다 속도가 높지만, 여전히 selective search를 사용하여 느리다. Faster R-CNN의 경우 RPN을 사용하여 빨라졌지만, YOLO에 비해서 매우 느리다.

4.2 VOC 2007 Error Analysis

  • YOLO와 다른 SOTA detector들을 더 조사해보기 위해, Error를 더 자세히 살펴보자. Error의 종류는 다음과 같다.
    Correct: correct class and IOU > .5
    Localization: correct class, .1 < IOU < .5
    Similar: class is similar, IOU > .1
    Other: class is wrong, IOU > .1
    Background: IOU < .1 for any object
    이렇게 구분한 Error에 대해서 분석한 결과는 다음과 같다.
  • 분석 결과, YOLO는 object를 localize하는데 문제를 겪고 있음을 알 수 있다. YOLO의 대부분의 에러는 localization error이다. Fast R-CNN의 경우 localization error는 적으나, background error, 즉 빈 배경을 물체로 판단하는 경우가 많다.

4.3 Combining Fast R-CNN and YOLO

  • 그렇다면 서로 다른 장점을 가지고 있는 두 모델을 결합한다면 어떨까?
  • YOLO를 사용해서 background detection error를 줄일 수 있을 것이다. R-CNN이 예측하는 bbox가 YOLO 역시 비슷하게 예측하는지를 확인함으로써!
  • Fast R-CNN 과 YOLO를 결합해본 결과 mAP 가 상승하는 모습을 확인할 수 있었다. 다만, Fast R-CNN의 다른 모델끼리 결합해본 결과 YOLO와 결합하였을때만큼 성능이 상승하지 않았는데, 이를 통해 Fast R-CNN과 YOLO의 결합은 단순한 ensemble의 효과가 아니라, 서로 다른 error를 가지는 두 모델의 결합으로 인한 성능 상승을 가져옴을 알 수 있다.

4.4 VOC 2012 Results

  • VOC 2012 test set에 대해서 YOLO는 57.9% mAP를 기록했다.
  • 이는 SOTA보다 낮은 수준으로, 비슷한 순위의 detector들보다 small objects를 감지하는데에 문제가 있었다.

4.5 Generalizability : Person Detection in Artwork

  • 학술 연구를 위한 데이터셋의 대부분은 training과 test dataset이 같은 분포를 이루고 있다. 실제 세계에서는 이러기가 거의 불가능하다.
  • 따라서 YOLO를 test함에 있어 picasso dataset과 people art dataset에 적용해보았다.
  • 위의 Figure를 보면, YOLO가 다른 모델들에 비해 훨씬 높은 precision과 recall을 보여줌을 알 수 있다.
  • R-CNN의 경우 selective search가 실제 이미지에 대해 tuning된 방법이기 때문에 artwork 에 대해서 좋은 성능을 내지 못하고 있다.
  • DPM은 artwork에 적용되었을때에도 정확도가 별로 떨어지지 않는다. 그러나 성능이 좋지 않다.
  • YOLO는 artwork에 적용되었을때 성능이 떨어지는 정도가 다른 모델들에 비해 적다. 이는 물체의 shape와 size를 모델링하고, 또한 물체사이의 관계와 물체가 주로 나타나는 위치를 모델링하기 때문이다. natural image와 그림은 pixel단위로는 매우 다르지만, 물체의 size와 shape 측면에서는 유사하기 때문에, YOLO가 좋은 성능을 낼 수 있다.(결국 YOLO의 장점이, 물체를 더욱 일반화시켜 학습한다는 것이다.)

5. Real-Time Detection In The Wild

  • YOLO는 빠르고 정확한 모델이기 때문에, webcam 에 연결하여 real time performance를 확인할 수 있다.
  • 물체가 움직이고 모습이 바뀌어도 detect하는 모습을 확인할 수 있다.

6. Conclusion

  • YOLO는 object detection을 위한 Unified model, 즉 하나의 네트워크로 이루어진 모델이다.
  • 이 모델은 간단하며, 전체 이미지를 통해 직접적으로 학습할 수 있다.
  • 다른 classifier 기반의 접근 방식과 다르게, YOLO는 loss function을 통해 detection result에서 직접적으로 학습할 수 있고, 전체 모델이 연결되어있다.
  • Fast YOLO는 가장 빠른 object detector이고, YOLO는 real time detector중 최고 성능을 내고 있다. 또한 새로운 domain의 이미지에 대해서도 잘 일반화해 작동하여 빠르고 강건한 object detection을 위해 사용할 수 있다.
profile
ai school 기간 동안의 TIL!

0개의 댓글