[논문리뷰] YOLO v1(You Only Look Once: Unified, Real-Time Object Detection)

Hayun Lee·2021년 6월 30일
2

논문 리뷰

목록 보기
1/11
post-thumbnail

You Only Look Once: Unified, Real-time Object Detection (CVPR 2016)

논문 : YOLO v1
최대한 간결한 문장으로 최대한 자세하게 정리하기 위해 노력했다. 사실 번역본에 가깝다.^^;;

Abstract

객체 인식에서는 먼저 classifier를 사용해 감지를 한다. 대신에, YOLO에서는 객체 인식을 공간적으로 분리된 bounding box와 그와 관련된 클래스 확률에 대한 회귀 문제로 프레임화한다. 단일 신경망(Single Neuron Network)는 한 번의 평가로 전체 이미지에서 직접 bounding box와 클래스의 확률을 예측한다. 전체 탐지(detection) pipeline은 단일 네트워크이므로 탐지 성능에 대해 end-to-end로 최적화될 수 있다.
YOLO의 통합된(unified) 구조는 매우 빠르다. 기본 YOLO 모델은 1초당 45프레임으로 실시간으로 이미지를 처리한다. 네트워크의 더 작은 버전인 Fast YOLO는 초당 155프레임을 처리하면서도 다른 실시간 검출기의 두배에 해당하는 mAP를 달성한다. 최신 탐지 시스템과 비교했을 때 YOLO는 더 많은 지역적 오류를 발생시키지만 백그라운드(배경)에서 잘못된 탐지(false positive, 물체가 아닌데 물체로 판단)를 할 가능성이 더 낮다. 마지막으로, YOLO는 객체의 일반적인 특징을 학습한다. 이것은 자연 이미지에서 artwork와 같은 다른 도메인으로 일반화 할 때 DPM, R-CNN과 같은 다른 객체 탐지 방법보다 성능이 뛰어나다.

1. Introduction

인간은 이미지를 힐끗 보고 물체를 판단 할 수 있다. 인간의 시각 시스템은 빠르고 정확해 우리가 거의 의식하지 않고 운전을 하는 것과 같은 복잡한 작업을 수행할 수 있게 해준다.
현재의 객체 탐지 시스템은 분류기를 재사용하여 객체 탐지를 수행한다. 이러한 시스템은 개체를 감지하기 위해 해당 물체에 대한 분류기(classifier)를 가져와 테스트 이미지에서의 다양한 위치와 배율에서 평가한다. 변형 가능한 부품 모델(DPM)과 같은 시스템은 분류기가 전체 이미지에 걸쳐 균일한 간격으로 분류기가 실행되는 sliding window 접근 방식을 사용한다.
R-CNN과 같은 최근의 접근 방식은 region proposal 방법을 사용해 먼저 이미지에서 잠재적 bounding box를 생성한 다음 그 안에서 분류기를 실행한다. 분류 후에는 scene의 다른 물체를 기준으로 bounding box를 세분화하고 중복 검출을 제거하며 box를 재평가하는 데 사용된다. 이러한 복잡한 파이프라인은 각 개별 구성 요소를 개별적으로 학습해야하기 때문에 느리고 최적화하기 어렵다.
YOLO는 객체 탐지를 이미지 픽셀에서 bounding box의 좌표와 class 확률로 객체 탐지를 위한 단일 회귀 문제로 재구성한다. 따라서 YOLO를 사용하면 당신은 이미지를 한 번만 보고 (You Only Look Once, YOLO) 어떤 물체가 있고 어디에 있는지 예측할 수 있다.

YOLO는 매우 간단하다. Figure 1을 참조하면, 단일 convolution network는 동시에 여러 개의 bounding box와 해당 box에 대한 class의 확률을 예측한다. YOLO는 전체 이미지를 학습하고 탐지 성능을 직접 최적화한다. 이 통합 모델은 기존의 객체 탐지 방법에 비해 다음과 같은 이점이 있다.

1. 매우 빠르다.
회귀 문제로 탐지를 프레임화하므로 복잡한 파이프라인이 필요하지 않다. 탐지를 예측하기 위해 테스트 시간에 새로운 이미지에서 신경망을 실행하기만 하면 된다. 기본 네트워크(base YOLO)는 Titan X GPU에서 일괄 처리없이 초당 45프레임으로 실행되며, 빠른 버전(Fast YOLO)은 150fps 이상으로 실행된다. 즉, 25ms 미만의 지연 시간으로 스트리밍 비디오를 실시간으로 처리할 수 있다. 또한 YOLO는 다른 실시간 시스템의 평균 정밀도(precision)의 두 배 이상을 달성한다.
(웹 캡에서 실시간으로 실행되는 시스템의 데모 : 웹페이지 참조)

2. 예측을 할 때 이미지에 대해 전반적으로(globally) 추론한다.
sliding window와 region proposal 기법과 달리 학습과 테스트 시간 동안 전체 이미지를 보기 때문에 학습과 class와 class 모양에 대한 외관(contextual) 정보를 암시적으로 인코딩(encode)한다. top detection method인 Fast R-CNN은 더 큰 컴텍스트(context)를 볼 수 없기 때문에 이미지의 배경 패치를 개체로 착각한다. 그에 비해 YOLO는 백그라운드 오류 수를 절반 이하로 줄인다.

3. 객체의 일반화 가능한 표현을 학습한다.
자연 이미지에 대해 학습하고 artwork에 대해 테스트했을 때 YOLO는 DPM과 R-CNN과 같은 상위 탐지 방법을 훨신 능가했다. YOLO는 매우 일반화되기 때문에 새로운 도메인이나 예상치 못한 입력에 적용될 때 분해될 가능성이 낮다.

YOLO는 최첨단 탐지 방법에 비해 정확도가 떨어진다. 이미지에서 객체를 빠르게 식별할 수 있지만, 일부 객체, 특히 작은 객체의 위치를 정확하게 파악하는 것은 어렵다. 논문은 실험에서 이러한 trade-off를 더 자세히 검토한다.

2. Unified Detection

객체 탐지의 개별적인 요소들을 단일 신경 네트워크로 통합한다. YOLO 네트워크에서는 전체 이미지의 특징을 사용하여 각 bounding box를 예측한다. 또한 이미지에 대한 모든 클래스의 모든 bounding box를 동시에 예측한다. 즉, 네트워크가 전체 이미지와 이미지의 모든 객체에 대해 전체적으로 이유를 설명한다는 것을 의미한다. YOLO 디자인은 높은 평균 정밀도(precision)를 유지하면서 end-to-end 학습과 real time speed를 가능하게 한다.
YOLO는 입력 이미지를 S ∗ S grid로 나눈다. 개체의 중심이 grid 셀에 들어가면 해당 grid 셀이 해당 객체를 탐지한다.
각 grid 셀은 해당 bounding box에 대한 B bounding box와 신뢰(confidence) 점수를 예측한다. 이런 신뢰도 점수는 모델이 box에 객체가 포함되어 있다는 것을 얼마나 확신하고 box가 예측하는 것이 얼마나 정확하다고 생각하는지를 반영한다. 공식적으로 신뢰를 Pr(Object) ∗ IOUpredtruth_{pred}^{truth} 로 정의한다. 만약 그 셀에 객체가 존재하지 않으면, 신뢰 점수는 0이 되어야 한다. 그렇지 않으면 신뢰 점수가 예측 box와 실제 값(ground truth) 사이의 교차점(IOU)과 같기를 원한다.
각 bounding box는 x,y,w,hx, y, w, h와 신뢰도의 예측으로 구성된다. (x,y)(x, y) 좌표는 grid 셀의 경계를 기준으로 상자의 중심을 나타낸다. 너비와 높이는 전체 이미지를 기준으로 예측된다. 마지막으로 신뢰도 예측은 예측된 box와 실제(ground truth) 사이의 IOU를 나타낸다.
각 grid 셀은 C 조건부 클래스 확률 Pr (Classi_{i} | Object)을 예측한다. 이러한 확률은 객체를 포함하는 grid 셀에서 조절된다. box B의 수에 관계없이 grid 셀당 하나의 클래스 확률 집합만 예측한다.
테스트 시 조건부 클래스 확률과 각 box의 신뢰도 예측을 곱한다.
Pr(Classi_{i}|Object) ∗ Pr(Object) ∗ IOUpredtruth_{pred}^{truth} = Pr(Classi_{i}) ∗ IOUpredtruth_{pred}^{truth}
각 box에 대한 특정 클래스별 신뢰 점수를 제공한다. 이러한 점수는해당 클래스가 box에 나타날 확률과 예측된 box가 객체에 얼마나 잘 맞는지를 모두 인코딩한다.

PASCAL VOC에서 YOLO를 평가하기 위해 S=7, B=2를 사용한다. PASCAL VOC에는 20개의 레이블이 지정된 클래스가 있으므로 C=20이다. 최종 예측은 7∗7∗30 tensor다.

2.1. Network Design

YOLO 모델을 Convolution Neural Network(CNN)으로 구현하고 PASCAL VOC 검출 데이터 셋을 사용해 평가했다. 네트워크의 초기 컨볼루션 계층은 이미지에서 특징을 추출하고, fully connected 계층은 출력 확률과 좌표를 예측한다.
YOLO 네트워크 구조는 이미지 분류를 위한 GoogLeNet과 유사하다. 네트워크에는 24개의 컨볼루션 계층이 있고 그 뒤에 2개의 fully connected된 계층이 있다. GoogLeNet에서 사용하는 시작 모듈 대신, 단순히 1 ∗ 1의 reduction 레이어와 3 ∗ 3 컨볼루션 레이어를 사용한다. 전체 네트워크는 다음 figure 3과 같다.

또한 빠른 객체 인식의 경계를 확장하도록 설계된 빠른 버전의 YOLO도 학습한다. Fast YOLO는 컨볼루션 계층(24개 대신 9개)이 더 적고 해당 계층의 필터 수가 더 적은 신경 네트워크를 사용한다. 네트워크 크기 외에 모든 학습과 테스트 매개 변수는 YOLO와 Fast YOLO가 동일하다.
네트워크의 최종 예측의 출력은 7∗7∗30 tensor이다.

2.2. Training

ImageNet 1000-class 데이터를 이용해 convolution layer를 사전훈련한다. 사전훈련을 위해 Figure 3의 처음 20개의 convolution layer를 사용한 다음 average-pooling layer와 fully connected 레이어를 사용한다. 이 네트워크를 약 1주일동안 학습하고 ImageNet 2012 검증 세트에서 88%의 single crop top-5 accuracy(모델에서 예상한 답과 일치할 확률이 가장 높은 상위 5개의 정확도)를 달성했다. 모든 훈련과 추론에 Darknet Framework를 사용했다.
그 후 모델을 바꿔(convert) 인식을 수행한다. convolution layer와 connected layer를 모두 사전훈련된 네트워크에 추가하면 성능이 향상될 수 있다. 예제에 따라 무작위로 초기화된 가중치를 사용하여 4개의 convolution layer와 2개의 fully connected layer를 추가한다. 인식에는 종종 세밀한 시각 정보가 필요하므로 네트워크의 입력 해상도를 224 × 224에서 448 × 448로 높인다.
마지막 계층은 클래스의 확률과 bonding box의 좌표를 모두 예측한다. bounding box의 너비와 높이를 이미지의 너비와 높이로 정규화하여 0과 1 사이가 되도록 한다. bounding box의 x, y 좌표를 특정 grid 셀 위치의 offset으로 매개변수화하여 0과 1 사이의 경계가 되도록 한다.
마지막 레이어에서 선형(linear) 활성화 함수를 사용하고 다른 모든 레이어는 다음과 같은 leaky rectified linear 활성화 함수를 사용한다.

φ(x)={x,ifx>00.1x,otherwiseφ(x)= \begin{cases} x, & if x>0 \\ 0.1x, & otherwise \end{cases}

모델의 출력에서 sum-squared 에러를 최적화한다. 최적화가 쉽기 때문에 sum-squared error를 사용하지만 평균 정밀도(precision)을 최대화하려는 목표와 완전히 일치하지는 않는다. 위치 측정 오차를 이상적이지 않을 수 있는 분류 오류와 동일하게 가중치를 부여한다. 또한 모든 이미지에서 많은 grid 셀에 객체가 포함되어 있지 않다. 이로 인해 해당 셀의 신뢰도 점수가 0으로 밀려 객체를 포함하는 셀의 그라데이션을 압도하는 경우가 많다. 이로 인해 모델이 불안정해질 수 있으며, 학습이 조기에 분산(diverge)될 수 있다.
이 문제를 해결하기 위해 bounding box 좌표 예측의 loss를 증가시키고 객체를 포함하지 않는 상자에 대한 신뢰도 예측의 손실을 줄인다. 이를 위해 λcoord\lambda_{coord}λnoobj\lambda_{noobj} 이라는 매개변수를 사용하고 λcoord=5\lambda_{coord}=5, λnoobj=.5.\lambda_{noobj}=.5.로 설정한다.
Sum-squared 에러는 큰 상자와 작은 상자의 오차에도 동일하게 가중치를 적용한다. YOLO의 error metric(오류 측정 기준)은 큰 상자의 작은 편차가 작은 상자보다 중요하다는 것을 반영해야한다. 이 문제를 부분적으로 해결하기 위해 너비와 높이가 아닌 bounding box의 너비와 높이의 제곱근을 직접 예측한다.
YOLO는 grid 셀 당 여러 개의 bounding box를 예측한다. 우리는 학습 시에 각 객체에 대해 하나의 bounding box predictor만 담당하기를 원하는데, 하나의 predictor가 Ground Truth와 함께 현재 IOU가 가장 높은 예측을 기반으로 객체를 예측하기 위해 "responsible(책임있는 것)"으로 할당한다. 이것은 bounding box predictor간의 전문화로 이어진다. 각 predictor는 특정 크기, 종횡비, 또는 객체 클래스를 더 잘 예측하여 전반적인 재현율(recall)을 향상시킨다.
학습하는 동안, 다음과 같은 multi-loss function을 최적화한다.

여기서 1iobj\mathbb{1}^{obj}_{i}는 물체가 셀 iijj번째 bounding box 예측 변수가 해당 예측에 "responsible"을 가지고 있음을 나타낸다.
손실 함수는 해당 grid 셀에 객체가 있는 경우에만 분류 오류가 발생한다.(따라서 앞에서 설명한 조건부 클래스 확률이 된다.) 또한 예측 변수가 Ground Truth box에 대해 "responsible"한 경우에만 bounding box 좌표의 오차를 사용할 수 있다.(즉, grid 셀의 모든 예측 변수 중 가장 높은 IOU)
YOLO를 PASCAL VOC 2007과 2012의 학습-검증 데이터 셋에 대해 135 epoch동안 학습시킨다. 2012년 테스트 시에는 VOC 2007 테스트 데이터도 포함된다. 학습 과정에서 batch 사이즈는 64, momentum은 0.9, decay는 0.0005이다.
learning rate 계획은 다음과 같다. 첫 번째 epoch의 경우, learning rate를 10310^{-3}에서 10210^{-2}로 올린다. 만약 높은 learning rate로 학습을 시작하면 YOLO 모델은 불안정한 gradient로 인해 발산될 수 있다. 75 epoch의 경우에는 10210^{-2}로 학습하고, 30 epoch의 경우에는 10310^{-3}이며 마지막 30 epoch의 경우 10410^{-4}이다.
과적합(Overfitting)을 방지하기 위해 dropout과 광범위한 data augmentation을 사용한다. 첫 번째 connected layer 이후 rate=.5의 dropout layer는 layer간의 co-adaptation을 방지한다. Data augmentation에는 원본 이미지 크기의 최대 20%까지 무작위 확대와 변환이 사용된다. 또한 HSV 색 공간에서 이미지의 노출과 채도를 최대 1.5배까지 무작위로 조정한다.

2.3 Inference

--- 작성 중 ---

0개의 댓글