[Paper Review] YOLO

Unified, Real-Time Object Detection, YOLO 살펴보기

김현우
None
23 min readMar 20, 2021

--

휴먼스케이프 Software engineer Covy입니다.

본 포스트에서는 Object Detection 이 필요할 때 많이 쓰이는 툴이기도한, YOLO 에 대해서 리뷰하려고 합니다. YOLO 에는 지금까지 총 4가지 버전이 있는 것을 확인할 수 있는데요, 그 중 제일 처음 등장한 yolov1 이라고 불리는 친구를 살펴보려고 합니다.

리뷰하려는 논문의 제목은 다음과 같습니다.

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

논문에 대한 내용을 직접 보시고 싶으신 분은 이곳을 참고하시면 좋습니다.

Objective

논문의 배경은 존재하던 Object Detection System 의 탐지 속도가 현저히 느렸던 것에서 시작합니다.

아… Objective Detection 은 또 뭘까? 하시는 분들을 위해 익숙하면서도 흥미로운 사진 한 가지를 보여드리고 시작하려고 합니다.

Object Detection

Object Detection 은 이미지로부터 특정 object 를 찾아주는 기술입니다. 위 그림에서는 개, 자전거, 자동차를 이미지 속에서 찾아서 그것들을 감싸주는 가장 작은 bounding box 를 표시해 준 것입니다. 당연하게도, 이미지의 연속인 동영상에서도 적용 가능한 기술입니다.

그러면 이러한 기술이 기존에 느렸던 이유는 무엇일까요??

논문에서는 그 이유를 크게 기존의 Object Detection System 이 classifying 을 재구성해서 구현한 것이기 때문이라고 말하고 있습니다.

갑자기 classifying 이 왜 나와????!!

라고 생각하시는 분들을 위해서, 간단히 부연설명을 드리자면 Object Detection 은 1. 물체의 존재 여부와 2. 그 물체가 무엇인지의 판단 으로 구성되어 있습니다. 2 번의 과정을 위해서 단독적인 classifying process 가 있었던 것이라고 보시면 됩니다. 준비한 라벨들 중 가장 적합한 친구를 뽑아내는 분류 과정이 있었던 것이죠.

다시 본론으로 돌아가서, 논문에서는 기존의 Object Detection System 의 두 가지 기존 방법에 대한 예시를 듭니다.

첫 번째 예시로, DPM (Deformable Parts Model) 의 경우, sliding-window 기법을 활용해서 이미지의 다양한 location 과 scale 속에서 classifying 을 진행했습니다.

두 번째 예시로, R-CNN 의 경우, region proposal methods 를 사용해 이미지 속에서 potential bounding box 를 생성한 이후에 이 box 에서 classifying 을 진행했습니다.

두 예시에서 살펴볼 수 있는 공통점이자, 논문에서 제기하는 문제점은 classifying 자체만으로도 학습이 필요한 요소인데, 이 것을 집중하고자 하는 영역을 sliding-window 기법으로 다양화하면서 계속 확인하려고 하고, 수 많은 bounding box 에 대해서 적용하려고 하니 당연히 느릴 수 밖에 없었던 점입니다.

YOLO 는 이러한 문제에 직면하여 한 가지 아이디어를 제시합니다. Object Detection 문제를 앞서 말한 두 단계가 아닌, single regression problem 으로 해결할 수는 없을까에 대해서 고민한 것입니다.

사실 인간이 이미지에서 물체를 인식할 때 두 단계를 거치진 않죠. 논문에서는 이러한 점에서 그냥 이미지를 딱 보면 그 속의 물체가 딱 나온다 라는 의미로 “You Only Look Once” 의 YOLO 로 그들의 방법론을 명명합니다.

Unified Detection

Unified Detection 이 논문에서 제시한 하나의 회귀 문제로 Object Detection 문제를 해결한 방법입니다.

저는 이 과정이 생각보다 간단해서 놀랐습니다. (아 물론… 과정을 “설명하기에만" 간단한 것이지 이거 라벨링 하려면 엄청날 것 같…긴해요.) 딱 4가지 특성들로 설명 드릴 수 있습니다.

첫 번째로, input 이미지는 S x S Grid 격자 형태로 동등하게 나누어 집니다.

두 번째로, 하나의 Grid 격자는 B 개의 potential bounding box 를 가집니다.
여기서 “가진다” 는 특정 직사각형 bounding box 의 중앙 (직사각형의 중앙이 어딘지는 굳이 설명하지 않을게요.) 이 어떤 Grid 에 속하면 그 Grid 가 bounding box 를 가진다고 표현합니다. 논문에서는 responsible 이라는 표현을 쓰지만 너무 영어적인 표현인 것 같네요.

세 번째로, 하나의 potential bounding box 는 x, y, w, h, c 의 5 가지 요소로 정의할 수 있습니다.
x, y 는 potential bounding box 의 중앙을 나타내는 요소이고, w, h 는 potential bounding box 의 너비와 높이를 나타내는 요소입니다. c 는 potential box 가 object 를 포함할 가능성 Pr(Object) 와 IOU (Intersection Over Union)의 곱 형태로 나타내진 confidence 라는 친구입니다.

IOU

네 번째로, 각각의 Grid 는 C 개의 potential conditional probabilities Pr(Class_i | Object) 를 가집니다.
Object 가 존재할 때 그것이 어떤 Object 일 확률에 대한 요소인 것이죠.

자, 위에서 제가 말씀드린 요소들의 개수를 세어볼까요?

S x S 의 Grid 가 있고, 각 Grid 는 B 개의 potential bounding box 를 가지고, 각 potential bounding box 는 5가지 요소 x, y, w, h, c 를 가지고, 각 Grid 는 C 개의 potential conditional probabilities 를 가집니다.

S *S *(5*B+C) 개의 요소를 가지는 것을 계산할 수 있습니다.

그리고 이 요소들은 ground truth 와의 비교를 통해 학습을 진행해야 하는 요소들이기 때문에, 최종적으로 산출 되어야 하는 vector 의 형태입니다. 마치 N 개의 Label 을 가진 classifier 에서 softmax layer 를 마지막으로 두어 1xN dimension vector 를 산출하는 것과 같은 맥락입니다.

결국 Unifed Detection 에서 설명하려고 했던 것은 input image 로 부터 bounding box 들을 찾아내기 위해서 세부적으로 정의되어야 하는 요소들에 대해 정의한 부분이었다고 보시면 됩니다.

Network Design

논문에서는 사용한 네트워크에 대해서 많은 부분을 할당하지 않았습니다. 그도 그럴 것이 논문의 주요 초점이 Object Detection 을 single regression problem 으로 해결할 수 있는 방법론의 제시와, 이를 위한 loss function 의 재정의 이기 때문입니다.

보통 이런 논문들은 네트워크 적으로 유의미한 변경을 적용해 효율 개선을 진행한 ResNet 등과는 성격 자체가 다르기는 하지만, 그럼에도 기존의 네트워크에 특별한 장치를 하여 논문에서 초점을 맞춘 문제 해결에 특화된 역할을 부여하듯이 강조를 한 논문들은 드문드문 있는데 YOLO 는 그런 것조차 언급이 없어서 아쉽긴 했습니다.

GoogLeNet 을 기반으로 네트워크를 정의했고, 24 개의 convolution layers 와 2 개의 fully connected layers 를 사용했다고 합니다. GoogLeNet 에서 사용한 inception module 대신에 1x1 reduction layers 와 3x3 convolution layers 를 사용했다고는 하는데 그 이유에 대해서는 크게 언급을 해주진 않습니다.

여러분들도 간단히 보고만 넘어가면 좋을 것 같습니다.

Training

논문의 Training 부분은 설명이 이해는 잘 되는데 흐름이 없습니다. 나열식인데도 불구하고 그 이유가 자세히 설명히 안되어 있는 부분들이 많습니다. 그래서, 제 나름대로 그냥 한 번 보고만 넘어가면 좋을 친구들과, 자세히 살펴볼 친구들을 나누어서 설명드리려고 합니다.

먼저, 한 번 보고만 넘어갈 요소들입니다. 논문에서 자세한 설명이나 이유를 알려주지 않아서 아쉽습니다만, performance 에 분명 도움이 되었기에 진행했을 것으로 보입니다.

  1. 논문에서는 ImageNet 1000-class competition dataset 으로 pretrain 을 진행했다고 합니다.
  2. Ren et al. 에서 pretrain model 에 convolutional layer 와 fully connected layer 를 추가하면 성능이 좋아진다고 한 부분에 착안하여 진행했다고 합니다.
  3. Bounding box 의 width 와 height 를 normalize 했다고 합니다. (아마도 수렴 속도를 위해서겠죠…?)
  4. 마지막 layer 에 leaky ReLU 를 설치했다고 합니다.
leaky ReLU used in paper

다음으로, 자세히 살펴 볼 요소들입니다. 이들은 뒤에서 설명할 loss function 설계에 영향을 주거나 방법론에 중요한 역할을 하는 요소들이기 때문에 자세히 살펴보려고 합니다.

  1. 논문에서는 Sum-Squared Error 를 사용해 loss 를 계산합니다.
    최적화가 용이해서 사용했다고 하는데, 논문에서 Sum-Squared Error 를 사용했을 때 직면했던 문제가 loss 의 최적화가 mAP 의 증가와 완벽하게 align 되지 않았다고 합니다.
    특히 x, y, w, h 에서 산출되는 localization error 와 c 에서 산출되는 classification error 를 동일한 가중치로 계산하다보니 많은 이미지에서 Grid 가 object 를 포함하지 않는 결과를 산출했다고 합니다.
    이게 어떤 경우에 문제가 되냐 하면, c 를 0으로 추정했는데 실제로 물체가 존재하는 경우, 이 큰 차이가 gradient 를 굉장히 크게 만들었고 model 에 instability 를 부여했다고 합니다.
    이런 현상을 해결하기 위해서 bounding box coordinate 의 loss 를 늘리고, object 가 존재하지 않는 경우에 confidence prediction 의 loss 를 줄이는 factor 를 도입했습니다.
  2. 논문에서 사용한 Sum-Squared Error 는 large bounding box 와 small bounding box 가 loss 에 미치는 영향을 동일하게 가중했습니다.
    이게 왜 문제가 되냐하면, IOU 를 계산함에 있어서 large bounding box 의 민감도, 즉 deviation 이 작기 때문입니다.
    이런 현상을 해결하기 위해서 w, h 의 scale 을 square root 를 사용해 전반적으로 줄여서 large bounding box 와 small bounding box 에서의 deviation 차이를 줄이는 방식을 선택했습니다.
  3. Obejct 당 하나의 bounding box 를 가지게 하기 위해서 NMS(Non-Maximum Suppresion) 을 사용했습니다. 이는 말 그대로 maximum 이 아닌 confidence 를 가진 bounding box 를 억제하는 방법입니다.

논문에서는 이렇게 위 1, 2 번을 고려해서 Sum-Squared Error 로 loss 를 설계했고 다음과 같습니다.

위 식은 사실 복잡해보이지만, 매우 간단합니다.

1_ij^obj (…이 기호 표현하려니 조금 그렇네요.) 는 i 번째 Grid 의 j 번째 bounding box predictor 에 object 가 존재하는지의 여부입니다.
1_i^obj 는 i 번째 Grid 에 object 가 존재하는지의 여부입니다.

이렇게 생각하면,

첫 번째 줄 수식은 bounding box 의 중심점에 대한 loss 항목임을,
두 번째 줄 수식은 bounding box 의 dimension 에 대한 loss 항목임을,
세 번째 줄 수식은 bounding box predictor 내 물체가 존재하는 경우의 confidence 에 대한 loss 항목임을,
네 번째 줄 수식은 bounding box predictor 내 물체가 존재하지 않는 경우의 confidence 에 대한 loss 항목임을,
마지막 줄 수식은 classification loss 항목임을 알 수 있습니다.

1번은 lambda 항목으로, 첫 번째, 두 번째, 네 번째 수식에서 적용되었고, 2번은 square-root dimension 항목으로 두 번째 수식에서 적용된 것을 확인할 수 있습니다.

결론적으로, Training 부분에서는 loss function 의 설계와 그 과정에서 핸들링한 부분들을 중점적으로 설명하려고 했다고 보시면 됩니다.

Comparison to Other Detection Systems

논문에서는 다른 Detection System 과 YOLO 를 비교합니다.

먼저, 내용을 알려드리기 전에!!

제 생각에는 논문에서 설명하려고 하는 바는 분명히 몇 가지로 추려져 있는데, 이 것을 개별적으로 비교하다 보니 불필요하게 길어진 점이 있는 것 같아서 이 부분을 생략하셔도 YOLO 를 이해하는데는 크게 문제가 없다고 생각이 듭니다. 저랑 비슷한 생각이시다면 다음 항목 Experiments 로 이동해도 무방할 것 같습니다.

아래는 각각의 Detection System 과의 비교입니다.

  1. DPM (Deformable Ports Model)
    DPM 은 static feature 추출, classify region. bounding box prediction 등의 작업이 분리된 pipeline 을 가집니다.
    하지만, YOLO 는 feature extraction, bounding box prediction, non-maximal suppression, contextual reasoning 모두 동시에 가능하여 빠르고 정확합니다.
  2. R-CNN
    R-CNN 에서 진행하는 pipeline 은 상당히 복잡합니다. DPM 에서 사용한 sliding-window 대신에 region proposal 을 사용합니다.
    세부적으로는, selective search 로 potential bounding box 들을 찾고, convolutional network 가 feature 를 extract 하고, SVM 이 box 들을 scoring 하고, linear model 이 bounding box 를 조정하고, non-maximal suppression 이 duplicate detection 을 제거합니다. 이러한 과정들은 각각 개별적으로 tuning 되어야 하고 학습이 느립니다.
    하지만, YOLO 는 이러한 individual components 를 하나의 모델로 optimize 할 수 있어서 더 빠릅니다.
  3. Other Fast Detectors
    Fast R-CNN, Faster R-CNN 은 sharing computation 과 selective search 대신 neural network 를 사용해 R-CNN 의 속도를 개선합니다. 하지만 그럼에도 real-time performance 부족했습니다. 같은 맥락으로 많은 연구가 DPM pipeline 을 speed-up 하는데 초점을 맞추었지만 30Hz 까지만 지원하는 등 부족한 점이 존재했습니다.
    YOLO 는 그 방법론에 대한 디자인 자체가 빠르기 때문에 real-time performance 에서도 좋은 성능을 보입니다.
  4. Deep MultiBox
    R-CNN 과 달리 multibox 는 selective search 대신 convolutional neural network 를 사용했습니다. 하지만 single object detection 은 가능하지만 multiple object detection 을 구현하지는 못했습니다.
    YOLO 는 classification probabilities 를 두어 multiple object detection 이 가능합니다.
  5. OverFeat
    OverFeat 은 앞서 등장했던 R-CNN 과 DPM 과 마찬가지로 disjoint 한 system 을 가지고 있는 문제를 포함해서 prediction 을 내릴 때 local information 만을 보아 prediction 에 global context 반영하기 어려웠습니다. 또한 일관된 결과를 내려면 significant 한 post-processing 이 필요한 점도 단점입니다.
    YOLO 는 local 한 patch 에 대한 classifying 이 아닌 한 번의 모델 학습으로 이루어지기 때문에 global context 를 충분히 반영할 수 있습니다.
  6. MultiGrasp
    YOLO 의 grid approach 의 기원인 MultiGrasp 는 하나의 object 를 포함한 이미지에서 graspable region 을 예측해내는 비교적 간단한 작업에 사용됩니다.
    YOLI 는 이런 MultiGrasp 에 기반하여 이미지 속 다중 라벨의 다중 물체의 bounding box 와 classification probabilities 를 찾아낸다는 점에서 더욱 복잡한 문제를 해결했습니다.

휴… 상당히 길었지만, 요약하자면 다음과 같이 정리할 수 있을 것 같습니다.

  1. YOLO는 Object Identify + Obejct Labeling 의 두 번의 과정을 하나로 줄여 속도가 빠릅니다.
  2. Locally information 을 바탕으로 object 를 labeling 하는 것이 아닌 구현된 loss function 을 따른 모델 학습으로 문제를 해결하기 때문에 global contexture 를 반영할 수 있습니다.
  3. YOLO 는 multi-label multi-object detection 을 성공적으로 진행할 수 있습니다.
  4. YOLO 는 동영상 플랫폼 등의 real-time 매체에서의 object detection 에서도 무리 없이 툴을 사용할 수 있습니다.

더 요약하여 한 문장으로 정리하자면,

YOLO 는 기존 classifying 을 재구성한 방법들과는 달리 한 번의 과정으로 object detection 을 global texture 를 반영하면서 진행하여 일반적인 탐지에서 속도가 빠름과 동시에 동영상에서도 높은 주사율로 사용할 수 있는 객체 탐지 기술로 정의할 수 있겠습니다.

Experiments

논문에서는 YOLO 에 대한 평가를 위해 실험을 진행합니다.

PASCAL VOC 2007 DataSet 으로 Real-Time Detectors, Less Than Real-Time을 비교한 것이 위 표입니다.

먼저 Less Than Real-Time 을 봅시다. mAP 가 가장 좋은 것은 Faster R-CNN 계열이지만, 이 들은 FPS 가 너무 낮아서 Real-Time Detectors 로 적합하지 않습니다. 이를 제외하고는 mAP 가 가장 높은 것이 YOLO 계열 입니다.

다음으로 Real-Time Detectors 를 봅시다. mAP 가 높은 것, 그리고 FPS 가 높은 것 모두 YOLO 계열 임을 알 수 있습니다.

마찬가지로, PASCAL VOC 2007 DataSet 으로 Fast R-CNN 과 YOLO 의 error 를 분석한 것이 위 표입니다.

Correct 는 정확한 class 로 예측하고 IOU 가 0.5 보다 큰 경우이고,
Localization 은 정확한 class 로 예측하고 IOU 가 0.1과 0.5 사이인 경우이고,
Similar 는 유사한 class 로 예측하고 IOU 가 0.1 보다 큰 경우이고,
Other 는 틀린 class 로 예측하고 IOU 가 0.1 보다 큰 경우이고,
Background 는 class 에 관계 없이 IOU 가 0.1보다 작은 경우입니다.

YOLO 는 Localization error 가 크지만, Fast R-CNN 은 Background error 가 큽니다. 그리고 correct 는 R-CNN 이 조금 더 우세합니다. 온전한 정답만 따지면 R-CNN 이 더욱 좋은 detector 이지만, 전체적으로 보았을 때는 YOLO 를 높게 평가할 수도 있습니다. 전체적으로 accuracy 가 기존에 비해서 크게 떨어지는 detector 는 아니라는 것을 보여줍니다.

YOLO 의 background error 가 작다는 점에서 착안해 Fast R-CNN 과 YOLO 를 합쳤을 떄는 mAP 변화를 측정합니다. 그 결과 Fast R-CNN 보다 3.2% 가 좋은 75.0% 의 mAP 를 보여주었습니다. 다만, YOLO 혼자 돌리는 것보다는 훨씬 느린데, 그것과 관계 없이 YOLO 자체가 굉장히 빨라서 Fast R-CNN 혼자 돌리는 것에서 큰 변화는 없다고 합니다.

PASCAL VOC 2012 Dataset 에서 YOLO 는 57.9% 의 mAP 를 보여주었습니다. 이는 R-CNN + VGG 와 비슷한 수치를 보였습니다. 그런데 비슷한 평균 수치를 가진 detector 와 비교하여 YOLO 는 작은 물체에서 탐지에 어려움을 겪는 모습들을 보였습니다. Bottle 같은 카테고리의 점수를 보시면 알 수 있습니다.
더불어 이 결과를 통해 Fast R-CNN + YOLO 는 mAP 관점에서 가장 좋은 detector 중 하나로 볼 수 있었습니다.

Detector 의 Generalizability 를 측정하기 위해 논문에서는 VOC 2007 Person Datasets 을 바탕으로 학습한 detector 에 Picasso 의 그림, 예술 그림을 넣어 AP 를 테스트합니다.
R-CNN 의 경우 VOC 2007 Person detection 에서는 높은 AP 를 보였지만 Picasso 와 예술 그림에서는 현저하게 낮아진 AP 를 보여주었습니다.
DPM 은 Picasso 나 예술 그림에서의 AP 저하가 크진 않았지만 VOC 2007 Person 에 대한 AP 도 높은 편은 아니었습니다.

더불어, 논문에서는 YOLO 의 실시간 객체 탐지 능력을 보여 주기 위해 사진을 첨부했습니다.

Conclusion

이것으로 논문 “You Only Look Once: Unified, Real-Time Object Detection” 의 내용을 간단하게 요약해보았습니다.

논문이 생각보다 내용이 굉장히 쉬워서 잘 읽혔던게 기억에 가장 남는 점인 것 같습니다. 더불어 쉽거나 적은 본론 내용에 비해서 기존 기술들과의 차별점 나열에서 핵심은 몇 가지로 정해져 있는데 설명만 장황한 느낌이라 아쉬웠습니다.(아마도 논문 통과를 위해서겠죠..?)

Object Detection 의 계보(?) 같은 친구가 정리되어 있어서 무엇을 읽어볼까 고민하다가 많이 들어본 친구인 YOLO 를 읽었는데 나름 잘 읽었다고 생각이 들었습니다. 사실 저는 yolov4 를 열어보았는데, yolo 시리즈의 저자가 바뀌기도 했고, performance 개선의 극한을 보여주는 느낌이어서 좀 더 원론적인 친구를 찾아서 읽으려고 했었습니다. 엄청 대단한 친구라고 하던데 Objective Detection 에 대해서 조금 더 관심이 생기면 다시 열어보려고 합니다. 여러분들도 Objective Detection 에 관심이 있다면 위 계보 사이트에서 하나하나씩 정복해나가시는 것도 좋을 것 같습니다.

--

--