--- title: You Only Look Once. Unified, Real-Time Object Detection (YOLO) tags: papers --- ![](https://i.imgur.com/W6u7bDz.png) [TOC] ## Abstract - object detection 문제를 regression 문제로 frame - 하나의 neural network로 bounding box와 class 확률을 계산. (한 번의 evaluation으로!) - YOLO : 45 frames/s - Fast YOLO : 155 frames/s - 다른 realtime detector보다 mAP 두 배 - detection에 있어서 localization error는 높지만 background false positive는 낮다. - 심지어 artwork같은 곳에서도 잘되는 일반화! ## Introduction - 사람은 자연스럽게 이미지 안에 어떤 객체가 있고, 어디 있고 어떤 상호작용을 하는지 안다. object detection 알고리즘도 이런게 가능하다면 운전 보조 시스템이나 로봇의 눈이 되어줄 수 있을 것이다. - 현재 detection 방법들은 classifier를 detection을 하는데에 사용한다. - DPM : sliding window를 하고 이를 분류 - R-CNN : region proposal로 bounding box들을 구하고 그 박스들을 classfy. 그리고 후처리로 중복되는 bounding box 제거 후 다시 그 box를 rescore => 별개로 동작하는 느리고 복잡한 파이프라인 ![](https://i.imgur.com/UKZaCYA.png) - yolo는 다음과 같이 하나의 CNN으로 bbox랑 class probability를 구하는데, 몇 가지 장점이 있다. 1. 이전처럼 복잡한 pipeline이 없이 한 번에 해서 빠르다. 2. 한 이미지를 globally, 즉 넓게 보고 추론하여 외관 뿐만 아니라 객체가 가진 문맥 정보도 볼 수 있다. 3. 일반화가 잘되어 있어서 그림같은 artwork에서 R-CNN과 DPM보다 성능이 좋다. (새로운 도메인이나 보지않은 입력에서도 잘 된다.) - 좋은 점은 많지만 시간을 따지지 않을 때엔 다른 알고리즘보다 정확도가 좀 떨어지고 작은 물체에 대해서는 localize를 잘 못한다. ## Unified Detection ![](https://i.imgur.com/Z1Jk1k2.png) - 이미지를 $S \times S$ grid로 나눈다. (S = 7) - 각 Cell 당 $B$ 개 Bounding Box를 예측한다. (B = 2) - 각 Bounding Box는 x, y, w, h, c를 예측 ![](https://i.imgur.com/HbpVk1d.png) - x : cell 안에서 상대적 x 위치 (0 ~ 1) - y : cell 안에서 상대적 y 위치 (0 ~ 1) - w : 전체 이미지에서 상대적 폭 비율 (0 ~ 1) - h : 전체 이미지에서 상대적 높이 비율 (0 ~ 1) - c : 객체일 확률 $Pr(Object)$ - 각 Cell 당 객체일 때 클래스 $C$일 확률 $Pr(Class|Object)$를 예측한다. (C = 20) - x, y, w, h는 IOU를 구하는 데 사용. ![](https://i.imgur.com/NlqCgQ8.png) - $Pr(Object)$와 $Pr(Class|Object)$를 곱하면, 그 Box가 해당 Class일 확률 $Pr(Class)$이 나온다. - 또한 해당 객체에 Bounding Box를 잘 일치시켰는지까지 포함시키기 위해 IOU를 곱해주면 각 box의 **class-specific confidence score**를 얻을 수 있다. $$ Pr(Class_i|Object) \times Pr(Object) \times IOU^{truth}_{pred} = Pr(Class_i) \times IOU^{truth}_{pred}$$ ### Network Design ![](https://i.imgur.com/oJ3x0nk.png) - YOLO : Convolution Layer 24 + FC 2 - Fast YOLO : Convolution Layer 24 + FC 2 ### Training #### Pretraining - ImageNet 데이터셋 (1000-class) - 앞 단의 Convolution 20 + average pooling + FC - 1주 동안 학습 #### Detection Model - transfer learning 처럼 Pretrain한 Convolution 20 뒷단에 새로운 Convolution 4 + FC 2 연결 (randomly initialize weights) - 세밀한 시각 정보를 위해 224 x 224 -> 448 x 448로 입력이미지 해상도 증가시킴 - 마지막 레이어는 linear, 그 외에는 Leaky ReLU(0.1) - 135 epoch 동안 학습. learning rate schedule - ~ 75 epoch : $10^{-3}$에서 $10^{-2}$로 천천히 증가 - 75 ~ 105 epoch : $10^{-3}$ - 105 ~ 135 epoch : $10^{-3}$ - 64 batch size - 0.9 momentum (0.0005 decay) #### DataSet - Train, Validation : PASCAL VOC 2007 - Test : PASCAL VOC 2012 #### Loss Function - Optimize하기에 쉬운 **sum-squared error(SSE)** 를 Loss로 사용 1. 하지만, localization error가 classification error를 동일한 비율로 두고 있어서 mAP에 알맞지는 않다. 2. 대부분 grid에는 객체가 없기 때문에 confidence가 0으로 가고 그에 따라 gradient들도 0으로 가서 학습이 불안정해질 수 있다. 3. 큰 박스와 작은 박스의 error값의 차이가 크다. - 이에 대한 해결법들 1. localization 비율을 올려주기 위해 $\lambda_{coord}$ = 5를 곱해준다. 2. 객체가 없는 것에는 비중을 덜 두기 위해 $\lambda_{noobj} = 0.5$를 곱해준다. 3. 큰 박스와 작은 박스의 error 비율을 조금이라도 맞추기 위해 width와 height를 제곱근한다. ![](https://i.imgur.com/jl8vzUB.png) - $i$ : grid index - $j$ : bounding box index - $C_i$ : object confidence score - $p_i(c)$ : class probability - $\mathbb{1}^{obj}$ : 객체가 있으면 1, 없으면 0 - $\mathbb{1}^{noobj}$ : 객체가 없으면 1, 있으면 0 ### Inference - Box를 예상하다보면 여러 가지 겹치는 Box가 존재한다. 이를 제거하기 위해 Non-Maximu Suppression 알고리즘을 사용. (아래 Reference에서 참조) ![](https://i.imgur.com/g6Nazu9.png) ### Limitations of YOLO 1. 하나의 Cell에 두 가지 BBox밖에 없으므로 작은 물체에 약하다. 2. 여전히 남아있는 큰 bounding box와 작은 bounding box의 에러 차이 ## Reference - [논문 원본](https://arxiv.org/pdf/1506.02640.pdf) - [Breaking down Mean Average Precision (mAP)](https://towardsdatascience.com/breaking-down-mean-average-precision-map-ae462f623a52) - [deepsystem.io의 슬라이드](https://docs.google.com/presentation/d/1aeRvtKG21KHdD5lg6Hgyhx5rPq_ZOsGjG5rJ1HP7BbA/pub?start=false&loop=false&delayms=3000&slide=id.p)