본문 바로가기

IT/Paper

[Deeplearning] YOLO!, You Only Look Once : Unified, Real-Time object Detection

안녕하세요~


최근에 Image detection과 관련된 공부를 하고 있습니다. 그래서 제가 공부하는데 이해도를 높이기 위해 Image detection과 관련된 신경망 중에 실시간 이미지 객체 탐지 및 인식에 강력하다라고 소문이 나있는 YOLO에 관련한 논문을 번역해보려고 합니다.


항상 논문 번역이라는게 그렇듯이 제가 잘못 이해해서 번역이 잘못된 부분이 있다면 언제든지 지적해주시면 감사하겠습니다.


1. Abstract


우리는 object detection에 있어서 새로운 접근법인 YOLO를 소개합니다. object detection은 사전 작업으로 detection을 먼저 수행합니다. 여기서 우리는 object detection을 공간적으로 분리된 bounding box들과 class(분류할 object 종류들)에 대한 확률과 연관된 regression 문제로 재정의하였습니다. Single neural network는 전체 이미지에서 한번의 평가를 통해서 직접적으로 bounding box들을 예측하고 class의 확률을 계산합니다. 전체 detection pipeline이 Single network이기 때문에, 탐지 성능이 최적화됩니다. 

우리의 통합된 아키텍쳐는 극단적으로 빠릅니다. 우리의 YOLO model은 45 FPS로 실시간 이미지 연산이 가능합니다. 더 작은 버젼의 네트워크인 Fast YOLO는 매우 놀랍게도 다른 실시간 탐지모델보다 2배의 mAP(Mean Accuracy Precision:: 평균 정확도)를 가지면서 155 FPS의 성능을 보여줍니다. 최신의 탐지 시스템들과 비교했을 때, YOLO는 localization error가 조금 더 높지만, 배경으로 인한 예측 실패율은 더 낮습니다. 마지막으로 YOLO는 object의 아주 일반적인 표현들을 학습합니다. 이 말은 DPM이나 R-CNN같은 다른 탐지 대비 artwork같은 다른 영역에서의 자연스러운 이미지로부터 일반적인 표현을 학습하는데 있어서 결과가 더 좋다는 것을 의미합니다.


2. Introduction


사람은 이미지를 흘끗 보는 것을 통해서 어떤 object가 어디에 있고, 어떻게 상호작용하는지 곧바로 압니다. 사람의 Visual System은 약간의 의식적인 생각을 통해서 운전같은 복잡한 업무를 빠르고 정확하게 수행합니다. 사람의 능력고 유사한 빠르고 정확한 object detection 알고리즘은 특수하게 고안된 센서 없이 차량을 운전하고 보조 장치가 실시간 장면 정보를 사람에게 전달하며, 범용 반응형 로봇 시스템의 잠재력을 열어줍니다. 

현재 detection 시스템은 classifier를 사용하여 detection을 수행합니다. 이 시스템은 object를 위한 classifier를 갖으며, 테스트 이미지속의 다양한 location과 scale을 평가합니다. Deformable Parts Models(DPM)과 유사한 이 시스템은 sliding window접근법을 사용합니다. sliding window접근법은 classifier가 전체 이미지를 탐색합니다.


Figure 1. The YOLO Detection System. 

YOLO를 이용하여 이미지를 처리하는 과정은 간단하고 직관적입니다. 우리 시스템은 (1) input image를 448 x 448의 이미지로 resize하고

(2) image에서 작동하는 single convolution network를 실행시킵니다. (3) 해당 모델을 통해서 나온 확률값을 threshold로 잘라서 결과값을 보여줍니다.



R-CNN같은 더 최신의 detection 시스템은 region proposal 방법을 사용합니다. region proposal은 image안에서 가능성이 높은 bounding box를 생성합니다. 그리고 그 box속의 이미지를 classifier에 넣어 실행시킵니다. 분류 후에는 이전에 진행 했던 과정들을 중복된 detection을 제거하거나, 다른 장면에서의 object를 기반으로 re-score(재평가)를 하는 것 등을 위해서 성능 향상을 위해 재사용합니다. 이러한 복잡한 pipeline은 각각의 component들을 따로 학습시켜야하기 때문에 느리고 최적화하기가 힘듭니다. 


그래서 우리는 object detection을 이미지 pixel로부터 bounding box좌표와 분류 과정을 single regression problem으로 재정의하였습니다. 우리 시스템을 사용하면 이미지를 한번만 보면 현재 image에 있는 object가 무엇이고 어디인는지 알 수 있습니다.


YOLO는 정말 쉽습니다. [Figure 1]을 보면 Single Convolution network는 물체의 bounding box와 bounding box안의 object가 무엇인지 동시에 예측합니다. YOLO는 전체 image에서 학습하며 직접적으로 detection performence를 최적화합니다. 이런 통합적인 모델은 전통적인 object detection방법에 비교해서 몇가지 이점을 갖습니다.


첫째로 YOLO는 매우 빠릅니다. 우리가 detection을 single regression problem으로 정의하는 것을 통해서, 우리는 복잡한 pipeline이 필요하지 않습니다. 우리는 테스트 시간에 새로운 이미지로 우리의 신경망을 실행시킬 수 있습니다. 우리의 기본적인 네트워크는 Titan X GPU상에서 batch과정없이 45FPS가 나옵니다. 그리고 빠른 버젼은 150 FPS를 상회합니다. 또한 YOLO는 다른 real-time system보다 2배의 mean average precision(mAP)의 성능을 보여줍니다. 


두번째로 YOLO는 image를 예측시에 globally하다는 특징을 가집니다. sliding window나 region proposal 기반의 기술들과는 다르게  학습이나 테스트 중에 전체 이미지를 보기 때문에, 은연중에 각 class의 대표적인 표현들에 대해서 맥락적인 정보를 encoding합니다. 강력한 detection방법인 Fast R-CNN경우에는 배경정보에 따라서 object를 detect하는데 있어서 실수가 있는데, 이것은 Fast R-CNN이 큰 맥락을 보지 못하기 때문입니다. YOLO는 Fast R-CNN과 비교했을 때, background error가 절반정도 밖에 되지 않습니다. 


세번째로 YOLO는 object의 일반적인 특징을 학습합니다. 즉, object의 일반화를 잘 합니다. 예술작품이나 자연의 이미지를 학습하거나 테스트할 때, DPM이나 R-CNN같은 강력한 detection방법들보다 학습을 더 잘합니다. YOLO는 일반화에 강력하기 때문에, 새로운 도메인이나 예상하지 못한 input이 들어와도 망가질 확률이 적습니다.


YOLO는 여전히 분류 능력은 다른 분류시스템보다 떨어집니다. 빠르게 object를 식별하나, 작은 물체를 검출하는데는 애를 먹고있습니다. 우리는 실험에서 해당 내용과 관련해서 trade off를 확인했습니다.


3. Unified Detection

우리는 몇가지 component들을 single convolution network에 통합시켰습니다. 우리의 네트워크는 이미지로 얻은 feature들을 예측하고 탐지하는데 사용합니다. 네트워크는 이미지로부터  bounding box과 class들을 동시에 찾아냅시다. 이 의미는 우리의 네트워크가 image에서 모든 image 종류와 모든 category를 찾는데있어서 globally하다는 것을 의미합니다. YOLO는 높은 mAP를 유지하면서 실시간으로 학습이 가능하도록 end-to-end 방식으로 설계되었습니다. 

YOLO 시스템은 input image를 S x S grid로 나눕니다. 만약에 object의 중심이 grid cell로 떨어지게 되면, 해당 grid cell은 해당 object를 detect하도록 책임이 주어집니다. 각각의 grid cell은 B bounding box와 해당 bounding box에 대한 confidence score를 예측합니다. 이 confidence score는 해당 모델이 해당 box안에 object가 있을 확률이 얼마나 되는지, 그리고 해당 object가 자신이 예측한 object가 맞을 확률이 얼마나 되는지에 대한 확률에 대한 score입니다. 이를 수식으로 표현하게 되면, 우리는 confidence를 로 표현할 수 있습니다. 만약에 grid cell에 object가 존재하지 않는다면, confidence score는 0으로 떨어집니다. 

우리는 confidence score가 예측된 상자의 intersection over union(IOU)와 ground truth(label에서 나타낸 실제값)같기를 원합니다. 각 bounding box는 5가지 요소로 구성되어있습니다. 해당 5다시 요소는  와 confidence score입니다.  는 grid cell의 경계를 기준으로한 상자의 중심 좌표를 의미합니다. width와 height는 예측된 object와 전체 이미지의 width와 height의 비율을 의미합니다. 마지막으로 confidence는 예측된 box와 ground truth(실제값) 사이의 IOU값을 의미합니다. 또한 각각의 cell은 C에 대해서 예측을 합니다. C는 class의 조건부 확률 을 의미합니다. 이러한 확률은 객체를 포함하는 grid cell에 따라 달라집니다. 하나의 grid cell은 예측된 상자수 B와는 상관없이 한가지 종류의 Class의 확률만 계산합니다. 테스트시에는 class의 조건부 확률과 각각의 개별적인 box에 대해서 confidence를 예측했습니다.



각각의 box를 통해서 특정한 class에 대한  confidence score를 얻을 수 있습니다. 이러한 score는 해당 box가 class를 나타내는지, 얼마나 box가 object와 잘 맞춰져있는지에 대한 정보를 encoding하고 있습니다. 


Figure 2 The Model :

우리 시스템은 regression problem으로 object를 detection합니다. image를 S x S의 grid cell로 나누고 

각각의 cell은 B개의 bounding box와 confidence score를 예측합니다. 이러한 예측값은

S x S X (B * 5 + C) 크기의 tensor로 구성되어있습니다.



우리는 YOLO를 Pascal VOC 데이터를 이용해 평가하였습니다. 우리는 S=7, B=2에 해당하는 값을 사용했고, Pascal VOC data는 20개의 class로 label되어있으므로, C=20이 됩니다. 따라서 최종 예측값은  7 x 7 x 30 tensor가 됩니다.

3.1 Network Design

YOLO 모델은 Convolutional neural network로 구현되었고, Pascal VOC detection dataset으로 평가했습니다. 네트워크의 첫번째 Convolutional layer는 image로부터 특징을 추출합니다. 그리고 fully connected layer는 출력확률과 좌표를 예측합니다.

network 아키텍쳐는 이미지 분류를 위한 GoogLeNet 모델로부터 영감을 받았습니다. network는 24개의 Convolutional layer와 2개의 fully connected layer로 구성되어있습니다. GoogLeNet이 사용한 inception 모듈 대신 우리는 간단하게 1x1 reduction layer와 3x3 convolutional layer를 사용했습니다. Figure3은 full network를 보여줍니다.

우리는 또한 빠른 object detection의 한계를 넘게 설계된 YOLO의 빠른 버전을 학습하였습니다. Fast YOLO는 기존에 24개의 Convolution Layer를 사용하던 YOLO에 비교해서 9개로 더 적은 Convolution Layer를 사용했습니다. 그리고 나머지 network의 크기나 학습, 테스트 파라미터들은 기존 YOLO와  Fast YOLO와는 같습니다. 

network의 최종 output은 7x7x30 tensor로 출력됩니다.

Figure 3: The Architecture. 

detection network는 24개의 Convolutional layer와 2개의 fully connected layer를 갖습니다. 1x1 convolutional layer를 번갈아가면서 사용하면 

layer를 지날 때마다 특징 공간이 줄어듭니다. 우리는 ImageNet classification task의 절반의 해상도(224x224 이미지)를 이용하여 

convolutional layer를 미리 학습하고, detection을 위해서 해당 resolution을 2배로 올렸습니다.



3.2 Training


우리는 ImageNet 1000-class competition dataset을 이용하여 convolutional layer를 미리 학습하였습니다. 우리는 Pretraining을 위해서 Figure 3과 같이 20개의 convolutional layer와 average-pooling layer그리고 fully connected layer를 사용하였습니다. 우리는 Caffe의 모델 Zoo에서 GoogLeNet과 비교할 수 있게, ImageNet 2012 validation set을 이용해서 top-5의 정확도가 88%에 다를 때까지 1주일동안 학습하였습니다. 우리는 모든 학습을 Darknet framework을 사용했습니다. 그리고 우리는 detection을 수행할 수 있도록 모델을 변경했습니다. Ren et al.은 convolutional과 connected layer를 pretrained network에 추가하면 성능이 향상될 수 있다는 것을 보여주었습니다. 우리는 이런 그들의 예제를 따라서 4개의 convolutional layer와 2개의 fully connected layer와 해당 layer의 weight들을 랜덤하게 초기화하여 기존 네트워크에 추가하였습니다. detection에는 종종 세부적인 시각정보를 요구하기 때문에, 우리는 input image의 resolution을 향상시켜서 224 x 224의 image를 448 x 448 image로 변경해서 input image로 사용하였습니다.

마지막 layer는 bounding box의 좌표와 class의 확률 모두를 예측합니다. 우리는 image의 width와 height와 bounding box의 width, height의 비율로 파라미터를 정규화하였고, 그 결과로 해당 값들은 0과 1사이로 정규화되었습니다. 또한 bounding box의 x와 y의 좌표를 특정한 grid cell 의 위치에 offset되도록 매개변수화하여 0과 1사이의 경게값을 만들었습니다.

우리는 마지막 layer에는 linear activation function을 사용하였고 나머지 다른 layer에는 leaky를 사용했습니다. leaky rectified linear activaion은 다음 수식을 따릅니다.




우리는 우리 모델의 output의 sum-squared error를 최적화했습니다. 우리는 error function을 sum-squared error를 사용했는데, sum-squared error를 사용한 이유는 최적화시키기 제일 쉽기 때문입니다. 하지만 sum-squared-error는 우리의 목적인 average precision을 최대화하는데 있어서 완벽하게 부합하지는 않습니다. 왜냐면 sum-squared-error는 weight들의 localization error는 classification error와 같다라고 판정하는데, 실제 우리의 세상은 이렇게 이상적이지 않기 때문입니다. 또한 모든 image는 많은 grid cell을 가지고 있고, 많은 grid cell은 어느 object도 포함하고 있지 않습니다. 이런 상태는 해당 cell의 confidence score를 zero로 만들고, 이것은 종종 object가 포함된 image의 grid cell의 gradient를 압도합니다. 이러한 현상은 network를 불안정하게 만들고, 학습이 일찍끝나도록 만듭니다.

우리는 위의 현상을 방지하기 위해서 bounding box의 좌표 예측으로부터 생성된 loss값을 증가시키고, object가 포함되지 않을거다라고 예측된 box의 confidence로부터 생성된 loss는 감소시켰습니다. 여기서 우리는 다음과 같은 2개의 파라미터 와 를 사용해 다음과 같은 방법을 구현하였습니다. 우리는 여기서  ,로 설정하였습니다.

Sum-squared-error는 또한 큰 box와 small box의 weights error와 같습니다. 우리의 error metric은 large box들의 small deviation의 문제를 small box의 small deviation문제보다 더 작게 반영해야합니다. 이런 문제를 처리하기 위해서 우리는 부분적으로 width와 height를 직접 예측하는 대신, width와 height의 제곱근을 직접 예측합니다.

YOLO는 각 grid cell마다 multiple bounding boxes를 예측합니다. 학습 시 우리는 오직 각 object마다 한 predictor에게 하나의 bounding box만을  찾도록 책임을 부여하며, 하나의 predictor에게 어느 예측이 ground truth와 제일 높은 highest IOU를 갖는지에 기반해서 object를 예측하도록 책임을 할당합니다. 이러한 형태는 bounding box predictor들 사이에서 전문성을 갖도록 유도합니다. 각각의 predictor는 predicting certain size, aspect ratios, class 예측이 더 좋아지므로 전체적인 recall향상에 도움이 됩니다.

학습하는 동안 우리는 다음과 같은 multi-part loss function을 따릅니다.



여기서 
은 만약에 i번째 cell에 object가 나타났다는 것을 의미합니다. 그리고 는 cell i의 j번째 bounding box predictor는 해당 예측에 대한 책임이 있다는 것을 의미합니다. 이러한 loss function은 object가 해당 grid cell에 존재할 때만, classification error에 대해서 처벌합니다.(앞에 이야기했던 조건부 클래스 확률). 마찬가지로 predictor가 ground truth box에 대해서 책임이 있는 경우에만 coordinate error에 대한 처벌을 합니다.(grid cell에서 가장 큰 IOU값을 갖는 특정한 predictor)

우리는 Pascal VOC 2007과 2012의 training & validation data set을 사용해서 135번의 epoch로 Network를 학습시켰습니다. VOC 2012를 학습시킬때, 2007 test data도 training용으로 포함했습니다. 우리는 64의 batch size와 0.9의 momentum 그리고 0.0005의 decay값을 설정하였습니다.

우리의 learning rate 스켸쥴은 다음과 같습니다. 첫 epoch에서는 learning rate를 에서 으로 천천히 증가시켰습니다. 만약에 우리가 high learning rate으로 시작한다면 우리의 모델은 종종 불안정한 gradient들로 인해서 발산될 것입니다. 우리는 계속해서 으로 75번의 epoch를 돌렸고 그리고 으로 30번의 epochs그리고 마지막으로 으로 30번의 epoch를 사용했습니다.

overfitting을 피하기 위해서 우리는 dropout과 확장된 데이터를 사용해서 데이터의 수를 늘렸습니다. dropout layer의 rate parameter는 0.5를 사용하였습니다. 이는 첫번째 connected layer와 layer들 사이의 동기화를 막아줍니다. data의 확장으로 인한 data 수를 확보는 여기서 임의적으로 scaling하거나 원본 이미지 크기의 최대 20%정도에서의 데이터 변환을 이용하였습니다. 또한 우리는 임의적으로 이미지의 exposure과 saturation를 최대 1.5배까지 임의로 조정하였습니다.


3.3 Inference

training 과정과 마찬가지로 test image의 detection를 예측하려면 네트워크 평가가 하나 필요합니다. PASCAL VOC에서 네트워크는 이미지 당 98 bounding box와 각 box에 대한 class 확률을 예측합니다. YOLO는 분류 기준 기반 방법과 달리 단일 네트워크 평가 만 필요하므로 테스트 시간이 매우 빠릅니다. grid 디자인은 bounding box 예측에서 공간적 다양성을 적용합니다. object가 어느 grid cell에 속하고 network가 각 object에 대해 하나의 box만 예측하는지는 분명합니다. 그러나 여러 cell의 테두리 근처에있는 큰 object 나 object는 여러 셀로 잘 지역화 될 수 있습니다. 극대치가 아닌 억제를 사용하여 이러한 문제를 해결할 수 있습니다. multi object detection. R-CNN 또는 DPM의 경우처럼 성능에 중요하지는 않지만 최대가 아닌 억제는 mAP를 2-3 %향상시킵니다.

Reference

[1]. You Only Look Once: Unified, Real-Time Object Detection



이것으로 이번 포스팅은 마치겠습니다. 논문 전체를 번역하면 좋겠으나, 결론이나 실험결과에 대한 내용까지 번역하기에는 논문 한편을 이해하는데 과도한 리소스 투입이라 생각되어 이정도 선에서 번역을 마무리하고, 나중에 시간적인 여유가 있으면 추가적으로 번역에서 내용을 추가하도록 하겠습니다.

더 자세한 내용이 궁금하신 분들은 위의 Reference에서 논문 원본을 봐주시면 감사하겠습니다.