Yolo는 2015년 You Only Look Once: Unified, Real-Time Object Detection이라는 논문을 통해 발표되었다. RCNN계열과는 사뭇 다른 1-stage모델이기 때문에 새로운 관점에서 접근해야한다. RCNN보다 월등히 빠른 속도를 자랑하는 Yolo에 대해 알아보자.


Abstract


기존 Object Detection의 방식과는 다른 Yolo를 소개한다. 특히 기존 classifier의 형태가 다른 모델이다. Object Detection문제를 Regression으로 생각해 Bounding box와 class probabilities를 한 곳에 합쳐놨다. 전체 detection과정이 한 네트워크이기 때문에 end-to-end로 최적화할 수 있다. base Yolo는 45frames이 나올 정도로 빠르다. 작은 모델의 경우 155frames까지 나온다. SOTA모델과 비교하면 localization의 경우 조금 낮은 정확도를 보이지만, False Detection에 대해서는 좋은 성능을 보인다. DPM과 RCNN등 모든 기존 모델의 성능을 능가한다.


1. Introduction


인간은 사진을 힐끗만 봐도 물체 종류, 위치 등을 바로 알 수 있다. 사람의 visual system은 매우 빠르고 정확해서 운전과 같은 복잡한 테스크도 쉽게 해낸다. 이처럼 빠르고 정확한 알고리즘은 컴퓨터로 하여금 운전도 가능하게 하고, 로봇 시스템과 같은 기술도 가능하게 한다.


기존에 있던 Object Detection의 방식은 탐지를 하기 위해 classifier를 따로 정의한다. 예를 들어 DPM의 경우 slide windows를 이용해 classifier가 적용될 부분을 따로 지정해준다. 또한 RCNN의 경우 region proposal방식을 이용해 물체가 있을법한 곳에 bbox를 생성하고 classifier를 적용한다. 이후에 bbox를 보정하고, 중복을 없앤다. 이러한 복잡한 piplines는 각 과정이 분리되어 있어서 최적화가 어렵다.



Yolo는 classifier와 bbox보정을 하나의 regression으로 병합했다. 이름처럼 이미지를 한 번만 보고 object를 예측할 수 있다. Yolo는 매우 간단하다. 위 그림과 같이 하나의 CNN네트워크를 이용해 multi bbox와 class를 예측할 수 있다. 또한 전체 이미지를 한 번에 학습할 수 있어서 최적화에 쉽다. 이러한 1-stage모델은 다음과 같은 장점이 있다.

Yolo는 빠르다


Detection을 regression문제로 생각하기 때문에 복잡한 과정이 필요없다. base네트워크의 경우 Titan X GPU기준 1초에 45frame을 처리할 수 있고, 가벼운 모델의 경우 15frames까지 간다. 이것은 곧 video데이트를 실시간으로 처리할 수 있다는 뜻이다. 더 너아가 real-time system에서 다른 모델에 비해 약 2배정도 더 좋은 성능을 보인다.


Yolo는 결과의 원인을 설명할 수 있다.


Sliding windos나 Region Proposal을 사용하는 모델과 달리 YOLO는 Train과 test간에 이미지의 전체를 보기 때문에 이미지 속에 있는 정보들을 자연스럽게 해석할 수 있다. 가장 좋은 모델이었던 Fast-RCNN도 배경과 같이 큰 범위는 잘 보지 못해서 배경탐지에는 많이 불리하다.


YOLO는 물체를 일반화할 수 있는 요소를 학습한다.


Artworks에 대해 train과 test를 하면 다른 모델(DPM, RCNN)을 월등히 능가하는 성능을 보인다. 특히 YOLO는 일반화가 특화되어 있어서 새로운 domain이거나 예상하지 못한 data가 들어와도 잘 탐지한다.


2. Unified Detection


YOLO는 Object Detection의 요소들을 하나의 네트워크로 합쳤기 때문에 각 bbox를 예측할 때 이미지의 전체 부분(features)을 한 번에 이용한다. 그리고 모든 bbox를 하나의 이미지에서 예측한다. 이러한 이유로 YOLO는 성능도 높고 real-time한 속도를 자랑할 수 있다.


YOLO의 특징은 다음과 같다. 먼저 input이미지를 5x5grid로 나눈다. 만약 class가 A인 물체의 중심이 해당 grid cell안에 들어오면, 그 grid는 A를 탐지한 것이다. 각 grid는 bbox와 그 bbox의 confidence score를 계산한다. confidence score의 경우 물체의 objectness와 bbox의 정확도를 나타낸다. 따라서 confidence를 $\operatorname{Pr}(Object)*IOU_{\text {pred }}^{\text {truth }}$와 같이 정의했다. 만약 cell안에 물체가 없다면 confidence score는 0이 된다. 반대로 물체가 있다면 예측된 bbox와 정답 bbox가 서로 상호작용할 수 있도록 모델을 설계했다.


각 bbox는 5개의 요소를 포함하고 있는데, $x, y, w, h, confidence$가 있다. $(x,y)$의 경우 gride cell안에 존재하는 bbox의 중심좌표이고, $(w, h)$의 경우 전체 이미지의 사이즈를 기준으로 예측된다. 마지막으로 $confidence$의 경우 예측 bbox와 정답bbox의 IOU를 나타낸다.


또한 각 grid cell은 조건부 확률을 계산하는데, $Pr(Class_i \mid Object)$를 예측한다. 해당 cell에 물체가 있을 때 class일 확률을 계산한다. bbox의 개수와 상관없이 각 grid cell당 하나의 class만 예측한다. test시에는 조건부확률과 각 box별 confidence를 곱한다.


\[\operatorname{Pr}\left(\text { Class }_{i} \mid \text { Object }\right) * \operatorname{Pr}(\text { Object }) * \text { IOU }_{\text {pred }}^{\text {truth }}=\operatorname{Pr}\left(\text { Class }_{i}\right) * \text { IOU }_{\text {pred }}^{\text {truth }}\]


위 식은 각 box별로 class-specific한 confidence score를 산출한다. 이 score는 class의 확률과 bbox의 정확도를 동시에 encode한다. 위 과정을 도식화하면 다음과 같다.



위 그림에서 이미즈를 grid cell로 나눈 부분을 보면 각 cell은 bbox의 요소(5개)와 각 class별 확률이 계산된다. 따라서 각 cell은 $(B*5 + C)$개의 parameters를 가지고 있기 때문에 전체 사이즈는 $S \times S \times(B * 5+C)$가 된다.


PASCAL VOC데이터셋으로 YOLO를 평가할때 $S=7, B=2$를 사용했다. PASCAL VOC의 경우 총 20개의 class가 있기 때문에 $C=20$이다. 따라서 최종적으로 예측해야하는 tensor의 사이즈는 $7 \times 7 \times 30$이다.


2.1 Design


YOLO는 CNN로 구현했고 PASCAL VOC데이터셋으로 평가했다. CNN Layer의 경우 Feature를 추출하고 FC Layer는 bbox와 class를 예측했다. YOLO 네트워크는 GoogleNet에서 영감을 얻었다. 24개의 CNN Layers와 2개의 FC Layers로 구성되어 있고, GoogleNet에서 사용한 inception모듈 대신 $1 \times 1$필터를 사용해 파라미터 개수를 줄였다. 아래는 모델의 전체 모습이다.



YOLO의 빠른 버젼 9개의 CNN Layer 더 적은 filter의 개수로 구현했다. 최종 output의 사이즈는 $7 \times 7 \times 30$이다.


2.2 Training


먼저 ImageNet 1000-class competition dataset으로 CNN Layer 20개를 사전학습시켰다. 학습하는데 약 1주일이 걸렸고 top-5에 대해 88%의 정확도를 보였다.(사전학습 모델, ImageNet2012기준) 이후에 모델을 detection으로 변환했다. Ren et al.논문에 따르면 pretrained된 모델에 CNN Layer와 FC Layer를 같이 추가하면 성능이 향상된다고 한다. 이 내용을 바탕으로 랜덤하게 초기화된 4개의 CNN Layer와 2개의 fC Layer를 추가했다. Detection은 보통 큰 이미지를 input으로 사용하기 때문에 Input size또한 $224 times 224$에서 $448 \times 448$로 증가시켰다.


모델의 마지막 부분은 class의 확률과 bbox의 좌표를 예측한다. bbox의 길이는 이미지의 가로,세로 길이로 정규화하여 0과 1 사이의 값으로 변환했다. bbox의 좌표 또한 grid cell 안에 존재할 수 있도록 0과 1 사이로 parametrize했다. 마지막 출력값에서는 Linear활성화 함수를 사용했고 다른 모든 layer에는 Leaky ReLU를 사용했다.


\[\phi(x)= \begin{cases}x, & \text { if } x>0 \\ 0.1 x, & \text { otherwise }\end{cases}\]


최적화는 sum-squared error를 이용했다. 최적화가 쉽지만 정확도를 극대화하는데 완전히 완벽한 방법은 아니었다. 그 이유는 localization의 가중치와 classification의 가중치를 동일하게 생각하기 때문이다. 또한 대부분의 grid cell에는 물체를 포함하고 있지 않다. 물체를 포함하고 있지 않은 cell의 confidence는 대부분이 0값으로 출력이 되는데, 이런 경향은 기울기를 구할 때 물체가 있는 cell에 큰 영향을 준다. 이와 같은 문제는 모델의 안정성을 떨어뜨리고 학습도 잘 되지 않는다.


이 문제를 해결하기 위해 bbox좌표를 구할 때 사용하는 loss는 증가시켰고 물체가 없는 cell에서 발생하는 loss는 감소시켰다. $\lambda_{coord}$와 $\lambda_{noobj}$를 이용해 구현했다. 각각 5와 0.5를 사용했다. 또한 sum-squared error는 작은 bbox와 큰 bbox간의 차이가 미미하다. 따라서 둘 간의 차이를 선명하게 하기 위해 bbox의 가로,세로에 루트를 적용했다.


YOLO는 각 cell별로 여러개의 bbox를 예측한다. 하지만 Train시에는 object별로 하나의 bbox predictor만 할당되기를 원한다. 따라서 predictor가 정답 bbox와 IOU가 가장 높은 bbox에 대해서만 ‘책임’을 지도록 할당했다. 이런 방식은 각 bbox의 predictor가 specialization되는데 도움을 준다. 각 predictor가 특정 size, aspect ratios, class 등에 따라 더 좋은 예측을 하게 된다.


Train시 다음과 같은 loss함수를 사용한다.



$\mathbb{1}{i}^{\text {obj }}$은 cell $i$에 물체 여부를 나타내고, $\mathbb{1}{ij}^{\text {obj}}$은 cell $i$ 안에 있는 $j$번째 bbox predictor를 나타낸다.


Classification에 대한 loss의 경우 해당 cell에 물체가 있을때만 패널티를 준다. 또한 predictor가 특정 bbox에 대한 ‘책임’이 주어졌을 때만 bbox좌표에 대한 패널티가 주어진다.


학습 디테일은 다음과 같다. 먼저 PASCLA VOC2007과 2012에 대해 총 135epochs만큰 학습을 진행했다. 2012를 test할 때는 2007 test data도 포함되어있다. 배치사이즈는 64이고 momentum은 0.9, decay는 0.0005이다. Learning rate의 경우 첫 epoch을 $10^{-3}$값으로 시작해서 $10^{-2}$로 점점 증가시켰다. 첫 epoch부터 높은 rate로 학습하면 기울기가 불안정해지기 때문이다. 이후에 $10^{-2}$로 75epoch까지 학습하다가 30epochs간에는 $10^{-3}$으로 감소시켰고, 마지막은 $10^{-4}$로 30epochs간 학습했다.


과적합을 피하기 위해 dropout과 augmentation을 사용했다. Dropout은 0.5 rate로 첫 connetect layer뒤에 적용했다. Augmentation의 오리지널 이미지의 사이즈를 약 20%정도 확장하는 랜덤scaling변환을 적용했다. 또한 HSV 색 공간에서 무작위로 1.5배까지 채도를 조정했다.


2.3 Inference


Train과 마찬가지로 test시에도 하나의 네트워크로 detection이 가능하다. PASCAL VOC데이터에서 네트워크는 한 image당 98(SxSxB)개의 bbox와 각 class를 예측한다. YOLO는 classifier-based모델과 다르게 single 네트워크로 test가 가능하기 때문에 매우 빠르다.


Grid Cell은 bbox을 예측할 때 공간적인 다양성을 강화한다. Grid cell 안에 물체가 탐지됐을 때 네트워크는 한 object에 대해 하나의 bbox만 예측한다는 것은 명백하다. 하지만 여러 cell의 경계선 주위에 있거나 매우 큰 물체의 경우 multiple-cell에 의해 localization이 잘 될 것이다. RCNN과 DPM처럼 성능에 중요하지는 않지만, NMS는 mAP를 약 2~3% 증가시킨다.


2.4 Linitations of YOLO


YOLO는 강력한 공간적 제약을 가한다. 왜냐하면 각 cell은 2개의 bbox와 하나의 class만 예측할 수 있기 때문이다. 이런 제약은 물체 가까이에 있는 몇몇 물체들에 예측에 있어서 악영향을 끼친다. YOLO는 ‘무리지어 다니는 새 떼들 하나하나를 탐지하는 것’과 싸움을 하고 있다.


YOLO는 data를 통해 bbox을 예측하기 때문에, 특정 aspect ratio에 벗어나거나 새로운 물체에 대해 일반화되지 않는다. 또한 모델의 구조를 보면 downsampling layer가 많기 때문에 bbox예측 시 상대적으로 coarse한 feature(high level, filter가 많이 적용됐을 때 feature map들)를 사용한다.


마지막으로 학습을 할 때 작은 bbox와 큰 bbox의 loss차이가 미미하다. 큰 bbox에서 작은 오차는 큰 영향이 없지만 작은 상자에서 작은 오차는 IOU에 큰 영향을 준다. YOLO에 서 발생하는 대부분의 loss는 localization에서 발생하는 것이다.


3. Comparison to Other Detection Systems


Object Detection은 CV분야에서 핵심 기술이다. Detection은 보통 feature를 추출하고 분류하거나 bbox를 예측한다. 보통 slide window방식이나 Region proposal방식으로 classifier나 localization이 적용된다. 대표적인 몇 개의 특징을 비교해보자.


Deformable parts models.


DPM의 경우 slide window방식으로 Detection을 한다. 특히 Pipline이 합쳐져있지 않아서 특징을 추출, bbox 예측 등이 독립적으로 이루어진다. YOLO는 이러한 문제를 하나의 네트워크로 merge해서 해결했다. YOLO는 feature를 추출하고, bbox를 예측하며 NMS를 수행하고 설명 가능한 결과 등이 동시에 이루어진다. 따라서 DPM보다 빠르고 정확하다.


RCNN


RCNN의 경우 물체를 찾을 때 region proposals방식을 이용한다. Selective Search가 후보군을 생성하면 CNN Layer가 특징을 추출하고 SVM으로 각 물체의 objectness를 계산하고 bbox를 예측한다. 각 단계는 독립적으로 학습이 되어야하고 이로인해 속도가 매우 느리다.


YOLO


RCNN과 약간의 공통점이 있따. 각 grid cell에서 후보가 되는 bbox를 생성하고 CNN Layer를 통해 각 bbox에 objectness를 계산한다. 하지만 YOLO는 각 cell마다 공간적인 제약을 걸어줌으로서 같은 물체에 대해 여러 detection을 하는 것을 방지한다. 또한 YOLO는 다른 모델에 비해 훨씬 적은 bbox후보군을 생성한다.(2000 vs 98) 가장 중요한 것은 여러 단계가 하나의 single 네트워크로 결합되었기 때문에 최적화가 편리하다.

Other Fast Detectors


Fast와 Faster RCNN은 CNN의 파라미터를 공유하고, selective search를 RPN으로 대체 속도를 향상시켰다. RCNN보다는 성능이 좋지만 여전히 real-time에는 한계가 있다. 많은 연구자들은 DPM의 속도를 높이는 것에 노력을 했다. HOG계산을 가속화하고, cascade방식을 사용하며 GPU를 활용해 계싼을 했지만 여전히 real-time에는 부족했다. 큰 모델을 최적화하는 대신 YOLO는 모델의 크기를 줄임으로서 속도를 높였다. 얼굴이나 사람 탐지와 같이 single class에 대해서는 최적화가 더 쉽다.


Deep MultiBox


RCNN와 다르게 Deep MultiBox는 Selective search를 사용하는 대신 CNN을 이용해 Region Proposal을 수행했다. 또한 MultiBox는 single class 예측 또한 가능했다. 하지만 Image patch classification이 필요했고 여전히 모델이 컸으며 Detection을 할 때 일반화를 잘 하지 못했다. YOLO와 MultiBox 둘 다 CNN 네트워크를 이용해 bbox를 예측하지만 YOLO가 더 완성된 detection system이다.


OverFeat


Localization을 수행하고 그 localizer에 detection을 시도하려고 했다. OverFeat는 slide windows를 사용하는 꽤 준수한 모델이었지만 여전히 disjoint system이다. OverFeat는 localization을 최적화할 뿐, detection은 하지 못했다. DPM과 마찬가지로 모델의 localizer는 local에 대한 정보만 예측한다. 많은 후속처리가 필요한 모델이다.


MultiGrasp


YOLO는 이 모델과 흡사하다. YOLO에서 언급한 grid cell방식은 MultiGrasp에서 가져왔다. 하지만 MultiGrasp은 Object Detection보다 훨씬 간단한 테스크를 위한 모델이다. Multigrasp은 한 물체에 대해 한 가지 region만 예측 가능하다.


4. Experiments


YOLO를 PASCAL VOC2007 데이터셋을 이용해 다른 real-time detection 모델과 비교를 했다.YOLO와 RCNN의 차이점을 알아보기 위해 VOC2007를 기반으로 YOLO와 Fast RCNN으로부터 error를 추출했다. Error를 통해 알 수 있엇던 것은 YOLO가 Fast RCNN의 성능보다 좋다는 것과 성능에 큰 차이를 주는 배경에 대한 False Positive를 줄였다는 것이다.


4.1 Comparison to Other Real-Time Systems


대부분의 연구들은 object detction을 속도를 증가시키는데 집중을 했다. 유일하게 Sadeghi et al.가 약 30frame으로 real-time detection에 성공했다. YOLO를 이러한 모델드과 비교를 했고 정확도 측정과 속도-정확도 같의 tradeoff 관계를 확인하기 위해 mAP도 측정했다.


Fast YOLO가 PASCAL데이터셋에 대해 가장 빠른 모델이 되었다. 정확도 또한 52.7%로 기존에 존재하던 real-time 모델들보다 약 2배 정도 높은 수치였다. 그냥 YOLO의 경우 10%더 높은 정확도를 보였다.

  • Fastest DPM : 성능을 포기하지 않고 속도를 향상시켰는데 여전히 real-time에는 부족했다.
  • RCNN minus R : Selective search를 static bbox proposals로 대체했다. 속도는 증가했지만 여전히 빠르지도 않고 성능에도 악영향을 미쳤다.
  • Fast RCNN : Classification의 속도는 향상시켰지만 Selective search때문에 여전히 이미지당 최소 2초의 시간이 소요된다.



가장 최근 연구인 Faster-RCNN은 selective search를 CNN기반의 Region Proposals network로 대체했다. 가장 정확도가 좋은 Faster RCNN의 경우 7frames, 덜 좋은 모델은 18frames이었다. VGG-16버젼은 약 10mAP나 높았지만 6배 느렸으며 ZeilerFergus버젼은 속도가 빠르지만 여전히 정확도가 낮았다.


4.2 VOC 2007 Error Analysis


YOLO와 SOTA들의 더 정확한 차이점 분석을 위해 VOC2007의 결과를 뜯어봤다. Fast R-CNN이 PASCAL데이터셋에 대해 가장 좋은 성능을 보였기 때문에 해당 모델과 비교를 했다.

  • Correct: correct class and IOU > 0.5
  • Localization: correct class, 0.1 < IOU < 0.5
  • Similar: class is similar, IOU > 0.1
  • Other: class is wrong, IOU > 0.1
  • Background: IOU < 0.1 for any object


test 시 각 카테고리별로 높은 순서대로 N개의 prediction에 대해 확인을 했다. 아래는 그 결과이다.



YOLO는 Localization을 하는 분야에서 많은 error가 발생했다. Correct를 제외하고 나머지 요소들을 다 합친 것 보다 localizatoin의 error가 더 컸다. Fast RCNN의 경우 localization의 error는 적었지만 background error는 매우 컸다. Object가 존재하지 않았던 false positive에 의해 발생한 것이다. YOLO보다 약 3배정도 더 많은 FP를 예측했다.


4.3 Combining Fast RCNN and YOLO



YOLO는 Fast RCNN보다 배경에 대한 오검출이 적었다. YOLO를 이용해 Fast RCNN의 배경 오검출 문제를 해결함으로서 성능을 높였다. RCNN이 예측한 모든 bbox에 대해 YOLO도 비슷한 bbox를 출력했는지 확인을 했다. 그 결과 YOLO와 Fast RCNN이 동시에 검출한 bbox에 대해 성능이 향상되었다.

  • 71.8%을 기록하던 Fast RCNN에 YOLO를 합치니 75%까지 향상됨.
  • 다른 버젼의 모델들도 합쳐본 결과 0.3 ~ 0.6%의 소소한 차이만 있었다.


불행히도 속도 측면에서는 아무런 장점도 없었다. 하지만 YOLO가 워낙 빨라서 Fast RCNN의 연산량에 어떠한 영향도 주지 않았다.


위 실험은 2007에 대해 진행했고, 아래는 2012에 적용한 결과이다.


4.4 VOC 2012 Results



VOC2012데이터셋에서는 약 57.9%를 달성했는데 이것은 RCNN의 오리지널 버젼과 같은 수준이었다. 작은 물체를 탐지하는데 어려움이 있었다.

  • bottle, sheep 같은 건 RCNN보다 안 좋음
  • cat, train에 대해서는 높은 성능을 보임
  • Fast RCNN과 YOLO를 합치니까 매우 좋은 성능을 보임


4.5 Generalizability


연구를 목적으로 사용하는 dataset의 데이터셋은 대부분 비슷한 분포를 띄고 있다. 하지만 real-world에서는 academic dataset과 차이가 있어서 detection이 더 어렵다. real-world 데이터에 대해 robust한 모델이 결국 일반화가 잘 된 모델이기에 모델을 평가하는데 있어서 매우 중요한 요소 중 하나이다.


모델이 일반화된 정도를 측정하기 위해 Picasso Dataset과 People-ARt dataset을 이용해 YOLO를 다른 모델들과 비교했다. VOC데이터로 학습을 하고 위 두 데이터셋에서 사람을 탐지하는 것에 대해 정확도를 측정했다.



모든 모델은 VOC2007로 학습이 된 상태이고 mAP는 Person에 대해서만 적용을 했다. 결과적으로 다른 모델들에 비해 월등히 좋은 성능을 보였다. RCNN의 경우 VOC에는 높은 AP를 보였지만 artwork에 대해서는 매우 낮은 AP를 보였다. 즉, Fast RCNN은 PASCAL VOC에 과적합되어있다고 볼 수 있다. Selective search가 natural한 사진에 적합한 알고리즘이기 때문에 이러한 결과가 나온 것 같다. RCNN과 DPM은 안 좋다는 소리를 함.


YOLO의 경우 매우 일반화가 잘 되어있음. YOLO는 size와 shape을 모델링함으로써 detection을 수행한다. Artwork와 natural 이미지는 픽셀단위로 봤을 때 매우 다르지만 물체의 size나 shape는 비슷하다. 그래서 YOLO는 이러한 특징을 잘 잡아낸다.


5. Real-Time Detection In the Wild


YOLO는 매우 빠르고 정확해서 CV 어플리케이션에 잘 어울린다. YOLO를 웹캠과 연결해서 웹캠으로부터 사진을 가져와 detection을 display했다. 결과는 놀라왔다. 물체가 움직이는 방향으로 detection을 수행했는데, 마치 추적 시스템처럼 작동을 한 것 같았다.


6. Conclusion


논문을 통해 결합된 Object Detection모델인 YOLO에 대해 알아봤다. YOLO는 매우 간단하고 사진의 전체 부분에 대해 한 번에 학습이 가능했다. 각 단계가 나눠져있는 다른 모델과 다르게 모든 과정이 하나로 합쳐져있기 때문에 학습이 한 번에 이루어질 수 있다. Fast YOLO또한 정확도도 준수하지만 속도가 매우 빠르다. 마지막으로 YOLO는 매우 일반화가 잘 되어 있어서 빠르고 robust한 Detector이다.


읽어주셔서 감사합니다.(댓글과 수정사항은 언제나 환영입니다!)